aboutsummaryrefslogtreecommitdiff
path: root/video
diff options
context:
space:
mode:
authorPaul Gilbert2016-12-29 22:23:16 -0500
committerPaul Gilbert2016-12-29 22:23:16 -0500
commitcc4ede6509bb12a5d60861eb925640601fab6020 (patch)
tree972411b0edcbcf25ec9d3f5a4467e49af3bcb8c7 /video
parent2e8c80cf58e03ad735a5b147f11d31f07e49e33a (diff)
downloadscummvm-rg350-cc4ede6509bb12a5d60861eb925640601fab6020.tar.gz
scummvm-rg350-cc4ede6509bb12a5d60861eb925640601fab6020.tar.bz2
scummvm-rg350-cc4ede6509bb12a5d60861eb925640601fab6020.zip
VIDEO: Further work on 2-track AVI videos
It turns out that at least one video in Starship Titanic, for the Lift Indicator, has only a single transparency frame in track 2. The added code, therefore, when it doesn't find an index entry for the desired frame number, works backwards until it finds a valid frame (likely frame 0), and then scans forward. If it hits the end of the video, then it simply uses whatever last frame it last decoded.
Diffstat (limited to 'video')
-rw-r--r--video/avi_decoder.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/video/avi_decoder.cpp b/video/avi_decoder.cpp
index c2c485c1eb..32aa9f9044 100644
--- a/video/avi_decoder.cpp
+++ b/video/avi_decoder.cpp
@@ -726,7 +726,7 @@ bool AVIDecoder::seekIntern(const Audio::Timestamp &time) {
OldIndex *entry = nullptr;
do {
entry = _indexEntries.find(_videoTracks.back().index, indexFrame);
- } while (!entry && --indexFrame >= 0);
+ } while (!entry && indexFrame-- > 0);
assert(entry);
// Read in the frame
@@ -740,7 +740,7 @@ bool AVIDecoder::seekIntern(const Audio::Timestamp &time) {
if (indexFrame < frame) {
TrackStatus &status = _videoTracks.back();
- while (indexFrame++ < frame) {
+ while (status.chunkSearchOffset < _movieListEnd && indexFrame++ < frame) {
// There was no index entry for the desired frame, so an earlier one was decoded.
// We now have to sequentially decode frames until we get to the desired frame
handleNextPacket(status);