aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLynne <dev@lynne.ee>2023-06-13 04:04:28 +0200
committerLynne <dev@lynne.ee>2023-06-15 22:00:40 +0200
commitf30b979ca20fa9589872328dbae05cb1dc7c64fd (patch)
tree60d143c9e3bdf2a14b5c2da469f9472346032a0d
parent41be6a5593ab498f8069f0dd11e7d7cebb1f6811 (diff)
downloadffmpeg-f30b979ca20fa9589872328dbae05cb1dc7c64fd.tar.gz
pthread_frame: uninit the hwaccel of each frame thread
The issue is that with a threadsafe hwaccel and multiple enabled frame threads, hwaccel->uninit() is never called. Previously, the function was guaranteed to never have any threads with hwaccel contexts, so it never bothered to uninit any.
-rw-r--r--libavcodec/pthread_frame.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/libavcodec/pthread_frame.c b/libavcodec/pthread_frame.c
index 28335231fd..008f3da43b 100644
--- a/libavcodec/pthread_frame.c
+++ b/libavcodec/pthread_frame.c
@@ -751,6 +751,10 @@ void ff_frame_thread_free(AVCodecContext *avctx, int thread_count)
if (codec->close && p->thread_init != UNINITIALIZED)
codec->close(ctx);
+ /* When using a threadsafe hwaccel, this is where
+ * each thread's context is uninit'd and freed. */
+ ff_hwaccel_uninit(ctx);
+
if (ctx->priv_data) {
if (codec->p.priv_class)
av_opt_free(ctx->priv_data);