[oe-commits] org.oe.dreambox enigma: update
tmbinc commit
openembedded-commits at lists.openembedded.org
Mon Oct 22 16:04:50 UTC 2007
enigma: update
Author: tmbinc at openembedded.org
Branch: org.openembedded.dreambox
Revision: 3bd73aaf860c4a0cc9f3b8a4ce02ed773e7ee368
ViewMTN: http://monotone.openembedded.org/revision/info/3bd73aaf860c4a0cc9f3b8a4ce02ed773e7ee368
Files:
1
packages/enigma/enigma/epgfix_backport.diff
packages/enigma/enigma/subtitlefix_backport.diff
packages/enigma/enigma/timeshiftfix_backport.diff
packages/dreambox/dreambox-blindscan-utils.bb
packages/dreambox/dreambox-dvb-modules.bb
packages/enigma/enigma_cvs.bb
Diffs:
#
# mt diff -r10c5f2fafc04ff3138a01a90f709b9fbc76563c6 -r3bd73aaf860c4a0cc9f3b8a4ce02ed773e7ee368
#
#
#
# add_file "packages/enigma/enigma/epgfix_backport.diff"
# content [232f429784d60110a5dc6888605c68ede79be346]
#
# add_file "packages/enigma/enigma/subtitlefix_backport.diff"
# content [edc62b7288d6f9d214dba7f576ee7c839b8a1a1d]
#
# add_file "packages/enigma/enigma/timeshiftfix_backport.diff"
# content [843f35431921da84f3a1221551f51c1c2138bd76]
#
# patch "packages/dreambox/dreambox-blindscan-utils.bb"
# from [59ac702e5f971b065b4b78ffd5f8ced260d29a0d]
# to [da2c86670667baac3fb17f71453a8e3a7eba84cf]
#
# patch "packages/dreambox/dreambox-dvb-modules.bb"
# from [5326f1f99283d6d0e93d4056c2575d471f1d3791]
# to [88f90a954ee8b44b847256fe6164e9c5cbe8d54b]
#
# patch "packages/enigma/enigma_cvs.bb"
# from [4d65656691b26c2647d21839c86ed73c65be9271]
# to [62c082e75293e3054b61f84ca5553889ef5ddb86]
#
============================================================
--- packages/enigma/enigma/epgfix_backport.diff 232f429784d60110a5dc6888605c68ede79be346
+++ packages/enigma/enigma/epgfix_backport.diff 232f429784d60110a5dc6888605c68ede79be346
@@ -0,0 +1,135 @@
+--- enigma_org/include/lib/dvb/epgcache.h 9 Mar 2007 01:04:34 -0000 1.60
++++ enigma/lib/dvb/epgcache.h 22 Oct 2007 15:14:52 -0000
+@@ -315,7 +315,7 @@
+
+ int state;
+ __u8 isRunning, firstStart, haveData;
+- void FixOverlapping(std::pair<eventMap,timeMap> &, time_t, int, const timeMap::iterator &, const uniqueEPGKey &);
++ bool FixOverlapping(std::pair<eventMap,timeMap> &, time_t, int, const timeMap::iterator &, const uniqueEPGKey &);
+ int sectionRead(__u8 *data, int source);
+ static eEPGCache *instance;
+
+--- enigma_org/lib/dvb/epgcache.cpp 24 Feb 2007 16:03:12 -0000 1.100
++++ enigma/lib/dvb/epgcache.cpp 22 Oct 2007 15:14:52 -0000
+@@ -325,7 +325,7 @@
+ int sid = data[ptr++] << 8;
+ sid |= data[ptr++];
+
+-// WORKAROUND for wrong transmitted epg data (01.08.2006)
++// WORKAROUND for wrong transmitted epg data (01.10.2007)
+ if ( onid == 0x85 )
+ {
+ switch( (tsid << 16) | sid )
+@@ -336,6 +336,7 @@
+ case 0x0300f5: sid = 0xdc; break;
+ case 0x0400d2: sid = 0xe2; tsid = 0x11; break;
+ case 0x1100d3: sid = 0xe3; break;
++ case 0x0100d4: sid = 0xe4; tsid = 4; break;
+ }
+ }
+ ////////////////////////////////////////////
+@@ -448,8 +449,9 @@
+ }
+ #endif // ENABLE_PRIVATE_EPG
+
+-void eEPGCache::FixOverlapping(std::pair<eventMap,timeMap> &servicemap, time_t TM, int duration, const timeMap::iterator &tm_it, const uniqueEPGKey &service)
++bool eEPGCache::FixOverlapping(std::pair<eventMap,timeMap> &servicemap, time_t TM, int duration, const timeMap::iterator &tm_it, const uniqueEPGKey &service)
+ {
++ bool ret = false;
+ timeMap::iterator tmp = tm_it;
+ while ((tmp->first+tmp->second->getDuration()-300) > TM)
+ {
+@@ -464,6 +466,20 @@
+ {
+ __u16 event_id = tmp->second->getEventID();
+ servicemap.first.erase(event_id);
++#ifdef EPG_DEBUG
++ {
++ EITEvent evt((eit_event_struct *)tmp->second->get(), service.tsid<<16|service.onid);
++ char tmp[255];
++ struct tm t;
++ localtime_r(&evt.start_time, &t);
++ snprintf(tmp, 255, "%08x(%d), %d seconds, %02d.%02d, %02d:%02d",
++ evt.event_id, evt.event_id,
++ evt.duration,
++ t.tm_mday, t.tm_mon+1,
++ t.tm_hour, t.tm_min);
++ eDebug("(1)erase no more used event %s", tmp);
++ }
++#endif
+ delete tmp->second;
+ if (tmp == servicemap.second.begin())
+ {
+@@ -472,6 +488,7 @@
+ }
+ else
+ servicemap.second.erase(tmp--);
++ ret = true;
+ }
+ else
+ {
+@@ -495,14 +512,30 @@
+ {
+ __u16 event_id = tmp->second->getEventID();
+ servicemap.first.erase(event_id);
++#ifdef EPG_DEBUG
++ {
++ EITEvent evt((eit_event_struct *)tmp->second->get(), service.tsid<<16|service.onid);
++ char tmp[255];
++ struct tm t;
++ localtime_r(&evt.start_time, &t);
++ snprintf(tmp, 255, "%08x(%d), %d seconds, %02d.%02d, %02d:%02d",
++ evt.event_id, evt.event_id,
++ evt.duration,
++ t.tm_mday, t.tm_mon+1,
++ t.tm_hour, t.tm_min);
++ eDebug("(2)erase no more used event %s", tmp);
++ }
++#endif
+ delete tmp->second;
+ servicemap.second.erase(tmp++);
++ ret = true;
+ }
+ else
+ ++tmp;
+ if (tmp == servicemap.second.end())
+ break;
+ }
++ return ret;
+ }
+
+ int eEPGCache::sectionRead(__u8 *data, int source)
+@@ -658,7 +691,11 @@
+ eventData *tmp = ev_it->second;
+ ev_it->second = tm_it_tmp->second =
+ new eventData(eit_event, eit_event_size, source);
+- FixOverlapping(servicemap, TM, duration, tm_it_tmp, service);
++ if (FixOverlapping(servicemap, TM, duration, tm_it_tmp, service))
++ {
++ prevEventIt = servicemap.first.end();
++ prevTimeIt = servicemap.second.end();
++ }
+ delete tmp;
+ goto next;
+ }
+@@ -730,8 +767,6 @@
+ tm_it=prevTimeIt=servicemap.second.insert( prevTimeIt, std::pair<const time_t, eventData*>( TM, evt ) );
+ }
+
+- FixOverlapping(servicemap, TM, duration, tm_it, service);
+-
+ #if EPG_DEBUG
+ if ( consistencyCheck )
+ {
+@@ -751,6 +786,11 @@
+ ev_it->first, event_id );
+ }
+ #endif
++ if (FixOverlapping(servicemap, TM, duration, tm_it, service))
++ {
++ prevEventIt = servicemap.first.end();
++ prevTimeIt = servicemap.second.end();
++ }
+ }
+ next:
+ #if EPG_DEBUG
============================================================
--- packages/enigma/enigma/subtitlefix_backport.diff edc62b7288d6f9d214dba7f576ee7c839b8a1a1d
+++ packages/enigma/enigma/subtitlefix_backport.diff edc62b7288d6f9d214dba7f576ee7c839b8a1a1d
@@ -0,0 +1,171 @@
+diff -Naur enigma_org/lib/dvb/subtitle.cpp enigma/lib/dvb/subtitle.cpp
+--- enigma_org/lib/dvb/subtitle.cpp 2005-08-02 22:35:36.000000000 +0200
++++ enigma/lib/dvb/subtitle.cpp 2007-10-19 11:55:36.000000000 +0200
+@@ -337,6 +337,12 @@
+ delete page->page_regions;
+ page->page_regions = p;
+ }
++ while (page->regions)
++ {
++ struct subtitle_region *p = page->regions->next;
++ delete page->regions;
++ page->regions = p;
++ }
+ }
+
+ // eDebug("new page.. (%d)", page_state);
+@@ -352,7 +358,14 @@
+ // go to last entry
+ while (*r)
+ r = &(*r)->next;
+-
++
++ if (processed_length == segment_length && !page->page_regions)
++ {
++// eDebug("no regions in page.. clear screen!!");
++ if (sub->screen_enabled)
++ subtitle_redraw_all(sub);
++ }
++
+ while (processed_length < segment_length)
+ {
+ struct subtitle_page_region *pr;
+@@ -763,20 +776,16 @@
+ #if 1
+ struct subtitle_page *page = sub->pages;
+ if ( page )
+- {
+- struct subtitle_page_region *region = page->page_regions;
+- if ( region )
+- subtitle_clear_screen(sub);
+- }
++ subtitle_clear_screen(sub);
+ while(page)
+ {
+ subtitle_redraw(sub, page->page_id);
+ page = page->next;
+ }
+ #else
+- subtitle_clear_screen(sub);
+-
+ struct subtitle_page *page = sub->pages;
++ if ( page )
++ subtitle_clear_screen(sub);
+ //eDebug("----------- end of display set");
+ //eDebug("active pages:");
+ while (page)
+@@ -878,7 +887,6 @@
+ return;
+ }
+
+-
+ //eDebug("iterating regions..");
+ /* iterate all regions in this pcs */
+ struct subtitle_page_region *region = page->page_regions;
+@@ -902,20 +910,19 @@
+ {
+ if (main_clut_id != clut_id)
+ {
+-// eDebug("MULTIPLE CLUTS IN USE! prepare for pixelmuell!");
++ eDebug("MULTIPLE CLUTS IN USE! prepare for pixelmuell!");
+ // exit(0);
+ }
+ }
+ main_clut_id = clut_id;
+
+-
+- //eDebug("copy region %d to %d, %d", region->region_id, region->region_horizontal_address, region->region_vertical_address);
+-
+ int x0 = region->region_horizontal_address;
+ int y0 = region->region_vertical_address;
+ int x1 = x0 + reg->region_width;
+ int y1 = y0 + reg->region_height;
+-
++
++ //eDebug("copy region %d to %d, %d, size %d %d", region->region_id, x0, y0, x1, y1);
++
+ if ((x0 < 0) || (y0 < 0) || (x0 > sub->screen_width) || (x0 > sub->screen_height))
+ continue;
+
+diff -Naur enigma_org/lib/dvb/subtitling.cpp enigma/lib/dvb/subtitling.cpp
+--- enigma_org/lib/dvb/subtitling.cpp 2005-08-02 22:35:36.000000000 +0200
++++ enigma/lib/dvb/subtitling.cpp 2007-10-19 11:57:24.000000000 +0200
+@@ -67,26 +67,26 @@
+ unsigned long long current = 0;
+ if (Decoder::getSTC(current))
+ eDebug("bloed, going unsyced");
+- eDebug("DEMUX STC: %08llx\n", current);
++ eDebug("DEMUX STC: %08llx", current);
+
+ unsigned long long pts = 0;
+
+- int enqueue = 0;
+-
+- if (!queue.empty())
+- enqueue = 1;
+- else if (!extractPTS(pts, pkt))
++ int enqueue = !queue.empty();
++
++ if (!extractPTS(pts, pkt))
+ {
+- eDebug("PES STC: %08llx\n", pts);
++ eDebug("PES STC: %08llx", pts);
+ signed long long int diff = pts - current;
+- eDebug(" STC: %lld\n", diff);
+- if (diff > 900000) // 10s
+- {
+- eDebug("rediculous high delay! showing now");
+- } else if (diff > 2000)
++ eDebug(" diff: %lld(%lldms)", diff, diff/90);
++ if (diff > 1800)
+ enqueue = 1;
++ else if (enqueue) // this should not happen !!
++ {
++ eDebug("showing instantly, diff small enough... but queue not empy!!!!");
++ enqueue = 0;
++ }
+ else
+- eDebug("showing instantly, diff small enough!");
++ eDebug("showing instantly, diff small enough...!");
+ }
+
+ if (enqueue)
+@@ -98,11 +98,15 @@
+ memcpy(pes.pkt, pkt, len);
+ pes.len = len;
+ queue.push(pes);
++ eDebug("enqueue");
+ if (wasempty)
+ {
+- eDebug("setting timer to %d ms!\n", (pes.pts - current) / 90);
++ eDebug("setting timer to %lld ms!\n", (pes.pts - current) / 90);
+ timer.start((pes.pts - current) / 90, 1);
+ }
++ else
++ eDebug("");
++
+ return;
+ }
+ subtitle_process_pes(subtitle, pesbuffer, peslen);
+@@ -155,13 +159,15 @@
+ return;
+ }
+
+- eDebug("by the way, actual delay was %lld(%lld msek)\n", current - fpts, (current-fpts)/90 );
++ eDebug("by the way, actual delay was %lld(%lld msek)", current - fpts, (current-fpts)/90 );
+
+- if (queue.empty())
+- return;
+-
+- signed long long int diff = queue.front().pts - current;
+- timer.start(diff / 90, 1);
++ if (!queue.empty()) {
++ signed long long int diff = queue.front().pts - current;
++ timer.start(diff / 90, 1);
++ eDebug("setting timer to %lld ms!\n", diff / 90);
++ }
++ else
++ eDebug("");
+ }
+
+ void eSubtitleWidget::gotData(int what)
============================================================
--- packages/enigma/enigma/timeshiftfix_backport.diff 843f35431921da84f3a1221551f51c1c2138bd76
+++ packages/enigma/enigma/timeshiftfix_backport.diff 843f35431921da84f3a1221551f51c1c2138bd76
@@ -0,0 +1,75 @@
+diff -Naur enigma_org/lib/dvb/decoder.cpp enigma/lib/dvb/decoder.cpp
+--- enigma_org/lib/dvb/decoder.cpp 2006-11-12 22:35:31.000000000 +0100
++++ enigma/lib/dvb/decoder.cpp 2007-10-19 01:10:21.000000000 +0200
+@@ -817,7 +817,7 @@
+ {
+ int wasOpen = fd.mpeg != -1;
+ if ( !wasOpen )
+- fd.mpeg = ::open("/dev/video", O_WRONLY);
++ fd.mpeg = ::open("/dev/video", O_RDONLY);
+ {
+ if (::ioctl(fd.mpeg, VIDEO_FLUSH_CLIP_BUFFER) < 0)
+ eDebug("VIDEO_FLUSH_BUFFER failed (%m)");
+@@ -833,7 +833,7 @@
+ {
+ int wasOpen = fd.mpeg != -1;
+ if ( !wasOpen )
+- fd.mpeg=::open("/dev/video", O_WRONLY);
++ fd.mpeg=::open("/dev/video", O_RDONLY);
+ if ( fd.mpeg > -1 )
+ {
+ if ( ::ioctl(fd.mpeg, VIDEO_CLEAR_SCREEN) < 0 )
+@@ -878,7 +878,7 @@
+ {
+ int wasOpen = fd.mpeg != -1;
+ if ( !wasOpen )
+- fd.mpeg = ::open("/dev/video", O_WRONLY);
++ fd.mpeg = ::open("/dev/video", O_RDONLY);
+ if ( fd.mpeg > -1 )
+ {
+ if ( ::ioctl(fd.mpeg, VIDEO_SET_FASTZAP, val) < 0 )
+@@ -895,7 +895,7 @@
+ {
+ int wasOpen = fd.mpeg != -1;
+ if ( !wasOpen )
+- fd.mpeg = ::open("/dev/video", O_WRONLY);
++ fd.mpeg = ::open("/dev/video", O_RDONLY);
+ if ( fd.mpeg > -1 )
+ {
+ if ( ::ioctl(fd.mpeg, VIDEO_SET_AUTOFLUSH, on) < 0 )
+diff -Naur enigma_org/src/enigma_main.cpp enigma/src/enigma_main.cpp
+--- enigma_org/src/enigma_main.cpp 2007-07-03 11:10:12.000000000 +0200
++++ enigma/src/enigma_main.cpp 2007-10-19 11:48:20.000000000 +0200
+@@ -3038,17 +3038,25 @@
+ {
+ if ( ref.type == eServiceReference::idDVB && !ref.path && !timeshift )
+ {
+- if (eSystemInfo::getInstance()->canTimeshift() &&
+- eSystemInfo::getInstance()->getHwType() != eSystemInfo::DM600PVR &&
+- eSystemInfo::getInstance()->getHwType() != eSystemInfo::DM500PLUS
+- )
++ if (eSystemInfo::getInstance()->canTimeshift())
+ {
+ if (!eDVB::getInstance()->recorder)
+ {
+- record();
++ switch(eSystemInfo::getInstance()->getHwType())
++ {
++ case eSystemInfo::DM600PVR:
++ case eSystemInfo::DM500PLUS:
++ Decoder::setAutoFlushScreen(0);
++ Decoder::Pause(2); // freeze frame
++ record();
++ break;
++ default:
++ record();
++ Decoder::setAutoFlushScreen(0);
++ Decoder::Pause(2); // freeze frame
++ break;
++ }
+ timeshift=1;
+- Decoder::Pause(2); // freeze frame
+- Decoder::setAutoFlushScreen(0);
+ handler->serviceCommand(eServiceCommand(eServiceCommand::cmdSetSpeed, -1));
+ Decoder::setAutoFlushScreen(1);
+ }
============================================================
--- packages/dreambox/dreambox-blindscan-utils.bb 59ac702e5f971b065b4b78ffd5f8ced260d29a0d
+++ packages/dreambox/dreambox-blindscan-utils.bb da2c86670667baac3fb17f71453a8e3a7eba84cf
@@ -7,6 +7,8 @@ SRC_URI = "http://sources.dreamboxupdate
PR = "r0"
SRC_URI = "http://sources.dreamboxupdate.com/download/opendreambox/dreambox-blindscan-utils-${MACHINE}-1.0.tar.bz2"
+SRC_URI_dm600pvr = "http://sources.dreamboxupdate.com/download/opendreambox/dreambox-blindscan-utils-${MACHINE}-1.1.tar.bz2"
+PR_dm600pvr = "r1"
S = "${WORKDIR}/blindscan-utils"
============================================================
--- packages/dreambox/dreambox-dvb-modules.bb 5326f1f99283d6d0e93d4056c2575d471f1d3791
+++ packages/dreambox/dreambox-dvb-modules.bb 88f90a954ee8b44b847256fe6164e9c5cbe8d54b
@@ -16,10 +16,11 @@ KV_dm600pvr = "2.6.12"
PV_dm7025 = "${KV}-20070924${@get_modules_extension(bb, d)}"
KV_dm600pvr = "2.6.12"
-PV_dm600pvr = "${KV}-20070824"
+PV_dm600pvr = "${KV}-20071019"
+#0904
KV_dm500plus = "2.6.12"
-PV_dm500plus = "${KV}-20070824"
+PV_dm500plus = "${KV}-20071019"
RDEPENDS = "kernel (${KV})"
PR = "r0"
============================================================
--- packages/enigma/enigma_cvs.bb 4d65656691b26c2647d21839c86ed73c65be9271
+++ packages/enigma/enigma_cvs.bb 62c082e75293e3054b61f84ca5553889ef5ddb86
@@ -6,7 +6,7 @@ PN = "enigma"
SRCDATE = "20070615"
PV = "cvs-${SRCDATE}"
PN = "enigma"
-PR = "r1"
+PR = "r2"
SRC_URI = "cvs://anoncvs@cvs.tuxbox.org/cvs/tuxbox;module=apps/tuxbox/enigma;method=ext \
file://enigma.sh \
@@ -16,11 +16,15 @@ SRC_URI = "cvs://anoncvs@cvs.tuxbox.org/
file://enigma_enter_standby.sh \
file://enigma_leave_standby.sh \
file://rotor_fix.diff;patch=1;pnum=1 \
- file://disable_boot.diff;patch=1;pnum=1"
+ file://disable_boot.diff;patch=1;pnum=1 \
+ file://epgfix_backport.diff;patch=1;pnum=1 \
+ file://timeshiftfix_backport.diff;patch=1;pnum=1 \
+ file://subtitlefix_backport.diff;patch=1;pnum=1"
# dm600pvr and dm500plus don't have a FP, so they can't really switch of. Show a shutdown pic instead.
SRC_URI_append_dm600pvr = " http://sources.dreamboxupdate.com/download/opendreambox/enigma/showshutdownpic-${MACHINE} \
- file://add_blindscan_to_menu.diff;patch=1;pnum=1"
+ file://add_blindscan_to_menu.diff;patch=1;pnum=1 \
+ http://sources.dreamboxupdate.com/download/patches/enigma_add_cable_blindscan.diff;patch=1;pnum=1"
SRC_URI_append_dm500plus = " http://sources.dreamboxupdate.com/download/opendreambox/enigma/showshutdownpic-${MACHINE} \
file://add_blindscan_to_menu.diff;patch=1;pnum=1"
More information about the Openembedded-commits
mailing list