diff options
| author | ghost <andreas.monzner@multimedia-labs.de> | 2011-02-09 15:10:03 +0100 |
|---|---|---|
| committer | ghost <andreas.monzner@multimedia-labs.de> | 2011-02-09 15:10:03 +0100 |
| commit | 7211bd40026fb8b00be038a59abcbfa29569b3ed (patch) | |
| tree | 341658bd44402bc6997da09e372ec4333301fe61 /lib/dvb | |
| parent | 6860090ddeaaa0faf18be716f3eed439808335ba (diff) | |
| parent | 0c264458b72ac77a0129c8a702d3e8dad70f0e49 (diff) | |
| download | enigma2-7211bd40026fb8b00be038a59abcbfa29569b3ed.tar.gz enigma2-7211bd40026fb8b00be038a59abcbfa29569b3ed.zip | |
Merge branch 'bug_570_playback_skip_fixes_and_cleanup_ml_aholst'
Diffstat (limited to 'lib/dvb')
| -rw-r--r-- | lib/dvb/pvrparse.cpp | 2 | ||||
| -rw-r--r-- | lib/dvb/tstools.cpp | 25 |
2 files changed, 23 insertions, 4 deletions
diff --git a/lib/dvb/pvrparse.cpp b/lib/dvb/pvrparse.cpp index 5cdecbd6..e19dd1e4 100644 --- a/lib/dvb/pvrparse.cpp +++ b/lib/dvb/pvrparse.cpp @@ -123,7 +123,7 @@ void eMPEGStreamInformation::fixupDiscontinuties() pts_t current = i->second - currentDelta; pts_t diff = current - lastpts_t; - if (llabs(diff) > (90000*5)) // 5sec diff + if (llabs(diff) > (90000*10)) // 10sec diff { // eDebug("%llx < %llx, have discont. new timestamp is %llx (diff is %llx)!", current, lastpts_t, i->second, diff); currentDelta = i->second - lastpts_t; /* FIXME: should be the extrapolated new timestamp, based on the current rate */ diff --git a/lib/dvb/tstools.cpp b/lib/dvb/tstools.cpp index 1403059f..9b47f9b8 100644 --- a/lib/dvb/tstools.cpp +++ b/lib/dvb/tstools.cpp @@ -700,9 +700,26 @@ int eDVBTSTools::findFrame(off_t &_offset, size_t &len, int &direction, int fram else if (direction == +1) direction = 0; } - /* let's find the next frame after the given offset */ off_t start = offset; +#if 0 + /* backtrack to find the previous sequence start, in case of MPEG2 */ + if ((data & 0xFF) == 0x00) { + do { + --start; + if (m_streaminfo.getStructureEntry(start, data, 0)) + { + eDebug("get previous failed"); + return -1; + } + } while (((data & 0xFF) != 9) && ((data & 0xFF) != 0x00) && ((data & 0xFF) != 0xB3)); /* sequence start or previous frame */ + if ((data & 0xFF) != 0xB3) + start = offset; /* Failed to find corresponding sequence start, so never mind */ + } + +#endif + + /* let's find the next frame after the given offset */ do { if (m_streaminfo.getStructureEntry(offset, data, 1)) { @@ -717,9 +734,11 @@ int eDVBTSTools::findFrame(off_t &_offset, size_t &len, int &direction, int fram // eDebug("%08llx@%llx (next)", data, offset); } while (((data & 0xFF) != 9) && ((data & 0xFF) != 0x00)); /* next frame */ +#if 0 /* align to TS pkt start */ -// start = start - (start % 188); -// offset = offset - (offset % 188); + start = start - (start % 188); + offset = offset - (offset % 188); +#endif len = offset - start; _offset = start; |
