ffmpegdecoder: improve scaler refresh

This commit is contained in:
itsmattkc
2022-05-19 14:00:56 -07:00
parent f4af8353bd
commit 5a86c1b47f
2 changed files with 12 additions and 4 deletions
+9 -2
View File
@@ -173,6 +173,7 @@ void FFmpegDecoder::CloseInternal()
}
ClearFrameCache();
FreeScaler();
instance_.Close();
}
@@ -677,11 +678,13 @@ void FFmpegDecoder::ClearFrameCache()
cached_frames_.clear();
cache_at_eof_ = false;
cache_at_zero_ = false;
}
}
// Filter graph may rely on "continuous" video frames, so we free the scaler here
void FFmpegDecoder::ResetScaler()
{
FreeScaler();
InitScaler(filter_params_);
}
}
FramePtr FFmpegDecoder::RetrieveFrame(const rational& time, const QAtomicInt *cancelled)
@@ -698,6 +701,9 @@ FramePtr FFmpegDecoder::RetrieveFrame(const rational& time, const QAtomicInt *ca
|| (time < cached_frames_.front()->timestamp() || time > cached_frames_.back()->timestamp() + 2)) {
ClearFrameCache();
// Filter graph may rely on "continuous" video frames, so we free the scaler here
ResetScaler();
instance_.Seek(seek_ts);
if (seek_ts == min_seek) {
cache_at_zero_ = true;
@@ -827,6 +833,7 @@ bool FFmpegDecoder::InitScaler(const RetrieveVideoParams& params)
// We need to (re)create the filter, delete current if necessary
ClearFrameCache();
FreeScaler();
// Set our params to this
filter_params_ = params;
+1
View File
@@ -141,6 +141,7 @@ private:
FramePtr GetFrameFromCache(const rational &t) const;
void ClearFrameCache();
void ResetScaler();
FramePtr RetrieveFrame(const rational &time, const QAtomicInt *cancelled);