Merge branch 'master' of fraxinas@git.opendreambox.org:/git/enigma2
authorFraxinas <andreas.frisch@multimedia-labs.de>
Wed, 27 May 2009 09:36:01 +0000 (11:36 +0200)
committerFraxinas <andreas.frisch@multimedia-labs.de>
Wed, 27 May 2009 09:36:01 +0000 (11:36 +0200)
data/keymap.xml
data/setup.xml
lib/dvb/decoder.cpp
lib/dvb/decoder.h
lib/dvb/pmt.cpp
lib/dvb/pmt.h
lib/python/Components/EpgList.py
lib/python/Components/Renderer/FrontpanelLed.py
lib/python/Components/SystemInfo.py
lib/python/Screens/SessionGlobals.py
main/enigma.cpp

index 8f70869..036ea46 100644 (file)
 
        <map context="InfobarTimeshiftActions">
                <device name="dreambox remote control (native)">
-                       <key id="KEY_YELLOW" mapto="timeshiftStart" flags="m" />
+                       <key id="KEY_YELLOW" mapto="timeshiftStart" flags="b" />
                        <key id="KEY_TV" mapto="timeshiftStop" flags="m" />
                </device>
                <device name="dreambox advanced remote control (native)">
        <map context="InfobarTimeshiftActivateActions">
                <device name="dreambox remote control (native)">
                        <key id="KEY_RED" mapto="timeshiftActivateEnd" flags="b" />
-                       <key id="KEY_YELLOW" mapto="timeshiftActivateEndAndPause" flags="m" />
+                       <key id="KEY_YELLOW" mapto="timeshiftActivateEndAndPause" flags="b" />
                </device>
                <device name="dreambox advanced remote control (native)">
                        <key id="KEY_PREVIOUSSONG" mapto="timeshiftActivateEnd" flags="m" />
                </device>
                <device name="dreambox advanced remote control (native)">
                        <key id="KEY_0" mapto="toggleMark" flags="m" />
-                       <key id="KEY_YELLOW" mapto="toggleMark" flags="m" />
+                       <key id="KEY_YELLOW" mapto="toggleMark" flags="b" />
                </device>
                <device name="dreambox ir keyboard">
                        <key id="KEY_TAB" mapto="toggleMark" flags="m" />
index 583850d..d8d5836 100644 (file)
@@ -98,7 +98,7 @@
                        <item text="Brightness">config.osd.bright</item>
                        <item text="Contrast">config.osd.contrast</item>
                </setup>
-               <setup key="lcd" title="Display Setup">
+               <setup key="lcd" title="Display Setup" requires="FrontpanelDisplay">
                        <item level="0" text="Brightness">config.lcd.bright</item>
                        <item level="0" text="Contrast">config.lcd.contrast</item>
                        <item level="0" text="Standby">config.lcd.standby</item>
index 82ade40..6845602 100644 (file)
@@ -198,6 +198,9 @@ int eDVBAudio::startPid(int pid, int type)
        case aAACHE:
                bypass = 9;
                break;
+       case aLPCM:
+               bypass = 6;
+               break;
        }
 
        eDebugNoNewLine("AUDIO_SET_BYPASS(%d) - ", bypass);
@@ -860,7 +863,7 @@ int eTSMPEGDecoder::setState()
        const char *decoder_states[] = {"stop", "pause", "play", "decoderfastforward", "trickmode", "slowmotion"};
        eDebug("decoder state: %s, vpid=%d, apid=%d", decoder_states[m_state], m_vpid, m_apid);
 
-       bool changed = !!m_changed;
+       bool changed = m_changed;
 #if HAVE_DVB_API_VERSION < 3
        bool checkAVSync = m_changed & (changeAudio|changeVideo|changePCR);
        if (m_changed & changeAudio && m_audio)
@@ -1002,7 +1005,7 @@ int eTSMPEGDecoder::setState()
        }
 #endif
 
-       if (m_changed & (changeState|changeVideo|changeAudio))
+       if (changed & (changeState|changeVideo|changeAudio))
        {
                                        /* play, slowmotion, fast-forward */
                int state_table[6][4] = 
@@ -1015,7 +1018,7 @@ int eTSMPEGDecoder::setState()
                                /* [stateSlowMotion] =           */ {1, m_ff_sm_ratio, 0}
                        };
                int *s = state_table[m_state];
-               if (m_changed & (changeState|changeVideo) && m_video)
+               if (changed & (changeState|changeVideo) && m_video)
                {
                        m_video->setSlowMotion(s[1]);
                        m_video->setFastForward(s[2]);
@@ -1024,7 +1027,7 @@ int eTSMPEGDecoder::setState()
                        else
                                m_video->freeze();
                }
-               if (m_changed & (changeState|changeAudio) && m_audio)
+               if (changed & (changeState|changeAudio) && m_audio)
                {
                        if (s[0])
                                m_audio->unfreeze();
index 3bfc70c..b53638b 100644 (file)
@@ -13,7 +13,7 @@ private:
        ePtr<eDVBDemux> m_demux;
        int m_fd, m_fd_demux, m_dev, m_is_freezed;
 public:
-       enum { aMPEG, aAC3, aDTS, aAAC, aAACHE };
+       enum { aMPEG, aAC3, aDTS, aAAC, aAACHE, aLPCM };
        eDVBAudio(eDVBDemux *demux, int dev);
        enum { aMonoLeft, aStereo, aMonoRight };
        void setChannel(int channel);
index da45c8e..13ed6b9 100644 (file)
@@ -258,8 +258,26 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program)
                                                        isaudio = 1;
                                                        audio.type = audioStream::atAACHE;
                                                }
+                                       case 0x80: // user private ... but blueray LPCM
+                                               if (!isvideo && !isaudio)
+                                               {
+                                                       isaudio = 1;
+                                                       audio.type = audioStream::atLPCM;
+                                               }
+                                       case 0x81: // user private ... but blueray AC3
+                                               if (!isvideo && !isaudio)
+                                               {
+                                                       isaudio = 1;
+                                                       audio.type = audioStream::atAC3;
+                                               }
+                                       case 0x82: // Blueray DTS (dvb user private...)
+                                       case 0xA2: // Blueray secondary DTS
+                                               if (!isvideo && !isaudio)
+                                               {
+                                                       isaudio = 1;
+                                                       audio.type = audioStream::atDTS;
+                                               }
                                        case 0x06: // PES Private
-                                       case 0x81: // user private
                                        case 0xEA: // TS_PSI_ST_SMPTE_VC1
                                                for (DescriptorConstIterator desc = (*es)->getDescriptors()->begin();
                                                                desc != (*es)->getDescriptors()->end(); ++desc)
@@ -363,11 +381,19 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program)
                                                                        int format_identifier = (descr[2] << 24) | (descr[3] << 16) | (descr[4] << 8) | (descr[5]);
                                                                        switch (format_identifier)
                                                                        {
-                                                                       case 0x41432d33:
+                                                                       case 0x44545331 ... 0x44545333: // DTS1/DTS2/DTS3
+                                                                               isaudio = 1;
+                                                                               audio.type = audioStream::atDTS;
+                                                                               break;
+                                                                       case 0x41432d33: // == 'AC-3'
                                                                                isaudio = 1;
                                                                                audio.type = audioStream::atAC3;
                                                                                break;
-                                                                       case 0x56432d31:
+                                                                       case 0x42535344: // == 'BSSD' (LPCM)
+                                                                               isaudio = 1;
+                                                                               audio.type = audioStream::atLPCM;
+                                                                               break;
+                                                                       case 0x56432d31: // == 'VC-1'
                                                                                if (descr[6] == 0x01) // subdescriptor tag
                                                                                {
                                                                                        if (descr[7] >= 0x90) // profile_level
index cabc6ac..e27135e 100644 (file)
@@ -142,7 +142,7 @@ public:
        struct audioStream
        {
                int pid;
-               enum { atMPEG, atAC3, atDTS, atAAC, atAACHE };
+               enum { atMPEG, atAC3, atDTS, atAAC, atAACHE, atLPCM };
                int type; // mpeg2, ac3, dts, ...
                
                int component_tag;
index fa60400..59f9262 100644 (file)
@@ -163,9 +163,17 @@ class EPGList(HTMLComponent, GUIComponent):
                        return self.clock_post_pixmap
                else:
                        return self.clock_prepost_pixmap
+               
+       def getPixmapForEntry(self, service, eventId, beginTime, duration):
+               rec=beginTime and (self.timer.isInTimer(eventId, beginTime, duration, service))
+               if rec:
+                       clock_pic = self.getClockPixmap(service, beginTime, duration, eventId)
+               else:
+                       clock_pic = None
+               return (clock_pic, rec)
 
        def buildSingleEntry(self, service, eventId, beginTime, duration, EventName):
-               rec=beginTime and (self.timer.isInTimer(eventId, beginTime, duration, service))
+               (clock_pic, rec) = self.getPixmapForEntry(service, eventId, beginTime, duration)
                r1=self.weekday_rect
                r2=self.datetime_rect
                r3=self.descr_rect
@@ -176,7 +184,6 @@ class EPGList(HTMLComponent, GUIComponent):
                        (eListboxPythonMultiContent.TYPE_TEXT, r2.left(), r2.top(), r2.width(), r1.height(), 0, RT_HALIGN_RIGHT, "%02d.%02d, %02d:%02d"%(t[2],t[1],t[3],t[4]))
                ]
                if rec:
-                       clock_pic = self.getClockPixmap(service, beginTime, duration, eventId)
                        res.extend((
                                (eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, r3.left(), r3.top(), 21, 21, clock_pic),
                                (eListboxPythonMultiContent.TYPE_TEXT, r3.left() + 25, r3.top(), r3.width(), r3.height(), 0, RT_HALIGN_LEFT, EventName)
@@ -186,7 +193,7 @@ class EPGList(HTMLComponent, GUIComponent):
                return res
 
        def buildSimilarEntry(self, service, eventId, beginTime, service_name, duration):
-               rec=beginTime and (self.timer.isInTimer(eventId, beginTime, duration, service))
+               (clock_pic, rec) = self.getPixmapForEntry(service, eventId, beginTime, duration)
                r1=self.weekday_rect
                r2=self.datetime_rect
                r3=self.service_rect
@@ -197,7 +204,6 @@ class EPGList(HTMLComponent, GUIComponent):
                        (eListboxPythonMultiContent.TYPE_TEXT, r2.left(), r2.top(), r2.width(), r1.height(), 0, RT_HALIGN_RIGHT, "%02d.%02d, %02d:%02d"%(t[2],t[1],t[3],t[4]))
                ]
                if rec:
-                       clock_pic = self.getClockPixmap(service, beginTime, duration, eventId)
                        res.extend((
                                (eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, r3.left(), r3.top(), 21, 21, clock_pic),
                                (eListboxPythonMultiContent.TYPE_TEXT, r3.left() + 25, r3.top(), r3.width(), r3.height(), 0, RT_HALIGN_LEFT, service_name)
@@ -206,25 +212,24 @@ class EPGList(HTMLComponent, GUIComponent):
                        res.append((eListboxPythonMultiContent.TYPE_TEXT, r3.left(), r3.top(), r3.width(), r3.height(), 0, RT_HALIGN_LEFT, service_name))
                return res
 
-       def buildMultiEntry(self, changecount, service, eventId, begTime, duration, EventName, nowTime, service_name):
-               rec=begTime and (self.timer.isInTimer(eventId, begTime, duration, service))
+       def buildMultiEntry(self, changecount, service, eventId, beginTime, duration, EventName, nowTime, service_name):
+               (clock_pic, rec) = self.getPixmapForEntry(service, eventId, beginTime, duration)
                r1=self.service_rect
                r2=self.progress_rect
                r3=self.descr_rect
                r4=self.start_end_rect
                res = [ None ] # no private data needed
                if rec:
-                       clock_pic = self.getClockPixmap(service, begTime, duration, eventId)
                        res.extend((
                                (eListboxPythonMultiContent.TYPE_TEXT, r1.left(), r1.top(), r1.width()-21, r1.height(), 0, RT_HALIGN_LEFT, service_name),
                                (eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, r1.left()+r1.width()-16, r1.top(), 21, 21, clock_pic)
                        ))
                else:
                        res.append((eListboxPythonMultiContent.TYPE_TEXT, r1.left(), r1.top(), r1.width(), r1.height(), 0, RT_HALIGN_LEFT, service_name))
-               if begTime is not None:
-                       if nowTime < begTime:
-                               begin = localtime(begTime)
-                               end = localtime(begTime+duration)
+               if beginTime is not None:
+                       if nowTime < beginTime:
+                               begin = localtime(beginTime)
+                               end = localtime(beginTime+duration)
 #                              print "begin", begin
 #                              print "end", end
                                res.extend((
@@ -232,7 +237,7 @@ class EPGList(HTMLComponent, GUIComponent):
                                        (eListboxPythonMultiContent.TYPE_TEXT, r3.left(), r3.top(), r3.width(), r3.height(), 0, RT_HALIGN_LEFT, EventName)
                                ))
                        else:
-                               percent = (nowTime - begTime) * 100 / duration
+                               percent = (nowTime - beginTime) * 100 / duration
                                res.extend((
                                        (eListboxPythonMultiContent.TYPE_PROGRESS, r2.left(), r2.top(), r2.width(), r2.height(), percent),
                                        (eListboxPythonMultiContent.TYPE_TEXT, r3.left(), r3.top(), r3.width(), r3.height(), 0, RT_HALIGN_LEFT, EventName)
index 3021a85..f896ecd 100644 (file)
@@ -22,7 +22,8 @@ class FrontpanelLed(Element):
                        pass
                if self.which == 0:
                        try:
-                               open("/proc/stb/fp/led_pattern", "w").write("%08x" % pattern_4bit)
+                               open("/proc/stb/fp/led_set_pattern", "w").write("%08x" % pattern_4bit)
+                               open("/proc/stb/fp/led_set_speed", "w").write("%d" % speed)
                        except IOError:
                                pass
                        try:
index d074c41..d2b405a 100644 (file)
@@ -1,10 +1,10 @@
 from enigma import eDVBResourceManager
+from Tools.Directories import fileExists
 
 SystemInfo = { }
 
 #FIXMEE...
 def getNumVideoDecoders():
-       from Tools.Directories import fileExists
        idx = 0
        while fileExists("/dev/dvb/adapter0/video%d"%(idx), 'f'):
                idx += 1
@@ -12,3 +12,18 @@ def getNumVideoDecoders():
 
 SystemInfo["NumVideoDecoders"] = getNumVideoDecoders()
 SystemInfo["CanMeasureFrontendInputPower"] = eDVBResourceManager.getInstance().canMeasureFrontendInputPower()
+
+
+def countFrontpanelLEDs():
+       leds = 0
+       if fileExists("/proc/stb/fp/led_set_pattern"):
+               leds += 1
+
+       while fileExists("/proc/stb/fp/led%d_pattern" % leds):
+               leds += 1
+
+       return leds
+
+SystemInfo["NumFrontpanelLEDs"] = countFrontpanelLEDs()
+SystemInfo["FrontpanelDisplay"] = fileExists("/dev/dbox/oled0") or fileExists("/dev/dbox/lcd0")
+SystemInfo["FrontpanelDisplayGrayscale"] = fileExists("/dev/dbox/oled0")
index f2d5615..18d71d3 100644 (file)
@@ -22,6 +22,9 @@ class SessionGlobals(Screen):
                self["TunerInfo"] = TunerInfo()
                self["RecordState"] = RecordState(session)
                self["Standby"] = Boolean(fixed = False)
+               
+               from Components.SystemInfo import SystemInfo
+               
                combine = Combine(func = lambda s: {(False, False): 0, (False, True): 1, (True, False): 2, (True, True): 3}[(s[0].boolean, s[1].boolean)])
                combine.connect(self["Standby"])
                combine.connect(self["RecordState"])
@@ -33,9 +36,14 @@ class SessionGlobals(Screen):
                #    false      true      on   off    off
                #    true       true     blnk  off    blnk
                
-               PATTERN_ON     = (20, 0xffffffff, 0)
-               PATTERN_OFF    = (20, 0, 0xffffffff)
+               PATTERN_ON     = (20, 0xffffffff, 0xffffffff)
+               PATTERN_OFF    = (20, 0, 0)
                PATTERN_BLINK  = (20, 0x55555555, 0x84fc8c04)
 
-               FrontpanelLed(which = 0, boolean = False, patterns = [PATTERN_OFF, PATTERN_BLINK, PATTERN_ON, PATTERN_BLINK]).connect(combine)
-               FrontpanelLed(which = 1, boolean = False, patterns = [PATTERN_ON, PATTERN_ON, PATTERN_OFF, PATTERN_OFF]).connect(combine)
+               nr_leds = SystemInfo.get("NumFrontpanelLEDs", 0)
+
+               if nr_leds == 1:
+                       FrontpanelLed(which = 0, boolean = False, patterns = [PATTERN_OFF, PATTERN_BLINK, PATTERN_OFF, PATTERN_BLINK]).connect(combine)
+               elif nr_leds == 2:
+                       FrontpanelLed(which = 0, boolean = False, patterns = [PATTERN_OFF, PATTERN_BLINK, PATTERN_ON, PATTERN_BLINK]).connect(combine)
+                       FrontpanelLed(which = 1, boolean = False, patterns = [PATTERN_ON, PATTERN_ON, PATTERN_OFF, PATTERN_OFF]).connect(combine)
index 98175c4..7f3ba44 100644 (file)
@@ -213,7 +213,7 @@ int main(int argc, char **argv)
                ePtr<gPixmap> wait[MAX_SPINNER];
                for (i=0; i<MAX_SPINNER; ++i)
                {
-                       char filename[strlen(DATADIR) + 20];
+                       char filename[strlen(DATADIR) + 41];
                        sprintf(filename, DATADIR "/enigma2/skin_default/spinner/wait%d.png", i + 1);
                        loadPNG(wait[i], filename);