avcodec_get_hw_frames_parameters(), called by the user from get_format,
is allocating ctx->internal->hwaccel_priv_data. But the hardware
decoding setup may fail on the user side and it may fallback to software
decoding. In that case, ctx->internal->hwaccel_priv_data is still
allocated but not used anymore.
---
 libavcodec/pthread_frame.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/libavcodec/pthread_frame.c b/libavcodec/pthread_frame.c
index 1b1b96623f..a4474e4216 100644
--- a/libavcodec/pthread_frame.c
+++ b/libavcodec/pthread_frame.c
@@ -49,6 +49,7 @@
 #include "libavutil/mem.h"
 #include "libavutil/opt.h"
 #include "libavutil/thread.h"
+#include "libavutil/pixdesc.h"
 
 enum {
     /// Set when the thread is awaiting a packet.
@@ -413,6 +414,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
         if (codec->update_thread_context_for_user)
             err = codec->update_thread_context_for_user(dst, src);
     } else {
+        const AVPixFmtDescriptor *desc;
         const PerThreadContext *p_src = src->internal->thread_ctx;
         PerThreadContext       *p_dst = dst->internal->thread_ctx;
 
@@ -423,8 +425,9 @@ FF_ENABLE_DEPRECATION_WARNINGS
         }
 
         // reset dst hwaccel state if needed
-        av_assert0(p_dst->hwaccel_threadsafe ||
-                   (!dst->hwaccel && !dst->internal->hwaccel_priv_data));
+        desc = av_pix_fmt_desc_get(dst->pix_fmt);
+        av_assert0(p_dst->hwaccel_threadsafe || desc == NULL ||
+                   (!dst->hwaccel && (desc->flags & AV_PIX_FMT_FLAG_HWACCEL) 
== 0));
         if (p_dst->hwaccel_threadsafe &&
             (!p_src->hwaccel_threadsafe || dst->hwaccel != src->hwaccel)) {
             ff_hwaccel_uninit(dst);
-- 
2.45.2

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to