From 58a222f561f36d8b5c83b6758f94c8a65e96cb4c Mon Sep 17 00:00:00 2001 From: Andreas Rheinhardt Date: Fri, 13 Jun 2025 00:08:20 +0200 Subject: [PATCH] avcodec/svq1enc: Stop calling ff_mpv_common_init() It is not really needed, as none of the buffers allocated in ff_mpv_common_init() are used lateron; in fact, ff_mpv_common_init() is called with MpegEncContext.width and height equal to zero (as well as encoding equal to zero, so that the error resilience parts are initialized...), so that all the buffers are too small anyway. The call to ff_mpv_common_init() has been added in commit f6774f905fb3cfdc319523ac640be30b14c1bc55 in order to allocate {current,last,new}_picture.f (an AVFrame). Yet this is unnecessary since 7814dd77aa61703e3d43fc72bfaf6a9fbc42ff9c. The only task that ff_mpv_common_init() does that may be used is initializing the HpelDSPContext embedded in the MpegEncContext. In fact, it was not initialized before f6774f905fb3cfdc319523ac640be30b14c1bc55 and not initializing it passes FATE, yet I can't prove that it is indeed unnecessary. Therefore it is still initialized and used instead of SVQ1EncContext.hdsp. Signed-off-by: Andreas Rheinhardt --- libavcodec/svq1enc.c | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/libavcodec/svq1enc.c b/libavcodec/svq1enc.c index 948a7c41eb..e3061baff4 100644 --- a/libavcodec/svq1enc.c +++ b/libavcodec/svq1enc.c @@ -62,7 +62,6 @@ typedef struct SVQ1EncContext { MPVEncContext m; AVCodecContext *avctx; MECmpContext mecc; - HpelDSPContext hdsp; AVFrame *current_picture; AVFrame *last_picture; @@ -468,10 +467,10 @@ static int svq1_encode_plane(SVQ1EncContext *s, int plane, dxy = (mx & 1) + 2 * (my & 1); - s->hdsp.put_pixels_tab[0][dxy](temp + 16*stride, - ref + (mx >> 1) + - stride * (my >> 1), - stride, 16); + s2->hdsp.put_pixels_tab[0][dxy](temp + 16*stride, + ref + (mx >> 1) + + stride * (my >> 1), + stride, 16); score[1] += encode_block(s, src + 16 * x, temp + 16*stride, decoded, stride, 5, 64, lambda, 0); @@ -482,7 +481,7 @@ static int svq1_encode_plane(SVQ1EncContext *s, int plane, score[2] += SVQ1_BLOCK_SKIP_LEN * lambda; if (score[2] < score[best] && mx == 0 && my == 0) { best = 2; - s->hdsp.put_pixels_tab[0][0](decoded, ref, stride, 16); + s2->hdsp.put_pixels_tab[0][0](decoded, ref, stride, 16); put_bits(pb, SVQ1_BLOCK_SKIP_LEN, SVQ1_BLOCK_SKIP_CODE); } } @@ -511,7 +510,7 @@ static int svq1_encode_plane(SVQ1EncContext *s, int plane, ff_copy_bits(pb, reorder_buffer[best][i], count[best][i]); if (best == 0) - s->hdsp.put_pixels_tab[0][0](decoded, temp, stride, 16); + s2->hdsp.put_pixels_tab[0][0](decoded, temp, stride, 16); } s2->first_slice_line = 0; } @@ -533,9 +532,6 @@ static av_cold int svq1_encode_end(AVCodecContext *avctx) av_freep(&s->dummy); av_freep(&s->scratchbuf); - s->m.mb_type = NULL; - ff_mpv_common_end(&s->m.c); - for (i = 0; i < 3; i++) { av_freep(&s->motion_val8[i]); av_freep(&s->motion_val16[i]); @@ -571,7 +567,7 @@ static av_cold int svq1_encode_init(AVCodecContext *avctx) return AVERROR(EINVAL); } - ff_hpeldsp_init(&s->hdsp, avctx->flags); + ff_hpeldsp_init(&s->m.c.hdsp, avctx->flags); ff_me_cmp_init(&s->mecc, avctx); ret = ff_me_init(&s->m.me, avctx, &s->mecc, 0); if (ret < 0) @@ -605,10 +601,6 @@ static av_cold int svq1_encode_init(AVCodecContext *avctx) s->avctx = avctx; s->m.c.avctx = avctx; - ret = ff_mpv_common_init(&s->m.c); - if (ret < 0) - return ret; - for (size_t plane = 0; plane < FF_ARRAY_ELEMS(s->motion_val16); ++plane) { const int shift = plane ? 2 : 0; unsigned block_height = ((s->frame_height >> shift) + 15U) / 16;