[FFmpeg-cvslog] avcodec/mpegvideo: Defer init of enc slice ctxs in ff_mpv_common_init()

Andreas Rheinhardt git at videolan.org
Sat Jun 21 23:20:52 EEST 2025


ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinhardt at outlook.com> | Fri Jun 13 01:10:18 2025 +0200| [8f92885b1fd72635af25e57b61f85bcff7e76ae3] | committer: Andreas Rheinhardt

avcodec/mpegvideo: Defer init of enc slice ctxs in ff_mpv_common_init()

This will allow to perform initializations between ff_mpv_common_init()
and ff_mpv_init_duplicate_contexts() that will be automatically
copied to the slice contexts.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=8f92885b1fd72635af25e57b61f85bcff7e76ae3
---

 libavcodec/mpegvideo.c     | 8 +++++---
 libavcodec/mpegvideo_enc.c | 9 ++++++---
 2 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c
index e329771b38..f6e997193d 100644
--- a/libavcodec/mpegvideo.c
+++ b/libavcodec/mpegvideo.c
@@ -431,9 +431,11 @@ av_cold int ff_mpv_common_init(MpegEncContext *s)
     s->slice_context_count = nb_slices;
 
 //     if (s->width && s->height) {
-    ret = ff_mpv_init_duplicate_contexts(s);
-    if (ret < 0)
-        goto fail;
+    if (!s->encoding) {
+        ret = ff_mpv_init_duplicate_contexts(s);
+        if (ret < 0)
+            goto fail;
+    }
 //     }
 
     return 0;
diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c
index af1e77cfec..1fae5fbeb0 100644
--- a/libavcodec/mpegvideo_enc.c
+++ b/libavcodec/mpegvideo_enc.c
@@ -1023,9 +1023,9 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx)
         m->lmin = m->lmax;
     }
 
-    /* ff_mpv_common_init() will copy (memdup) the contents of the main slice
-     * to the slice contexts, so we initialize various fields of it
-     * before calling ff_mpv_common_init(). */
+    /* ff_mpv_init_duplicate_contexts() will copy (memdup) the contents of the
+     * main slice to the slice contexts, so we initialize various fields of it
+     * before calling ff_mpv_init_duplicate_contexts(). */
     s->parent = m;
     ff_mpv_idct_init(&s->c);
     init_unquantize(s, avctx);
@@ -1057,6 +1057,9 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx)
 
     s->c.slice_ctx_size = sizeof(*s);
     ret = ff_mpv_common_init(&s->c);
+    if (ret < 0)
+        return ret;
+    ret = ff_mpv_init_duplicate_contexts(&s->c);
     if (ret < 0)
         return ret;
 



More information about the ffmpeg-cvslog mailing list