Skip to content

Commit

Permalink
VIDEO: Fix getNextFramePacket() to actually be efficient
Browse files Browse the repository at this point in the history
  • Loading branch information
Matthew Hoops committed Oct 7, 2011
1 parent a80af5e commit 172e97d
Showing 1 changed file with 6 additions and 11 deletions.
17 changes: 6 additions & 11 deletions video/qt_decoder.cpp
Expand Up @@ -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;
}
}
Expand Down

0 comments on commit 172e97d

Please sign in to comment.