aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/keymap.xml6
-rw-r--r--data/setup.xml2
-rw-r--r--lib/dvb/decoder.cpp11
-rw-r--r--lib/dvb/decoder.h2
-rw-r--r--lib/dvb/pmt.cpp32
-rw-r--r--lib/dvb/pmt.h2
-rw-r--r--lib/python/Components/EpgList.py29
-rw-r--r--lib/python/Components/Renderer/FrontpanelLed.py3
-rw-r--r--lib/python/Components/SystemInfo.py17
-rw-r--r--lib/python/Screens/SessionGlobals.py16
-rw-r--r--main/enigma.cpp2
11 files changed, 90 insertions, 32 deletions
diff --git a/data/keymap.xml b/data/keymap.xml
index 8f708698..036ea467 100644
--- a/data/keymap.xml
+++ b/data/keymap.xml
@@ -332,7 +332,7 @@
<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)">
@@ -351,7 +351,7 @@
<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" />
@@ -412,7 +412,7 @@
</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" />
diff --git a/data/setup.xml b/data/setup.xml
index 583850da..d8d58369 100644
--- a/data/setup.xml
+++ b/data/setup.xml
@@ -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>
diff --git a/lib/dvb/decoder.cpp b/lib/dvb/decoder.cpp
index 82ade40d..6845602d 100644
--- a/lib/dvb/decoder.cpp
+++ b/lib/dvb/decoder.cpp
@@ -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();
diff --git a/lib/dvb/decoder.h b/lib/dvb/decoder.h
index 3bfc70cb..b53638b5 100644
--- a/lib/dvb/decoder.h
+++ b/lib/dvb/decoder.h
@@ -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);
diff --git a/lib/dvb/pmt.cpp b/lib/dvb/pmt.cpp
index da45c8eb..13ed6b98 100644
--- a/lib/dvb/pmt.cpp
+++ b/lib/dvb/pmt.cpp
@@ -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
diff --git a/lib/dvb/pmt.h b/lib/dvb/pmt.h
index cabc6ace..e27135e3 100644
--- a/lib/dvb/pmt.h
+++ b/lib/dvb/pmt.h
@@ -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;
diff --git a/lib/python/Components/EpgList.py b/lib/python/Components/EpgList.py
index fa60400f..59f92621 100644
--- a/lib/python/Components/EpgList.py
+++ b/lib/python/Components/EpgList.py
@@ -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)
diff --git a/lib/python/Components/Renderer/FrontpanelLed.py b/lib/python/Components/Renderer/FrontpanelLed.py
index 3021a853..f896ecde 100644
--- a/lib/python/Components/Renderer/FrontpanelLed.py
+++ b/lib/python/Components/Renderer/FrontpanelLed.py
@@ -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:
diff --git a/lib/python/Components/SystemInfo.py b/lib/python/Components/SystemInfo.py
index d074c414..d2b405a2 100644
--- a/lib/python/Components/SystemInfo.py
+++ b/lib/python/Components/SystemInfo.py
@@ -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")
diff --git a/lib/python/Screens/SessionGlobals.py b/lib/python/Screens/SessionGlobals.py
index f2d56154..18d71d39 100644
--- a/lib/python/Screens/SessionGlobals.py
+++ b/lib/python/Screens/SessionGlobals.py
@@ -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)
diff --git a/main/enigma.cpp b/main/enigma.cpp
index 98175c49..7f3ba44b 100644
--- a/main/enigma.cpp
+++ b/main/enigma.cpp
@@ -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);