vdr  2.0.4
setup.c
Go to the documentation of this file.
1 /*
2  * setup.c: Setup for the DVB HD Full Featured On Screen Display
3  *
4  * See the README file for copyright information and how to reach the author.
5  */
6 
7 #include "setup.h"
8 #include "hdffcmd.h"
9 
10 const int kResolution1080i = 0;
11 const int kResolution720p = 1;
12 const int kResolution576p = 2;
13 const int kResolution576i = 3;
14 
15 
17 
19 {
25  AudioDelay = 0;
27  AvSyncShift = 0;
28  OsdSize = 0;
29  CecEnabled = 1;
30  CecTvOn = 1;
31  CecTvOff = 0;
32  RemoteProtocol = 1;
33  RemoteAddress = -1;
34  HighLevelOsd = 1;
35  TrueColorOsd = 1;
36  HideMainMenu = 0;
37 }
38 
39 bool cHdffSetup::SetupParse(const char *Name, const char *Value)
40 {
41  if (strcmp(Name, "Resolution") == 0) Resolution = atoi(Value);
42  else if (strcmp(Name, "VideoModeAdaption") == 0) VideoModeAdaption = atoi(Value);
43  else if (strcmp(Name, "TvFormat") == 0) TvFormat = atoi(Value);
44  else if (strcmp(Name, "VideoConversion") == 0) VideoConversion = atoi(Value);
45  else if (strcmp(Name, "AnalogueVideo") == 0) AnalogueVideo = atoi(Value);
46  else if (strcmp(Name, "AudioDelay") == 0) AudioDelay = atoi(Value);
47  else if (strcmp(Name, "AudioDownmix") == 0) AudioDownmix = atoi(Value);
48  else if (strcmp(Name, "AvSyncShift") == 0) AvSyncShift = atoi(Value);
49  else if (strcmp(Name, "OsdSize") == 0) OsdSize = atoi(Value);
50  else if (strcmp(Name, "CecEnabled") == 0) CecEnabled = atoi(Value);
51  else if (strcmp(Name, "CecTvOn") == 0) CecTvOn = atoi(Value);
52  else if (strcmp(Name, "CecTvOff") == 0) CecTvOff = atoi(Value);
53  else if (strcmp(Name, "RemoteProtocol") == 0) RemoteProtocol = atoi(Value);
54  else if (strcmp(Name, "RemoteAddress") == 0) RemoteAddress = atoi(Value);
55  else if (strcmp(Name, "HighLevelOsd") == 0) HighLevelOsd = atoi(Value);
56  else if (strcmp(Name, "TrueColorOsd") == 0) TrueColorOsd = atoi(Value);
57  else if (strcmp(Name, "HideMainMenu") == 0) HideMainMenu = atoi(Value);
58  else return false;
59  return true;
60 }
61 
62 void cHdffSetup::GetOsdSize(int &Width, int &Height, double &PixelAspect)
63 {
64  if (OsdSize == 0) {
66  Width = 1920;
67  Height = 1080;
68  }
69  else if (Resolution == kResolution720p) {
70  Width = 1280;
71  Height = 720;
72  }
73  else {
74  Width = 720;
75  Height = 576;
76  }
78  PixelAspect = 16.0 / 9.0;
79  else
80  PixelAspect = 4.0 / 3.0;
81  }
82  else if (OsdSize == 1) {
83  Width = 1920;
84  Height = 1080;
85  PixelAspect = 16.0 / 9.0;
86  }
87  else if (OsdSize == 2) {
88  Width = 1280;
89  Height = 720;
90  PixelAspect = 16.0 / 9.0;
91  }
92  else if (OsdSize == 3) {
93  Width = 1024;
94  Height = 576;
95  PixelAspect = 16.0 / 9.0;
96  }
97  else {
98  Width = 720;
99  Height = 576;
100  PixelAspect = 4.0 / 3.0;
101  }
102  PixelAspect /= double(Width) / Height;
103 }
104 
106 {
107  switch (Resolution)
108  {
109  case kResolution1080i:
110  default:
112  case kResolution720p:
113  return HDFF_VIDEO_MODE_720P50;
114  case kResolution576p:
115  return HDFF_VIDEO_MODE_576P50;
116  case kResolution576i:
117  return HDFF_VIDEO_MODE_576I50;
118  }
119 }
120 
122 {
123  int nextVideoConversion = HDFF_VIDEO_CONVERSION_AUTOMATIC;
124 
126  {
127  switch (VideoConversion)
128  {
130  nextVideoConversion = HDFF_VIDEO_CONVERSION_CENTRE_CUT_OUT;
131  break;
133  nextVideoConversion = HDFF_VIDEO_CONVERSION_ALWAYS_16_BY_9;
134  break;
136  nextVideoConversion = HDFF_VIDEO_CONVERSION_ZOOM_16_BY_9;
137  break;
139  nextVideoConversion = HDFF_VIDEO_CONVERSION_PILLARBOX;
140  break;
141  }
142  }
143  else
144  {
145  switch (VideoConversion)
146  {
148  nextVideoConversion = HDFF_VIDEO_CONVERSION_LETTERBOX_14_BY_9;
149  break;
151  nextVideoConversion = HDFF_VIDEO_CONVERSION_CENTRE_CUT_OUT;
152  break;
154  nextVideoConversion = HDFF_VIDEO_CONVERSION_LETTERBOX_16_BY_9;
155  break;
156  }
157  }
158  VideoConversion = nextVideoConversion;
159 }
160 
162 {
163  switch (VideoConversion)
164  {
166  default:
167  return tr("Automatic");
169  return tr("Letterbox 16/9");
171  return tr("Letterbox 14/9");
173  return tr("Pillarbox");
175  return tr("CentreCutOut");
177  return tr("Always 16/9");
179  return tr("Zoom 16/9");
180  }
181 }
182 
183 
185 {
186  const int kResolutions = 4;
187  const int kVideoModeAdaptions = 4;
188  const int kTvFormats = 2;
189  const int kAnalogueVideos = 4;
190  const int kAudioDownmixes = 5;
191  const int kOsdSizes = 5;
192  const int kRemoteProtocols = 3;
193 
194  static const char * ResolutionItems[kResolutions] =
195  {
196  "1080i",
197  "720p",
198  "576p",
199  "576i",
200  };
201 
202  static const char * VideoModeAdaptionItems[kVideoModeAdaptions] =
203  {
204  tr("Off"),
205  tr("Frame rate"),
206  tr("HD Only"),
207  tr("Always")
208  };
209 
210  static const char * TvFormatItems[kTvFormats] =
211  {
212  "4/3",
213  "16/9",
214  };
215 
216  static const char * AnalogueVideoItems[kAnalogueVideos] =
217  {
218  tr("Disabled"),
219  "RGB",
220  "CVBS + YUV",
221  "YC (S-Video)",
222  };
223 
224  static const char * AudioDownmixItems[kAudioDownmixes] =
225  {
226  tr("Disabled"),
227  tr("Analogue only"),
228  tr("Always"),
229  tr("Automatic"),
230  tr("HDMI only"),
231  };
232 
233  static const char * OsdSizeItems[kOsdSizes] =
234  {
235  tr("Follow resolution"),
236  "1920x1080",
237  "1280x720",
238  "1024x576",
239  "720x576",
240  };
241 
242  static const char * RemoteProtocolItems[] =
243  {
244  tr("none"),
245  "RC5",
246  "RC6",
247  };
248 
249  mHdffCmdIf = pHdffCmdIf;
251 
252  Add(new cMenuEditStraItem(tr("Resolution"), &mNewHdffSetup.Resolution, kResolutions, ResolutionItems));
253  Add(new cMenuEditStraItem(tr("Video Mode Adaption"), &mNewHdffSetup.VideoModeAdaption, kVideoModeAdaptions, VideoModeAdaptionItems));
254  mTvFormatItem = new cMenuEditStraItem(tr("TV format"), &mNewHdffSetup.TvFormat, kTvFormats, TvFormatItems);
256  Add(new cMenuEditStraItem(tr("Analogue Video"), &mNewHdffSetup.AnalogueVideo, kAnalogueVideos, AnalogueVideoItems));
257  Add(new cMenuEditIntItem(tr("Audio Delay (ms)"), &mNewHdffSetup.AudioDelay, 0, 500));
258  Add(new cMenuEditStraItem(tr("Audio Downmix"), &mNewHdffSetup.AudioDownmix, kAudioDownmixes, AudioDownmixItems));
259  Add(new cMenuEditIntItem(tr("A/V Sync Shift (ms)"), &mNewHdffSetup.AvSyncShift, -500, 500));
260  Add(new cMenuEditStraItem(tr("OSD Size"), &mNewHdffSetup.OsdSize, kOsdSizes, OsdSizeItems));
261  Add(new cMenuEditBoolItem(tr("HDMI CEC"), &mNewHdffSetup.CecEnabled));
262  Add(new cMenuEditBoolItem(tr("CEC: Switch TV on"), &mNewHdffSetup.CecTvOn));
263  Add(new cMenuEditBoolItem(tr("CEC: Switch TV off"), &mNewHdffSetup.CecTvOff));
264  Add(new cMenuEditStraItem(tr("Remote Control Protocol"), &mNewHdffSetup.RemoteProtocol, kRemoteProtocols, RemoteProtocolItems));
265  Add(new cMenuEditIntItem(tr("Remote Control Address"), &mNewHdffSetup.RemoteAddress, -1, 31));
266  Add(new cMenuEditBoolItem(tr("High Level OSD"), &mNewHdffSetup.HighLevelOsd));
267  Add(new cMenuEditBoolItem(tr("Allow True Color OSD"), &mNewHdffSetup.TrueColorOsd));
268  Add(new cMenuEditBoolItem(tr("Hide mainmenu entry"), &mNewHdffSetup.HideMainMenu));
269 
270  mVideoConversion = 0;
272  {
274  {
276  mVideoConversion = 0;
277  break;
279  mVideoConversion = 1;
280  break;
282  mVideoConversion = 2;
283  break;
285  mVideoConversion = 3;
286  break;
287  }
288  }
289  else
290  {
292  {
294  mVideoConversion = 0;
295  break;
297  mVideoConversion = 1;
298  break;
300  mVideoConversion = 2;
301  break;
302  }
303  }
305 }
306 
308 {
309 }
310 
312 {
313  const int kVideoConversions4by3 = 3;
314  const int kVideoConversions16by9 = 4;
315 
316  static const char * VideoConversionItems4by3[kVideoConversions4by3] =
317  {
318  tr("Letterbox 16/9"),
319  tr("Letterbox 14/9"),
320  tr("CentreCutOut")
321  };
322 
323  static const char * VideoConversionItems16by9[kVideoConversions16by9] =
324  {
325  tr("Pillarbox"),
326  tr("CentreCutOut"),
327  tr("Always 16/9"),
328  tr("Zoom 16/9")
329  };
330 
331  cOsdItem * item;
332 
335  {
336  item = new cMenuEditStraItem(tr("Video Conversion"), &mVideoConversion,
337  kVideoConversions16by9, VideoConversionItems16by9);
338  }
339  else
340  {
341  item = new cMenuEditStraItem(tr("Video Conversion"), &mVideoConversion,
342  kVideoConversions4by3, VideoConversionItems4by3);
343  }
344  Add(item, false, mTvFormatItem);
345 }
346 
348 {
350  {
351  switch (mVideoConversion)
352  {
353  case 0:
355  break;
356  case 1:
358  break;
359  case 2:
361  break;
362  case 3:
364  break;
365  }
366  }
367  else
368  {
369  switch (mVideoConversion)
370  {
371  case 0:
373  break;
374  case 1:
376  break;
377  case 2:
379  break;
380  }
381  }
382  SetupStore("Resolution", mNewHdffSetup.Resolution);
383  SetupStore("VideoModeAdaption", mNewHdffSetup.VideoModeAdaption);
384  SetupStore("TvFormat", mNewHdffSetup.TvFormat);
385  SetupStore("VideoConversion", mNewHdffSetup.VideoConversion);
386  SetupStore("AnalogueVideo", mNewHdffSetup.AnalogueVideo);
387  SetupStore("AudioDelay", mNewHdffSetup.AudioDelay);
388  SetupStore("AudioDownmix", mNewHdffSetup.AudioDownmix);
389  SetupStore("AvSyncShift", mNewHdffSetup.AvSyncShift);
390  SetupStore("OsdSize", mNewHdffSetup.OsdSize);
391  SetupStore("CecEnabled", mNewHdffSetup.CecEnabled);
392  SetupStore("CecTvOn", mNewHdffSetup.CecTvOn);
393  SetupStore("CecTvOff", mNewHdffSetup.CecTvOff);
394  SetupStore("RemoteProtocol", mNewHdffSetup.RemoteProtocol);
395  SetupStore("RemoteAddress", mNewHdffSetup.RemoteAddress);
396  SetupStore("HighLevelOsd", mNewHdffSetup.HighLevelOsd);
397  SetupStore("TrueColorOsd", mNewHdffSetup.TrueColorOsd);
398  SetupStore("HideMainMenu", mNewHdffSetup.HideMainMenu);
399 
400  if (mHdffCmdIf)
401  {
402  if (mNewHdffSetup.Resolution != gHdffSetup.Resolution)
403  {
405  }
406  HdffVideoFormat_t videoFormat;
407  HdffHdmiConfig_t hdmiConfig;
408 
409  videoFormat.AutomaticEnabled = true;
410  videoFormat.AfdEnabled = false;
413  mHdffCmdIf->CmdAvSetVideoFormat(0, &videoFormat);
414 
418 
420 
421  memset(&hdmiConfig, 0, sizeof(hdmiConfig));
422  hdmiConfig.TransmitAudio = true;
423  hdmiConfig.ForceDviMode = false;
424  hdmiConfig.CecEnabled = mNewHdffSetup.CecEnabled;
426  mHdffCmdIf->CmdHdmiConfigure(&hdmiConfig);
427 
430  }
431 
432  gHdffSetup = mNewHdffSetup;
433 }
434 
436 {
438 
439  if (state == osContinue)
440  {
441  cOsdItem * item;
442  switch (key)
443  {
444  case kLeft:
445  case kRight:
446  item = Get(Current());
447  if (item == mTvFormatItem)
448  {
449  mVideoConversion = 0;
451  Display();
452  }
453  break;
454  default:
455  break;
456  }
457  }
458  return state;
459 }
int AudioDownmix
Definition: setup.h:28
int mVideoConversion
Definition: setup.h:51
const char * GetVideoConversionString(void)
Definition: setup.c:161
HdffVideoOut_t
Definition: hdffcmd_mux.h:28
virtual eOSState ProcessKey(eKeys Key)
Definition: setup.c:435
Definition: keys.h:23
void Add(cOsdItem *Item, bool Current=false, cOsdItem *After=NULL)
Definition: osdbase.c:203
void CmdRemoteSetAddressFilter(bool Enable, uint32_t Address)
Definition: hdffcmd.c:395
HdffVideoMode_t
Definition: hdffcmd_hdmi.h:28
int OsdSize
Definition: setup.h:30
cHdffSetup gHdffSetup
Definition: setup.c:16
HdffVideoModeAdaption_t VideoModeAdaption
Definition: hdffcmd_hdmi.h:49
const int kResolution720p
Definition: setup.c:11
cOsdItem * Get(int Index) const
Definition: tools.h:481
int VideoModeAdaption
Definition: setup.h:23
void SetupStore(const char *Name, const char *Value=NULL)
Definition: menuitems.c:1160
virtual eOSState ProcessKey(eKeys Key)
Definition: menuitems.c:1138
int Current(void) const
Definition: osdbase.h:137
int HighLevelOsd
Definition: setup.h:37
void CmdAvSetVideoFormat(uint8_t DecoderIndex, const HdffVideoFormat_t *pVideoFormat)
Definition: hdffcmd.c:116
void CmdHdmiSetVideoMode(HdffVideoMode_t VideoMode)
Definition: hdffcmd.c:373
int RemoteAddress
Definition: setup.h:35
void CmdAvSetAudioDelay(int16_t Delay)
Definition: hdffcmd.c:156
int TrueColorOsd
Definition: setup.h:38
eOSState
Definition: osdbase.h:18
const int kResolution576i
Definition: setup.c:13
HdffVideoMode_t GetVideoMode(void)
Definition: setup.c:105
int HideMainMenu
Definition: setup.h:40
void CmdHdmiConfigure(const HdffHdmiConfig_t *pConfig)
Definition: hdffcmd.c:379
cListObject * Next(void) const
Definition: tools.h:458
void CmdAvSetSyncShift(int16_t SyncShift)
Definition: hdffcmd.c:171
int AnalogueVideo
Definition: setup.h:26
virtual void Display(void)
Definition: osdbase.c:217
const int kResolution576p
Definition: setup.c:12
int AvSyncShift
Definition: setup.h:29
cOsdItem * mTvFormatItem
Definition: setup.h:50
virtual void Store(void)
Definition: setup.c:347
int CecTvOff
Definition: setup.h:33
int TvFormat
Definition: setup.h:24
void GetOsdSize(int &Width, int &Height, double &PixelAspect)
Definition: setup.c:62
void CmdRemoteSetProtocol(HdffRemoteProtocol_t Protocol)
Definition: hdffcmd.c:389
HdffTvFormat_t TvFormat
Definition: hdffcmd_av.h:77
void CmdMuxSetVideoOut(HdffVideoOut_t VideoOut)
Definition: hdffcmd.c:358
void Del(cListObject *Object, bool DeleteObject=true)
Definition: tools.c:1977
HdffTvFormat_t
Definition: hdffcmd_av.h:56
int AudioDelay
Definition: setup.h:27
HdffAudioDownmixMode_t
Definition: hdffcmd_av.h:87
#define tr(s)
Definition: i18n.h:85
int CecTvOn
Definition: setup.h:32
HdffVideoConversion_t VideoConversion
Definition: hdffcmd_av.h:78
void BuildVideoConversionItem(void)
Definition: setup.c:311
cHdffSetup mNewHdffSetup
Definition: setup.h:49
int RemoteProtocol
Definition: setup.h:34
int CecEnabled
Definition: setup.h:31
void CmdAvSetAudioDownmix(HdffAudioDownmixMode_t DownmixMode)
Definition: hdffcmd.c:161
int Resolution
Definition: setup.h:22
HDFF::cHdffCmdIf * mHdffCmdIf
Definition: setup.h:48
bool SetupParse(const char *Name, const char *Value)
Definition: setup.c:39
const int kResolution1080i
Definition: setup.c:10
virtual ~cHdffSetupPage(void)
Definition: setup.c:307
HdffVideoConversion_t
Definition: hdffcmd_av.h:62
HdffVideoModeAdaption_t
Definition: hdffcmd_hdmi.h:36
cHdffSetup(void)
Definition: setup.c:18
cHdffSetupPage(HDFF::cHdffCmdIf *pHdffCmdIf)
Definition: setup.c:184
void SetNextVideoConversion(void)
Definition: setup.c:121
int VideoConversion
Definition: setup.h:25
eKeys
Definition: keys.h:16
HdffRemoteProtocol_t
Definition: keys.h:22