diff options
| author | ghost <andreas.monzner@multimedia-labs.de> | 2010-11-25 00:12:59 +0100 |
|---|---|---|
| committer | ghost <andreas.monzner@multimedia-labs.de> | 2010-11-25 00:12:59 +0100 |
| commit | cdfd7a570b5b0813c8f62fc76deed949d7a11803 (patch) | |
| tree | 1b4e1f1ada84e532fe7c37ea9aea49a4c9d32fa0 /lib/dvb/tstools.cpp | |
| parent | ac065de0aa482d630e41ba80ccdc5ef617e7e378 (diff) | |
| parent | 16902de6f4215ccd425622b92e8ae6be1ae4a97f (diff) | |
| download | enigma2-cdfd7a570b5b0813c8f62fc76deed949d7a11803.tar.gz enigma2-cdfd7a570b5b0813c8f62fc76deed949d7a11803.zip | |
Merge branch 'bug_570_playback_skip_fixes_and_cleanup_ml_aholst' into experimental
Diffstat (limited to 'lib/dvb/tstools.cpp')
| -rw-r--r-- | lib/dvb/tstools.cpp | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/lib/dvb/tstools.cpp b/lib/dvb/tstools.cpp index cfea3fdd..ad55509f 100644 --- a/lib/dvb/tstools.cpp +++ b/lib/dvb/tstools.cpp @@ -700,9 +700,23 @@ 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; + /* 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 */ + } + + /* let's find the next frame after the given offset */ do { if (m_streaminfo.getStructureEntry(offset, data, 1)) { @@ -718,8 +732,8 @@ int eDVBTSTools::findFrame(off_t &_offset, size_t &len, int &direction, int fram } while (((data & 0xFF) != 9) && ((data & 0xFF) != 0x00)); /* next frame */ /* align to TS pkt start */ -// start = start - (start % 188); -// offset = offset - (offset % 188); + start = start - (start % 188); + offset = offset - (offset % 188); len = offset - start; _offset = start; |
