[FFmpeg-cvslog] avcodec/mpegvideo: Move clear_context() to mpeg4videodec.c
Andreas Rheinhardt
git at videolan.org
Fri May 16 03:15:00 EEST 2025
ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinhardt at outlook.com> | Tue Mar 25 12:42:45 2025 +0100| [bd6e6495aebc016ab12bc0a60276c6d3fe43663b] | committer: Andreas Rheinhardt
avcodec/mpegvideo: Move clear_context() to mpeg4videodec.c
There is only one source of dirty MpegEncContexts:
update_mpvctx() (which copies an MpegEncContext
over another one in order to initialize it). So only clear
these contexts.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=bd6e6495aebc016ab12bc0a60276c6d3fe43663b
---
libavcodec/mpeg4videodec.c | 43 ++++++++++++++++++++++++++++++++++++++++---
libavcodec/mpegvideo.c | 38 --------------------------------------
2 files changed, 40 insertions(+), 41 deletions(-)
diff --git a/libavcodec/mpeg4videodec.c b/libavcodec/mpeg4videodec.c
index 60b06ad750..ad2dfbd0fb 100644
--- a/libavcodec/mpeg4videodec.c
+++ b/libavcodec/mpeg4videodec.c
@@ -3774,15 +3774,52 @@ int ff_mpeg4_frame_end(AVCodecContext *avctx, const AVPacket *pkt)
#if CONFIG_MPEG4_DECODER
#if HAVE_THREADS
-static int update_mpvctx(MpegEncContext *s, const MpegEncContext *s1)
+static av_cold void clear_context(MpegEncContext *s)
+{
+ memset(&s->buffer_pools, 0, sizeof(s->buffer_pools));
+ memset(&s->next_pic, 0, sizeof(s->next_pic));
+ memset(&s->last_pic, 0, sizeof(s->last_pic));
+ memset(&s->cur_pic, 0, sizeof(s->cur_pic));
+
+ memset(s->thread_context, 0, sizeof(s->thread_context));
+
+ s->block = NULL;
+ s->blocks = NULL;
+ s->ac_val_base = NULL;
+ s->ac_val[0] =
+ s->ac_val[1] =
+ s->ac_val[2] =NULL;
+ memset(&s->sc, 0, sizeof(s->sc));
+
+ s->p_field_mv_table_base = NULL;
+ for (int i = 0; i < 2; i++)
+ for (int j = 0; j < 2; j++)
+ s->p_field_mv_table[i][j] = NULL;
+
+ s->dc_val_base = NULL;
+ s->coded_block_base = NULL;
+ s->mbintra_table = NULL;
+ s->cbp_table = NULL;
+ s->pred_dir_table = NULL;
+
+ s->mbskip_table = NULL;
+
+ s->er.error_status_table = NULL;
+ s->er.er_temp_buffer = NULL;
+ s->mb_index2xy = NULL;
+
+ s->context_initialized = 0;
+ s->context_reinit = 0;
+}
+
+static av_cold int update_mpvctx(MpegEncContext *s, const MpegEncContext *s1)
{
AVCodecContext *avctx = s->avctx;
// FIXME the following leads to a data race; instead copy only
// the necessary fields.
memcpy(s, s1, sizeof(*s));
+ clear_context(s);
- s->context_initialized = 0;
- s->context_reinit = 0;
s->avctx = avctx;
if (s1->context_initialized) {
diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c
index d09eb1211d..a783ccdbdd 100644
--- a/libavcodec/mpegvideo.c
+++ b/libavcodec/mpegvideo.c
@@ -379,42 +379,6 @@ av_cold int ff_mpv_init_context_frame(MpegEncContext *s)
return !CONFIG_MPEGVIDEODEC || s->encoding ? 0 : ff_mpeg_er_init(s);
}
-static void clear_context(MpegEncContext *s)
-{
- memset(&s->buffer_pools, 0, sizeof(s->buffer_pools));
- memset(&s->next_pic, 0, sizeof(s->next_pic));
- memset(&s->last_pic, 0, sizeof(s->last_pic));
- memset(&s->cur_pic, 0, sizeof(s->cur_pic));
-
- memset(s->thread_context, 0, sizeof(s->thread_context));
-
- s->block = NULL;
- s->blocks = NULL;
- s->ac_val_base = NULL;
- s->ac_val[0] =
- s->ac_val[1] =
- s->ac_val[2] =NULL;
- memset(&s->sc, 0, sizeof(s->sc));
-
-
- s->p_field_mv_table_base = NULL;
- for (int i = 0; i < 2; i++)
- for (int j = 0; j < 2; j++)
- s->p_field_mv_table[i][j] = NULL;
-
- s->dc_val_base = NULL;
- s->coded_block_base = NULL;
- s->mbintra_table = NULL;
- s->cbp_table = NULL;
- s->pred_dir_table = NULL;
-
- s->mbskip_table = NULL;
-
- s->er.error_status_table = NULL;
- s->er.er_temp_buffer = NULL;
- s->mb_index2xy = NULL;
-}
-
/**
* init common structure for both encoder and decoder.
* this assumes that some variables like width/height are already set
@@ -426,8 +390,6 @@ av_cold int ff_mpv_common_init(MpegEncContext *s)
s->avctx->thread_count : 1;
int ret;
- clear_context(s);
-
if (s->encoding && s->avctx->slices)
nb_slices = s->avctx->slices;
More information about the ffmpeg-cvslog
mailing list