lastAType=MPTYPE_MPEG_AUDIO;
Log::getInstance()->log("Audio", Log::DEBUG, "enter play");
+ ((VideoOMX*)Video::getInstance())->interlaceSwitch4Demux(); // switch resolution if necessary
+
if (!AllocateCodecsOMX()) {
return 0;
}
mode=0;\r
aspect_correction=1.;\r
\r
+ freetype_inited=false;\r
wait_id=1;\r
\r
}\r
shutdown();\r
}\r
\r
+ if (freetype_inited) FT_Done_Face(ft_face);\r
\r
vgmutex.Unlock();\r
taskmutex.Unlock();\r
vgmutex.Lock();\r
//(((VideoOMX*)Video::getInstance())->shutdownUsingOSDObjects());\r
\r
- FT_Done_Face(ft_face);\r
+\r
+\r
vgDestroyFont(vgfont);\r
vgDestroyFont(vgttfont);\r
vgDestroyPaint(vgttpaint);\r
\r
int OsdOpenVG::loadFont()\r
{\r
- int error=FT_Init_FreeType(&ft_library);\r
+ int error;\r
float font_size=16.f;\r
- if (error)\r
- {\r
- Log::getInstance()->log("OSD", Log::WARN, "Could not load freetype %x",error);\r
- return 0;\r
- }\r
+ if (!freetype_inited) {\r
+ error=FT_Init_FreeType(&ft_library);\r
+ if (error)\r
+ {\r
+ Log::getInstance()->log("OSD", Log::WARN, "Could not load freetype %x",error);\r
+ return 0;\r
+ }\r
\r
- error=FT_New_Memory_Face(ft_library,font_data,font_data_end-font_data,0,&ft_face );\r
- if (error) {\r
- Log::getInstance()->log("OSD", Log::WARN, "Could not load font face %x",error);\r
- return 0;\r
- }\r
- error=FT_Set_Char_Size(ft_face,0,font_size*64,0,0 /*dpi*/);\r
- if (error) {\r
- FT_Done_Face(ft_face);\r
- Log::getInstance()->log("OSD", Log::WARN, "Could not set face size %x",error);\r
- return 0;\r
+ error=FT_New_Memory_Face(ft_library,font_data,font_data_end-font_data,0,&ft_face );\r
+ if (error) {\r
+ Log::getInstance()->log("OSD", Log::WARN, "Could not load font face %x",error);\r
+ return 0;\r
+ }\r
+ error=FT_Set_Char_Size(ft_face,0,font_size*64,0,0 /*dpi*/);\r
+ if (error) {\r
+ FT_Done_Face(ft_face);\r
+ Log::getInstance()->log("OSD", Log::WARN, "Could not set face size %x",error);\r
+ return 0;\r
+ }\r
+ freetype_inited=true;\r
}\r
vgfont=vgCreateFont(0);\r
FT_ULong cur_char;\r
EGLConfig egl_ourconfig;\r
float font_height;\r
float aspect_correction;\r
+ bool freetype_inited;\r
\r
\r
};\r
void RemoteLinux::deinitCec()
{
if (cec_adap) {
+ Log::getInstance()->log("Remote", Log::NOTICE, "Shutdown libcec begin");
cec_adap->SetInactiveView();
cec_adap->Close();
+ vc_cec_register_callback(NULL, NULL);//deactivate callback!
UnloadLibCec(cec_adap);
cec_adap = NULL;
+ Log::getInstance()->log("Remote", Log::NOTICE, "Shutdown libcec end");
}
}
deinterlace=2; //advanced
signalon=false;
+ outputinterlaced=0;
}
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?");
- vc_tv_power_off();
Remote::getInstance()->shutdown();
+ vc_tv_power_off();
SDTV_MODE_T setmode=SDTV_MODE_PAL;
SDTV_OPTIONS_T options;
}
}
- vc_tv_power_off();
Remote::getInstance()->shutdown();
+ vc_tv_power_off();
if (mymode) {
Log::getInstance()->log("Video", Log::NOTICE, "Switch to optimum mode");
vc_tv_hdmi_power_on_explicit(HDMI_MODE_HDMI,group,mymode->code);
(EDID_MODE_MATCH_FLAG_T)(HDMI_MODE_MATCH_FRAMERATE|HDMI_MODE_MATCH_RESOLUTION|HDMI_MODE_MATCH_SCANMODE));
}
hdmi=true;
+ outputinterlaced=interlaced;
}
Remote::getInstance()->init("");
return 1;
}
+void VideoOMX::interlaceSwitch4Demux() {
+ return;
+ Demuxer *demux=Demuxer::getInstance();
+ if ( (outputinterlaced && !demux->getInterlaced())
+ || (!outputinterlaced && demux->getInterlaced())) {
+ if (hdmi && (demux->getHorizontalSize()>720 || demux->getInterlaced() )) { // only switch if hdmi and HD or interlaced SD material
+ Log::getInstance()->log("Video", Log::NOTICE, "switch interlacing %d",demux->getInterlaced());
+ Osd::getInstance()->shutdown();
+ selectVideoMode(demux->getInterlaced());
+ Osd::getInstance()->restore();
+ Osd::getInstance()->init((void*)"");
+ BoxStack::getInstance()->redrawAllBoxes();
+ initted=1;
+
+ }
+
+ }
+}
+
int VideoOMX::play() {
if (!initted)
iframemode = false;
Log::getInstance()->log("Video", Log::DEBUG, "enter play");
+ interlaceSwitch4Demux();
+
if (AllocateCodecsOMX()) {
return 1;
// Otherwise fall back to libav
void clockPause();\r
void clockUnpause();\r
\r
+ void interlaceSwitch4Demux();\r
+\r
Mutex clock_mutex; //clock mutex is now responsible for all omx stuff\r
long long cur_clock_time;\r
\r
bool signalon;\r
bool pendingmodechange;\r
bool hdmi;\r
+ int outputinterlaced;\r
\r
\r
\r