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.c252
1 files changed, 252 insertions, 0 deletions
diff --git a/PLUGINS/src/dvbhddevice/setup.c b/PLUGINS/src/dvbhddevice/setup.c
new file mode 100644
index 0000000..3cb69b1
--- /dev/null
+++ b/PLUGINS/src/dvbhddevice/setup.c
@@ -0,0 +1,252 @@
+/*
+ * setup.c: Setup for the DVB HD Full Featured On Screen Display
+ *
+ * See the README file for copyright information and how to reach the author.
+ *
+ * $Id: setup.c 1.11 2011/04/17 11:45:17 kls Exp $
+ */
+
+#include "setup.h"
+#include "hdffcmd.h"
+
+const int kResolutions = 4;
+const int kTvFormats = 2;
+const int kVideoConversions = 6;
+const int kAnalogueVideos = 4;
+const int kAudioDownmixes = 5;
+const int kOsdSizes = 5;
+const int kRemoteProtocols = 3;
+
+const int kResolution1080i = 0;
+const int kResolution720p = 1;
+const int kResolution576p = 2;
+const int kResolution576i = 3;
+
+static const char * ResolutionItems[] =
+{
+ "1080i",
+ "720p",
+ "576p",
+ "576i",
+ NULL
+};
+
+static const char * TvFormatItems[] =
+{
+ "4/3",
+ "16/9",
+ NULL
+};
+
+static const char * VideoConversionItems[] =
+{
+ "Automatic",
+ "Letterbox 16/9",
+ "Letterbox 14/9",
+ "Pillarbox",
+ "CentreCutOut",
+ "Always 16/9",
+ NULL
+};
+
+static const char * AnalogueVideoItems[] =
+{
+ "Disabled",
+ "RGB",
+ "CVBS + YUV",
+ "YC (S-Video)",
+ NULL
+};
+
+static const char * AudioDownmixItems[] =
+{
+ "Disabled",
+ "Analogue only",
+ "Always",
+ "Automatic",
+ "HDMI only",
+ NULL
+};
+
+static const char * OsdSizeItems[] =
+{
+ "Follow resolution",
+ "1920x1080",
+ "1280x720",
+ "1024x576",
+ "720x576",
+ NULL
+};
+
+static const char * RemoteProtocolItems[] =
+{
+ "none",
+ "RC5",
+ "RC6",
+ NULL
+};
+
+cHdffSetup gHdffSetup;
+
+cHdffSetup::cHdffSetup(void)
+{
+ Resolution = kResolution1080i;
+ TvFormat = HDFF::tvFormat16by9;
+ VideoConversion = HDFF::videoConversionPillarbox;
+ AnalogueVideo = HDFF::videoOutCvbsYuv;
+ AudioDelay = 0;
+ AudioDownmix = HDFF::downmixAutomatic;
+ OsdSize = 0;
+ CecEnabled = 1;
+ RemoteProtocol = 1;
+ RemoteAddress = -1;
+ HighLevelOsd = 1;
+ TrueColorOsd = 1;
+}
+
+bool cHdffSetup::SetupParse(const char *Name, const char *Value)
+{
+ if (strcmp(Name, "Resolution") == 0) Resolution = atoi(Value);
+ else if (strcmp(Name, "TvFormat") == 0) TvFormat = atoi(Value);
+ else if (strcmp(Name, "VideoConversion") == 0) VideoConversion = atoi(Value);
+ else if (strcmp(Name, "AnalogueVideo") == 0) AnalogueVideo = atoi(Value);
+ else if (strcmp(Name, "AudioDelay") == 0) AudioDelay = atoi(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, "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 return false;
+ return true;
+}
+
+void cHdffSetup::GetOsdSize(int &Width, int &Height, double &PixelAspect)
+{
+ if (OsdSize == 0) {
+ if (Resolution == kResolution1080i) {
+ Width = 1920;
+ Height = 1080;
+ }
+ else if (Resolution == kResolution720p) {
+ Width = 1280;
+ Height = 720;
+ }
+ else {
+ Width = 720;
+ Height = 576;
+ }
+ if (TvFormat == HDFF::tvFormat16by9)
+ PixelAspect = 16.0 / 9.0;
+ else
+ PixelAspect = 4.0 / 3.0;
+ }
+ else if (OsdSize == 1) {
+ Width = 1920;
+ Height = 1080;
+ PixelAspect = 16.0 / 9.0;
+ }
+ else if (OsdSize == 2) {
+ Width = 1280;
+ Height = 720;
+ PixelAspect = 16.0 / 9.0;
+ }
+ else if (OsdSize == 3) {
+ Width = 1024;
+ Height = 576;
+ PixelAspect = 16.0 / 9.0;
+ }
+ else {
+ Width = 720;
+ Height = 576;
+ PixelAspect = 4.0 / 3.0;
+ }
+ PixelAspect /= double(Width) / Height;
+}
+
+HDFF::eHdmiVideoMode cHdffSetup::GetVideoMode(void)
+{
+ switch (Resolution)
+ {
+ case kResolution1080i:
+ default:
+ return HDFF::videoMode1080i50;
+ case kResolution720p:
+ return HDFF::videoMode720p50;
+ case kResolution576p:
+ return HDFF::videoMode576p50;
+ case kResolution576i:
+ return HDFF::videoMode576i50;
+ }
+}
+
+cHdffSetupPage::cHdffSetupPage(HDFF::cHdffCmdIf * pHdffCmdIf)
+{
+ mHdffCmdIf = pHdffCmdIf;
+ mNewHdffSetup = gHdffSetup;
+
+ Add(new cMenuEditStraItem("Resolution", &mNewHdffSetup.Resolution, kResolutions, ResolutionItems));
+ Add(new cMenuEditStraItem("TV format", &mNewHdffSetup.TvFormat, kTvFormats, TvFormatItems));
+ Add(new cMenuEditStraItem("Video Conversion", &mNewHdffSetup.VideoConversion, kVideoConversions, VideoConversionItems));
+ Add(new cMenuEditStraItem("Analogue Video", &mNewHdffSetup.AnalogueVideo, kAnalogueVideos, AnalogueVideoItems));
+ Add(new cMenuEditIntItem("Audio Delay (ms)", &mNewHdffSetup.AudioDelay, 0, 500));
+ Add(new cMenuEditStraItem("Audio Downmix", &mNewHdffSetup.AudioDownmix, kAudioDownmixes, AudioDownmixItems));
+ Add(new cMenuEditStraItem("Osd Size", &mNewHdffSetup.OsdSize, kOsdSizes, OsdSizeItems));
+ Add(new cMenuEditBoolItem("HDMI CEC", &mNewHdffSetup.CecEnabled));
+ Add(new cMenuEditStraItem("Remote Control Protocol", &mNewHdffSetup.RemoteProtocol, kRemoteProtocols, RemoteProtocolItems));
+ Add(new cMenuEditIntItem("Remote Control Address", &mNewHdffSetup.RemoteAddress, -1, 31));
+ Add(new cMenuEditBoolItem("High Level OSD", &mNewHdffSetup.HighLevelOsd));
+ Add(new cMenuEditBoolItem("Allow True Color OSD", &mNewHdffSetup.TrueColorOsd));
+}
+
+cHdffSetupPage::~cHdffSetupPage(void)
+{
+}
+
+void cHdffSetupPage::Store(void)
+{
+ SetupStore("Resolution", mNewHdffSetup.Resolution);
+ SetupStore("TvFormat", mNewHdffSetup.TvFormat);
+ SetupStore("VideoConversion", mNewHdffSetup.VideoConversion);
+ SetupStore("AnalogueVideo", mNewHdffSetup.AnalogueVideo);
+ SetupStore("AudioDelay", mNewHdffSetup.AudioDelay);
+ SetupStore("AudioDownmix", mNewHdffSetup.AudioDownmix);
+ SetupStore("OsdSize", mNewHdffSetup.OsdSize);
+ SetupStore("CecEnabled", mNewHdffSetup.CecEnabled);
+ SetupStore("RemoteProtocol", mNewHdffSetup.RemoteProtocol);
+ SetupStore("RemoteAddress", mNewHdffSetup.RemoteAddress);
+ SetupStore("HighLevelOsd", mNewHdffSetup.HighLevelOsd);
+ SetupStore("TrueColorOsd", mNewHdffSetup.TrueColorOsd);
+
+ if (mHdffCmdIf)
+ {
+ if (mNewHdffSetup.Resolution != gHdffSetup.Resolution)
+ {
+ mHdffCmdIf->CmdHdmiSetVideoMode(mNewHdffSetup.GetVideoMode());
+ }
+ HDFF::tVideoFormat videoFormat;
+ HDFF::tHdmiConfig hdmiConfig;
+
+ videoFormat.AutomaticEnabled = true;
+ videoFormat.AfdEnabled = true;
+ videoFormat.TvFormat = (HDFF::eTvFormat) mNewHdffSetup.TvFormat;
+ videoFormat.VideoConversion = (HDFF::eVideoConversion) mNewHdffSetup.VideoConversion;
+ mHdffCmdIf->CmdAvSetVideoFormat(0, &videoFormat);
+
+ mHdffCmdIf->CmdAvSetAudioDelay(mNewHdffSetup.AudioDelay);
+ mHdffCmdIf->CmdAvSetAudioDownmix((HDFF::eDownmixMode) mNewHdffSetup.AudioDownmix);
+
+ mHdffCmdIf->CmdMuxSetVideoOut((HDFF::eVideoOut) mNewHdffSetup.AnalogueVideo);
+
+ hdmiConfig.TransmitAudio = true;
+ hdmiConfig.ForceDviMode = false;
+ hdmiConfig.CecEnabled = mNewHdffSetup.CecEnabled;
+ mHdffCmdIf->CmdHdmiConfigure(&hdmiConfig);
+
+ mHdffCmdIf->CmdRemoteSetProtocol((HDFF::eRemoteProtocol) mNewHdffSetup.RemoteProtocol);
+ mHdffCmdIf->CmdRemoteSetAddressFilter(mNewHdffSetup.RemoteAddress >= 0, mNewHdffSetup.RemoteAddress);
+ }
+
+ gHdffSetup = mNewHdffSetup;
+}