Bug 1104411- Continue to read next frame if the length is 0. r=sotaro

This commit is contained in:
Blake 2014-11-26 10:59:17 +08:00
parent 5561c732aa
commit 73df94c36b

View File

@ -574,12 +574,16 @@ bool OmxDecoder::ReadVideo(VideoFrame *aFrame, int64_t aTimeUs,
while (findNextBuffer) { while (findNextBuffer) {
options.setSeekTo(aTimeUs, seekMode); options.setSeekTo(aTimeUs, seekMode);
findNextBuffer = false; findNextBuffer = false;
err = mVideoSource->read(&mVideoBuffer, &options); if (mIsVideoSeeking) {
{ err = mVideoSource->read(&mVideoBuffer, &options);
Mutex::Autolock autoLock(mSeekLock); Mutex::Autolock autoLock(mSeekLock);
mIsVideoSeeking = false; mIsVideoSeeking = false;
PostReleaseVideoBuffer(nullptr, FenceHandle()); PostReleaseVideoBuffer(nullptr, FenceHandle());
} }
else {
err = mVideoSource->read(&mVideoBuffer);
}
// If there is no next Keyframe, jump to the previous key frame. // If there is no next Keyframe, jump to the previous key frame.
if (err == ERROR_END_OF_STREAM && seekMode == MediaSource::ReadOptions::SEEK_NEXT_SYNC) { if (err == ERROR_END_OF_STREAM && seekMode == MediaSource::ReadOptions::SEEK_NEXT_SYNC) {
seekMode = MediaSource::ReadOptions::SEEK_PREVIOUS_SYNC; seekMode = MediaSource::ReadOptions::SEEK_PREVIOUS_SYNC;
@ -593,13 +597,11 @@ bool OmxDecoder::ReadVideo(VideoFrame *aFrame, int64_t aTimeUs,
ALOG("Unexpected error when seeking to %lld", aTimeUs); ALOG("Unexpected error when seeking to %lld", aTimeUs);
break; break;
} }
// For some codecs, the length of first decoded frame after seek is 0.
// Need to ignore it and continue to find the next one
if (mVideoBuffer->range_length() == 0) { if (mVideoBuffer->range_length() == 0) {
ReleaseVideoBuffer(); ReleaseVideoBuffer();
findNextBuffer = true; findNextBuffer = true;
{
Mutex::Autolock autoLock(mSeekLock);
mIsVideoSeeking = true;
}
} }
} }
aDoSeek = false; aDoSeek = false;