void VideoOMX::selectVideoMode(int interlaced)
{
+ TV_GET_STATE_RESP_T tvstate;
+ vc_tv_get_state(&tvstate);
- TV_SUPPORTED_MODE_T all_supp_modes[TV_MAX_SUPPORTED_MODES];
- HDMI_RES_GROUP_T pref_group;
- TV_SUPPORTED_MODE_T *mymode=NULL;
- TV_SUPPORTED_MODE_T *mymode_second_best=NULL;
- bool got_optimum=false;
- uint32_t pref_mode;
- HDMI_RES_GROUP_T group=HDMI_RES_GROUP_CEA;
- int all_my_modes=vc_tv_hdmi_get_supported_modes(HDMI_RES_GROUP_CEA,
- all_supp_modes,TV_MAX_SUPPORTED_MODES,
- &pref_group,&pref_mode);
- if (all_my_modes<=0) {
- group=HDMI_RES_GROUP_DMT;
- all_my_modes=vc_tv_hdmi_get_supported_modes(HDMI_RES_GROUP_DMT,
+ if ((tvstate.state & VC_HDMI_UNPLUGGED)) {
+ hdmi = false;
+ Log::getInstance()->log("Video", Log::NOTICE, "HDMI unplugged");
+ } else {
+ hdmi = true;
+ Log::getInstance()->log("Video", Log::NOTICE, "HDMI plugged");
+ if (connection==COMPOSITERGB) {
+ hdmi=false;
+ Log::getInstance()->log("Video", Log::NOTICE, "SDTV set");
+ } else {
+ hdmi=true;
+ Log::getInstance()->log("Video", Log::NOTICE, "HDMI set");
+ }
+ }
+
+
+ if (hdmi) {
+ TV_SUPPORTED_MODE_T all_supp_modes[TV_MAX_SUPPORTED_MODES];
+ HDMI_RES_GROUP_T pref_group;
+ TV_SUPPORTED_MODE_T *mymode=NULL;
+ TV_SUPPORTED_MODE_T *mymode_second_best=NULL;
+ bool got_optimum=false;
+ uint32_t pref_mode;
+ HDMI_RES_GROUP_T group=HDMI_RES_GROUP_CEA;
+ int all_my_modes=vc_tv_hdmi_get_supported_modes(HDMI_RES_GROUP_CEA,
+ all_supp_modes,TV_MAX_SUPPORTED_MODES,
+ &pref_group,&pref_mode);
+ if (all_my_modes<=0) {
+ group=HDMI_RES_GROUP_DMT;
+ all_my_modes=vc_tv_hdmi_get_supported_modes(HDMI_RES_GROUP_DMT,
all_supp_modes,TV_MAX_SUPPORTED_MODES,
&pref_group,&pref_mode);
- Log::getInstance()->log("Video", Log::NOTICE, "No CEA fall back to DMT modes ");
- }
+ Log::getInstance()->log("Video", Log::NOTICE, "No CEA fall back to DMT modes ");
+ }
- if (all_my_modes<=0 || connection==COMPOSITERGB ) {
- /* analog tv case */
- Log::getInstance()->log("Video", Log::NOTICE, "No CEA and DMT modes found analog tv case?");
- Remote::getInstance()->shutdown();
- vc_tv_power_off();
- SDTV_MODE_T setmode=SDTV_MODE_PAL;
- SDTV_OPTIONS_T options;
- switch (tvsize) {
- default:
- case ASPECT16X9:
- Log::getInstance()->log("Video", Log::NOTICE, "SDTV aspect 16:9");
- options.aspect=SDTV_ASPECT_16_9; break;
- case ASPECT4X3:
- Log::getInstance()->log("Video", Log::NOTICE, "SDTV aspect 4:3");
- options.aspect=SDTV_ASPECT_4_3; break;
- case ASPECT14X9:
- Log::getInstance()->log("Video", Log::NOTICE, "SDTV aspect 14:9");
- options.aspect=SDTV_ASPECT_14_9; break;
- };
- if (format==PAL) setmode=SDTV_MODE_PAL;
- else if (format==NTSC) setmode=SDTV_MODE_NTSC;
- else if (format==PAL_M)setmode=SDTV_MODE_PAL_M;
- else if (format==NTSC_J) setmode=SDTV_MODE_NTSC_J;
- vc_tv_sdtv_power_on(setmode,&options);
- hdmi=false;
- } else {
int target_fps=50;
if (format==PAL)target_fps=50;
else if (format==NTSC) target_fps=60;
}
hdmi=true;
outputinterlaced=interlaced;
+ } else {
+ /* analog tv case */
+ Log::getInstance()->log("Video", Log::NOTICE, "No CEA and DMT modes found analog tv case?");
+ Remote::getInstance()->shutdown();
+ vc_tv_power_off();
+ SDTV_MODE_T setmode=SDTV_MODE_PAL;
+ SDTV_OPTIONS_T options;
+
+ switch (tvsize) {
+ default:
+ case ASPECT16X9:
+ Log::getInstance()->log("Video", Log::NOTICE, "SDTV aspect 16:9");
+ options.aspect=SDTV_ASPECT_16_9; break;
+ case ASPECT4X3:
+ Log::getInstance()->log("Video", Log::NOTICE, "SDTV aspect 4:3");
+ options.aspect=SDTV_ASPECT_4_3; break;
+ case ASPECT14X9:
+ Log::getInstance()->log("Video", Log::NOTICE, "SDTV aspect 14:9");
+ options.aspect=SDTV_ASPECT_14_9; break;
+ };
+
+ if (format==PAL) setmode=SDTV_MODE_PAL;
+ else if (format==NTSC) setmode=SDTV_MODE_NTSC;
+ else if (format==PAL_M)setmode=SDTV_MODE_PAL_M;
+ else if (format==NTSC_J) setmode=SDTV_MODE_NTSC_J;
+ vc_tv_sdtv_power_on(setmode,&options);
+ hdmi=false;
}
Remote::getInstance()->init("");