From 9a4dcd8277da2170683ece2b3025df04829755fe Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Wed, 5 Aug 2020 22:31:14 +1000 Subject: [PATCH] ffmpegdecoder: handle unexpected EOF --- app/codec/ffmpeg/ffmpegdecoder.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/codec/ffmpeg/ffmpegdecoder.cpp b/app/codec/ffmpeg/ffmpegdecoder.cpp index b0da1d794..36a57003f 100644 --- a/app/codec/ffmpeg/ffmpegdecoder.cpp +++ b/app/codec/ffmpeg/ffmpegdecoder.cpp @@ -914,6 +914,7 @@ void FFmpegDecoderInstance::SetWorking(bool working) void FFmpegDecoderInstance::Seek(int64_t timestamp) { + qDebug() << "Seeking to" << timestamp; avcodec_flush_buffers(codec_ctx_); av_seek_frame(fmt_ctx_, avstream_->index, timestamp, AVSEEK_FLAG_BACKWARD); } @@ -1061,7 +1062,11 @@ FFmpegFramePool::ElementPtr FFmpegDecoderInstance::RetrieveFrame(const int64_t& // Handle an "expected" EOF by using the last frame of our cache cache_at_eof_ = true; - return_frame = cached_frames_.last(); + if (cached_frames_.isEmpty()) { + qCritical() << "Unexpected codec EOF - unable to retrieve frame"; + } else { + return_frame = cached_frames_.last(); + } cache_wait_cond_.wakeAll(); cache_lock_.unlock();