save / restore video settings
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>
Fri, 23 May 2008 11:12:42 +0000 (11:12 +0000)
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>
Fri, 23 May 2008 11:12:42 +0000 (11:12 +0000)
lib/python/Plugins/Extensions/DVDPlayer/plugin.py
lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp

index 8a4c861..96ed5f6 100644 (file)
@@ -321,7 +321,10 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP
                self.onFirstExecBegin.append(self.showFileBrowser)
                self.service = None
                self.in_menu = False
-               
+               self.old_aspect = open("/proc/stb/video/aspect", "r").read()
+               self.old_policy = open("/proc/stb/video/policy", "r").read()
+               self.old_wss = open("/proc/stb/denc/0/wss", "r").read()
+
        def keyNumberGlobal(self, number):
                print "You pressed number " + str(number)
                self.session.openWithCallback(self.numberEntered, ChapterZap, number)
@@ -531,6 +534,11 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP
                                pass
 
        def __onClose(self):
+               for i in (("/proc/stb/video/aspect", self.old_aspect), ("/proc/stb/video/policy", self.old_policy), ("/proc/stb/denc/0/wss", self.old_wss)):
+                       try:
+                               open(i[0], "w").write(i[1])
+                       except IOError:
+                               print "restore", i[0], "failed"
                self.restore_infobar_seek_config()
                self.session.nav.playService(self.oldService)
 
index d54531e..bbcb1f2 100644 (file)
@@ -3,6 +3,7 @@
 #include <lib/base/eerror.h>
 #include <lib/base/object.h>
 #include <lib/base/ebase.h>
+#include <lib/base/nconfig.h>
 #include <string>
 #include <lib/service/service.h>
 #include <lib/base/init_num.h>
@@ -54,7 +55,7 @@ RESULT eServiceFactoryDVD::play(const eServiceReference &ref, ePtr<iPlayableServ
        return 0;
 }
 
-RESULT eServiceFactoryDVD::record(const eServiceReference &ref, ePtr<iRecordableService> &ptr)
+RESULT eServiceFactoryDVD::record(const eServiceReference &/*ref*/, ePtr<iRecordableService> &ptr)
 {
        ptr=0;
        return -1;
@@ -67,7 +68,7 @@ RESULT eServiceFactoryDVD::list(const eServiceReference &, ePtr<iListableService
 }
 
 
-RESULT eServiceFactoryDVD::info(const eServiceReference &ref, ePtr<iStaticServiceInformation> &ptr)
+RESULT eServiceFactoryDVD::info(const eServiceReference &/*ref*/, ePtr<iStaticServiceInformation> &ptr)
 {
        ptr=0;
        return -1;
@@ -93,12 +94,22 @@ eServiceDVD::eServiceDVD(const char *filename):
        m_sn(eApp, ddvd_get_messagepipe_fd(m_ddvdconfig), eSocketNotifier::Read|eSocketNotifier::Priority|eSocketNotifier::Error|eSocketNotifier::Hungup),
        m_pump(eApp, 1)
 {
+       std::string aspect;
        eDebug("SERVICEDVD construct!");
        // create handle
        ddvd_set_dvd_path(m_ddvdconfig, filename);
        ddvd_set_ac3thru(m_ddvdconfig, 0);
        ddvd_set_language(m_ddvdconfig, "de");
-       ddvd_set_video(m_ddvdconfig, DDVD_16_9, DDVD_PAL);
+
+       if (ePythonConfigQuery::getConfigValue("config.av.aspect", aspect) != 0)
+               aspect = "16_9";
+       if (aspect == "4_3_letterbox")
+               ddvd_set_video(m_ddvdconfig, DDVD_4_3_LETTERBOX, DDVD_PAL);
+       else if (aspect == "4_3_panscan")
+               ddvd_set_video(m_ddvdconfig, DDVD_4_3_PAN_SCAN, DDVD_PAL);
+       else
+               ddvd_set_video(m_ddvdconfig, DDVD_16_9, DDVD_PAL);
+
        ddvd_set_lfb(m_ddvdconfig, (unsigned char *)m_pixmap->surface->data, 720, 576, 4, 720*4);
        CONNECT(m_sn.activated, eServiceDVD::gotMessage);
        CONNECT(m_pump.recv_msg, eServiceDVD::gotThreadMessage);
@@ -117,7 +128,7 @@ void eServiceDVD::gotThreadMessage(const int &msg)
        }
 }
 
-void eServiceDVD::gotMessage(int what)
+void eServiceDVD::gotMessage(int /*what*/)
 {
        switch(ddvd_get_next_message(m_ddvdconfig,1))
        {
@@ -288,7 +299,7 @@ RESULT eServiceDVD::stop()
        return 0;
 }
 
-RESULT eServiceDVD::setTarget(int target)
+RESULT eServiceDVD::setTarget(int /*target*/)
 {
        return -1;
 }
@@ -318,7 +329,7 @@ RESULT eServiceDVD::keys(ePtr<iServiceKeys> &ptr)
 }
 
        // iPausableService
-RESULT eServiceDVD::setSlowMotion(int ratio)
+RESULT eServiceDVD::setSlowMotion(int /*ratio*/)
 {
        return -1;
 }
@@ -508,7 +519,7 @@ PyObject *eServiceDVD::getInfoObject(int w)
        Py_RETURN_NONE;
 }
 
-RESULT eServiceDVD::enableSubtitles(eWidget *parent, SWIG_PYOBJECT(ePyObject) entry)
+RESULT eServiceDVD::enableSubtitles(eWidget *parent, SWIG_PYOBJECT(ePyObject) /*entry*/)
 {
        if (m_subtitle_widget)
                delete m_subtitle_widget;
@@ -520,7 +531,7 @@ RESULT eServiceDVD::enableSubtitles(eWidget *parent, SWIG_PYOBJECT(ePyObject) en
        return 0;
 }
 
-RESULT eServiceDVD::disableSubtitles(eWidget *parent)
+RESULT eServiceDVD::disableSubtitles(eWidget */*parent*/)
 {
        delete m_subtitle_widget;
        m_subtitle_widget = 0;
@@ -601,7 +612,7 @@ RESULT eServiceDVD::seekChapter(int chapter)
        return 0;
 }
 
-RESULT eServiceDVD::setTrickmode(int trick)
+RESULT eServiceDVD::setTrickmode(int /*trick*/)
 {
        return -1;
 }
@@ -681,11 +692,11 @@ PyObject *eServiceDVD::getCutList()
        return list;
 }
 
-void eServiceDVD::setCutList(ePyObject list)
+void eServiceDVD::setCutList(ePyObject /*list*/)
 {
 }
 
-void eServiceDVD::setCutListEnable(int enable)
+void eServiceDVD::setCutListEnable(int /*enable*/)
 {
 }