summaryrefslogtreecommitdiff
path: root/PLUGINS/src/dvbhddevice/setup.c
diff options
context:
space:
mode:
Diffstat (limited to 'PLUGINS/src/dvbhddevice/setup.c')
-rw-r--r--PLUGINS/src/dvbhddevice/setup.c227
1 files changed, 211 insertions, 16 deletions
diff --git a/PLUGINS/src/dvbhddevice/setup.c b/PLUGINS/src/dvbhddevice/setup.c
index cb476a8..b6525a0 100644
--- a/PLUGINS/src/dvbhddevice/setup.c
+++ b/PLUGINS/src/dvbhddevice/setup.c
@@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
- * $Id: setup.c 1.14 2011/12/04 15:31:58 kls Exp $
+ * $Id: setup.c 1.17 2012/02/08 15:14:01 kls Exp $
*/
#include "setup.h"
@@ -28,10 +28,13 @@ cHdffSetup::cHdffSetup(void)
AudioDownmix = HDFF_AUDIO_DOWNMIX_AUTOMATIC;
OsdSize = 0;
CecEnabled = 1;
+ CecTvOn = 1;
+ CecTvOff = 0;
RemoteProtocol = 1;
RemoteAddress = -1;
HighLevelOsd = 1;
TrueColorOsd = 1;
+ HideMainMenu = 0;
}
bool cHdffSetup::SetupParse(const char *Name, const char *Value)
@@ -45,10 +48,13 @@ bool cHdffSetup::SetupParse(const char *Name, const char *Value)
else if (strcmp(Name, "AudioDownmix") == 0) AudioDownmix = atoi(Value);
else if (strcmp(Name, "OsdSize") == 0) OsdSize = atoi(Value);
else if (strcmp(Name, "CecEnabled") == 0) CecEnabled = atoi(Value);
+ else if (strcmp(Name, "CecTvOn") == 0) CecTvOn = atoi(Value);
+ else if (strcmp(Name, "CecTvOff") == 0) CecTvOff = atoi(Value);
else if (strcmp(Name, "RemoteProtocol") == 0) RemoteProtocol = atoi(Value);
else if (strcmp(Name, "RemoteAddress") == 0) RemoteAddress = atoi(Value);
else if (strcmp(Name, "HighLevelOsd") == 0) HighLevelOsd = atoi(Value);
else if (strcmp(Name, "TrueColorOsd") == 0) TrueColorOsd = atoi(Value);
+ else if (strcmp(Name, "HideMainMenu") == 0) HideMainMenu = atoi(Value);
else return false;
return true;
}
@@ -112,12 +118,74 @@ HdffVideoMode_t cHdffSetup::GetVideoMode(void)
}
}
+void cHdffSetup::SetNextVideoConversion(void)
+{
+ int nextVideoConversion = HDFF_VIDEO_CONVERSION_AUTOMATIC;
+
+ if (TvFormat == HDFF_TV_FORMAT_16_BY_9)
+ {
+ switch (VideoConversion)
+ {
+ case HDFF_VIDEO_CONVERSION_PILLARBOX:
+ nextVideoConversion = HDFF_VIDEO_CONVERSION_CENTRE_CUT_OUT;
+ break;
+ case HDFF_VIDEO_CONVERSION_CENTRE_CUT_OUT:
+ nextVideoConversion = HDFF_VIDEO_CONVERSION_ALWAYS_16_BY_9;
+ break;
+ case HDFF_VIDEO_CONVERSION_ALWAYS_16_BY_9:
+ nextVideoConversion = HDFF_VIDEO_CONVERSION_ZOOM_16_BY_9;
+ break;
+ case HDFF_VIDEO_CONVERSION_ZOOM_16_BY_9:
+ nextVideoConversion = HDFF_VIDEO_CONVERSION_PILLARBOX;
+ break;
+ }
+ }
+ else
+ {
+ switch (VideoConversion)
+ {
+ case HDFF_VIDEO_CONVERSION_LETTERBOX_16_BY_9:
+ nextVideoConversion = HDFF_VIDEO_CONVERSION_LETTERBOX_14_BY_9;
+ break;
+ case HDFF_VIDEO_CONVERSION_LETTERBOX_14_BY_9:
+ nextVideoConversion = HDFF_VIDEO_CONVERSION_CENTRE_CUT_OUT;
+ break;
+ case HDFF_VIDEO_CONVERSION_CENTRE_CUT_OUT:
+ nextVideoConversion = HDFF_VIDEO_CONVERSION_LETTERBOX_16_BY_9;
+ break;
+ }
+ }
+ VideoConversion = nextVideoConversion;
+}
+
+const char * cHdffSetup::GetVideoConversionString(void)
+{
+ switch (VideoConversion)
+ {
+ case HDFF_VIDEO_CONVERSION_AUTOMATIC:
+ default:
+ return tr("Automatic");
+ case HDFF_VIDEO_CONVERSION_LETTERBOX_16_BY_9:
+ return tr("Letterbox 16/9");
+ case HDFF_VIDEO_CONVERSION_LETTERBOX_14_BY_9:
+ return tr("Letterbox 14/9");
+ case HDFF_VIDEO_CONVERSION_PILLARBOX:
+ return tr("Pillarbox");
+ case HDFF_VIDEO_CONVERSION_CENTRE_CUT_OUT:
+ return tr("CentreCutOut");
+ case HDFF_VIDEO_CONVERSION_ALWAYS_16_BY_9:
+ return tr("Always 16/9");
+ case HDFF_VIDEO_CONVERSION_ZOOM_16_BY_9:
+ return tr("Zoom 16/9");
+ }
+}
+
+
cHdffSetupPage::cHdffSetupPage(HDFF::cHdffCmdIf * pHdffCmdIf)
{
const int kResolutions = 4;
const int kVideoModeAdaptions = 4;
const int kTvFormats = 2;
- const int kVideoConversions = 6;
const int kAnalogueVideos = 4;
const int kAudioDownmixes = 5;
const int kOsdSizes = 5;
@@ -145,17 +213,6 @@ cHdffSetupPage::cHdffSetupPage(HDFF::cHdffCmdIf * pHdffCmdIf)
"16/9",
};
- static const char * VideoConversionItems[kVideoConversions] =
- {
- tr("Automatic"),
- tr("Letterbox 16/9"),
- tr("Letterbox 14/9"),
- tr("Pillarbox"),
- tr("CentreCutOut"),
- tr("Always 16/9"),
- };
-
-
static const char * AnalogueVideoItems[kAnalogueVideos] =
{
tr("Disabled"),
@@ -194,25 +251,133 @@ cHdffSetupPage::cHdffSetupPage(HDFF::cHdffCmdIf * pHdffCmdIf)
Add(new cMenuEditStraItem(tr("Resolution"), &mNewHdffSetup.Resolution, kResolutions, ResolutionItems));
Add(new cMenuEditStraItem(tr("Video Mode Adaption"), &mNewHdffSetup.VideoModeAdaption, kVideoModeAdaptions, VideoModeAdaptionItems));
- Add(new cMenuEditStraItem(tr("TV format"), &mNewHdffSetup.TvFormat, kTvFormats, TvFormatItems));
- Add(new cMenuEditStraItem(tr("Video Conversion"), &mNewHdffSetup.VideoConversion, kVideoConversions, VideoConversionItems));
+ mTvFormatItem = new cMenuEditStraItem(tr("TV format"), &mNewHdffSetup.TvFormat, kTvFormats, TvFormatItems);
+ Add(mTvFormatItem);
Add(new cMenuEditStraItem(tr("Analogue Video"), &mNewHdffSetup.AnalogueVideo, kAnalogueVideos, AnalogueVideoItems));
Add(new cMenuEditIntItem(tr("Audio Delay (ms)"), &mNewHdffSetup.AudioDelay, 0, 500));
Add(new cMenuEditStraItem(tr("Audio Downmix"), &mNewHdffSetup.AudioDownmix, kAudioDownmixes, AudioDownmixItems));
Add(new cMenuEditStraItem(tr("OSD Size"), &mNewHdffSetup.OsdSize, kOsdSizes, OsdSizeItems));
Add(new cMenuEditBoolItem(tr("HDMI CEC"), &mNewHdffSetup.CecEnabled));
+ Add(new cMenuEditBoolItem(tr("CEC: Switch TV on"), &mNewHdffSetup.CecTvOn));
+ Add(new cMenuEditBoolItem(tr("CEC: Switch TV off"), &mNewHdffSetup.CecTvOff));
Add(new cMenuEditStraItem(tr("Remote Control Protocol"), &mNewHdffSetup.RemoteProtocol, kRemoteProtocols, RemoteProtocolItems));
Add(new cMenuEditIntItem(tr("Remote Control Address"), &mNewHdffSetup.RemoteAddress, -1, 31));
Add(new cMenuEditBoolItem(tr("High Level OSD"), &mNewHdffSetup.HighLevelOsd));
Add(new cMenuEditBoolItem(tr("Allow True Color OSD"), &mNewHdffSetup.TrueColorOsd));
+ Add(new cMenuEditBoolItem(tr("Hide mainmenu entry"), &mNewHdffSetup.HideMainMenu));
+
+ mVideoConversion = 0;
+ if (mNewHdffSetup.TvFormat == HDFF_TV_FORMAT_16_BY_9)
+ {
+ switch (mNewHdffSetup.VideoConversion)
+ {
+ case HDFF_VIDEO_CONVERSION_PILLARBOX:
+ mVideoConversion = 0;
+ break;
+ case HDFF_VIDEO_CONVERSION_CENTRE_CUT_OUT:
+ mVideoConversion = 1;
+ break;
+ case HDFF_VIDEO_CONVERSION_ALWAYS_16_BY_9:
+ mVideoConversion = 2;
+ break;
+ case HDFF_VIDEO_CONVERSION_ZOOM_16_BY_9:
+ mVideoConversion = 3;
+ break;
+ }
+ }
+ else
+ {
+ switch (mNewHdffSetup.VideoConversion)
+ {
+ case HDFF_VIDEO_CONVERSION_LETTERBOX_16_BY_9:
+ mVideoConversion = 0;
+ break;
+ case HDFF_VIDEO_CONVERSION_LETTERBOX_14_BY_9:
+ mVideoConversion = 1;
+ break;
+ case HDFF_VIDEO_CONVERSION_CENTRE_CUT_OUT:
+ mVideoConversion = 2;
+ break;
+ }
+ }
+ BuildVideoConversionItem();
}
cHdffSetupPage::~cHdffSetupPage(void)
{
}
+void cHdffSetupPage::BuildVideoConversionItem(void)
+{
+ const int kVideoConversions4by3 = 3;
+ const int kVideoConversions16by9 = 4;
+
+ static const char * VideoConversionItems4by3[kVideoConversions4by3] =
+ {
+ tr("Letterbox 16/9"),
+ tr("Letterbox 14/9"),
+ tr("CentreCutOut")
+ };
+
+ static const char * VideoConversionItems16by9[kVideoConversions16by9] =
+ {
+ tr("Pillarbox"),
+ tr("CentreCutOut"),
+ tr("Always 16/9"),
+ tr("Zoom 16/9")
+ };
+
+ cOsdItem * item;
+
+ cList<cOsdItem>::Del(mTvFormatItem->Next());
+ if (mNewHdffSetup.TvFormat == HDFF_TV_FORMAT_16_BY_9)
+ {
+ item = new cMenuEditStraItem(tr("Video Conversion"), &mVideoConversion,
+ kVideoConversions16by9, VideoConversionItems16by9);
+ }
+ else
+ {
+ item = new cMenuEditStraItem(tr("Video Conversion"), &mVideoConversion,
+ kVideoConversions4by3, VideoConversionItems4by3);
+ }
+ Add(item, false, mTvFormatItem);
+}
+
void cHdffSetupPage::Store(void)
{
+ if (mNewHdffSetup.TvFormat == HDFF_TV_FORMAT_16_BY_9)
+ {
+ switch (mVideoConversion)
+ {
+ case 0:
+ mNewHdffSetup.VideoConversion = HDFF_VIDEO_CONVERSION_PILLARBOX;
+ break;
+ case 1:
+ mNewHdffSetup.VideoConversion = HDFF_VIDEO_CONVERSION_CENTRE_CUT_OUT;
+ break;
+ case 2:
+ mNewHdffSetup.VideoConversion = HDFF_VIDEO_CONVERSION_ALWAYS_16_BY_9;
+ break;
+ case 3:
+ mNewHdffSetup.VideoConversion = HDFF_VIDEO_CONVERSION_ZOOM_16_BY_9;
+ break;
+ }
+ }
+ else
+ {
+ switch (mVideoConversion)
+ {
+ case 0:
+ mNewHdffSetup.VideoConversion = HDFF_VIDEO_CONVERSION_LETTERBOX_16_BY_9;
+ break;
+ case 1:
+ mNewHdffSetup.VideoConversion = HDFF_VIDEO_CONVERSION_LETTERBOX_14_BY_9;
+ break;
+ case 2:
+ mNewHdffSetup.VideoConversion = HDFF_VIDEO_CONVERSION_CENTRE_CUT_OUT;
+ break;
+ }
+ }
SetupStore("Resolution", mNewHdffSetup.Resolution);
SetupStore("VideoModeAdaption", mNewHdffSetup.VideoModeAdaption);
SetupStore("TvFormat", mNewHdffSetup.TvFormat);
@@ -222,10 +387,13 @@ void cHdffSetupPage::Store(void)
SetupStore("AudioDownmix", mNewHdffSetup.AudioDownmix);
SetupStore("OsdSize", mNewHdffSetup.OsdSize);
SetupStore("CecEnabled", mNewHdffSetup.CecEnabled);
+ SetupStore("CecTvOn", mNewHdffSetup.CecTvOn);
+ SetupStore("CecTvOff", mNewHdffSetup.CecTvOff);
SetupStore("RemoteProtocol", mNewHdffSetup.RemoteProtocol);
SetupStore("RemoteAddress", mNewHdffSetup.RemoteAddress);
SetupStore("HighLevelOsd", mNewHdffSetup.HighLevelOsd);
SetupStore("TrueColorOsd", mNewHdffSetup.TrueColorOsd);
+ SetupStore("HideMainMenu", mNewHdffSetup.HideMainMenu);
if (mHdffCmdIf)
{
@@ -237,7 +405,7 @@ void cHdffSetupPage::Store(void)
HdffHdmiConfig_t hdmiConfig;
videoFormat.AutomaticEnabled = true;
- videoFormat.AfdEnabled = true;
+ videoFormat.AfdEnabled = false;
videoFormat.TvFormat = (HdffTvFormat_t) mNewHdffSetup.TvFormat;
videoFormat.VideoConversion = (HdffVideoConversion_t) mNewHdffSetup.VideoConversion;
mHdffCmdIf->CmdAvSetVideoFormat(0, &videoFormat);
@@ -247,6 +415,7 @@ void cHdffSetupPage::Store(void)
mHdffCmdIf->CmdMuxSetVideoOut((HdffVideoOut_t) mNewHdffSetup.AnalogueVideo);
+ memset(&hdmiConfig, 0, sizeof(hdmiConfig));
hdmiConfig.TransmitAudio = true;
hdmiConfig.ForceDviMode = false;
hdmiConfig.CecEnabled = mNewHdffSetup.CecEnabled;
@@ -259,3 +428,29 @@ void cHdffSetupPage::Store(void)
gHdffSetup = mNewHdffSetup;
}
+
+eOSState cHdffSetupPage::ProcessKey(eKeys key)
+{
+ eOSState state = cMenuSetupPage::ProcessKey(key);
+
+ if (state == osContinue)
+ {
+ cOsdItem * item;
+ switch (key)
+ {
+ case kLeft:
+ case kRight:
+ item = Get(Current());
+ if (item == mTvFormatItem)
+ {
+ mVideoConversion = 0;
+ BuildVideoConversionItem();
+ Display();
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ return state;
+}