diff options
author | Matthew Hoops | 2011-10-07 10:16:38 -0400 |
---|---|---|
committer | Matthew Hoops | 2011-10-07 10:16:38 -0400 |
commit | 172e97da155aecbbee77fcd68f8f0b089523dab7 (patch) | |
tree | a254b1628698553c65673adf998a1f4339253c49 | |
parent | a80af5eb4da6181df614d2d989f89c5ae988bb5e (diff) | |
download | scummvm-rg350-172e97da155aecbbee77fcd68f8f0b089523dab7.tar.gz scummvm-rg350-172e97da155aecbbee77fcd68f8f0b089523dab7.tar.bz2 scummvm-rg350-172e97da155aecbbee77fcd68f8f0b089523dab7.zip |
VIDEO: Fix getNextFramePacket() to actually be efficient
-rw-r--r-- | video/qt_decoder.cpp | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/video/qt_decoder.cpp b/video/qt_decoder.cpp index 2dfb56dcea..389acea86b 100644 --- a/video/qt_decoder.cpp +++ b/video/qt_decoder.cpp @@ -483,23 +483,18 @@ Common::SeekableReadStream *QuickTimeDecoder::getNextFramePacket(uint32 &descId) int32 totalSampleCount = 0; int32 sampleInChunk = 0; int32 actualChunk = -1; + uint32 sampleToChunkIndex = 0; for (uint32 i = 0; i < _tracks[_videoTrackIndex]->chunkCount; i++) { - int32 sampleToChunkIndex = -1; + if (i >= _tracks[_videoTrackIndex]->sampleToChunk[sampleToChunkIndex].first) + sampleToChunkIndex++; - for (uint32 j = 0; j < _tracks[_videoTrackIndex]->sampleToChunkCount; j++) - if (i >= _tracks[_videoTrackIndex]->sampleToChunk[j].first) - sampleToChunkIndex = j; - - if (sampleToChunkIndex < 0) - error("This chunk (%d) is imaginary", sampleToChunkIndex); - - totalSampleCount += _tracks[_videoTrackIndex]->sampleToChunk[sampleToChunkIndex].count; + totalSampleCount += _tracks[_videoTrackIndex]->sampleToChunk[sampleToChunkIndex - 1].count; if (totalSampleCount > getCurFrame()) { actualChunk = i; - descId = _tracks[_videoTrackIndex]->sampleToChunk[sampleToChunkIndex].id; - sampleInChunk = _tracks[_videoTrackIndex]->sampleToChunk[sampleToChunkIndex].count - totalSampleCount + getCurFrame(); + descId = _tracks[_videoTrackIndex]->sampleToChunk[sampleToChunkIndex - 1].id; + sampleInChunk = _tracks[_videoTrackIndex]->sampleToChunk[sampleToChunkIndex - 1].count - totalSampleCount + getCurFrame(); break; } } |