diff options
| author | ghost <andreas.monzner@multimedia-labs.de> | 2009-11-03 19:53:05 +0100 |
|---|---|---|
| committer | ghost <andreas.monzner@multimedia-labs.de> | 2009-11-03 19:53:05 +0100 |
| commit | 765e1c0b8f36ea3909fc0a3883f68d56d0d5530f (patch) | |
| tree | 4a6c69928df324a4db54ce5fa862bc7e19588059 /lib/dvb/tstools.cpp | |
| parent | 18469e4dedcfe75e8128b489774f79fb790a23da (diff) | |
| parent | 4a7a8362a83b1a6c2bd0abf13cd7b19359e9768a (diff) | |
| download | enigma2-765e1c0b8f36ea3909fc0a3883f68d56d0d5530f.tar.gz enigma2-765e1c0b8f36ea3909fc0a3883f68d56d0d5530f.zip | |
Merge branch 'bug_245_record_playback_fixes' into experimental
Diffstat (limited to 'lib/dvb/tstools.cpp')
| -rw-r--r-- | lib/dvb/tstools.cpp | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/lib/dvb/tstools.cpp b/lib/dvb/tstools.cpp index a9eef406..2e5c5665 100644 --- a/lib/dvb/tstools.cpp +++ b/lib/dvb/tstools.cpp @@ -652,18 +652,23 @@ int eDVBTSTools::findFrame(off_t &_offset, size_t &len, int &direction, int fram int eDVBTSTools::findNextPicture(off_t &offset, size_t &len, int &distance, int frame_types) { - int nr_frames = 0; + int nr_frames, direction; // eDebug("trying to move %d frames at %llx", distance, offset); frame_types = frametypeI; /* TODO: intelligent "allow IP frames when not crossing an I-Frame */ - int direction = distance > 0 ? 0 : -1; - distance = abs(distance); - off_t new_offset = offset; size_t new_len = len; int first = 1; + if (distance > 0) { + direction = 0; + nr_frames = 0; + } else { + direction = -1; + nr_frames = -1; + distance = -distance+1; + } while (distance > 0) { int dir = direction; @@ -677,12 +682,18 @@ int eDVBTSTools::findNextPicture(off_t &offset, size_t &len, int &distance, int // eDebug("we moved %d, %d to go frames (now at %llx)", dir, distance, new_offset); - if (distance >= 0 || first) + if (distance >= 0 || direction == 0) { first = 0; offset = new_offset; len = new_len; nr_frames += abs(dir); + } + else if (first) { + first = 0; + offset = new_offset; + len = new_len; + nr_frames += abs(dir) + distance; // never jump forward during rewind } } |
