mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1104411- Continue to read next frame if the length is 0. r=sotaro
This commit is contained in:
parent
5561c732aa
commit
73df94c36b
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user