[FFmpeg-cvslog] avcodec/svq1enc: Stop calling ff_mpv_common_init()
Andreas Rheinhardt
git at videolan.org
Sat Jun 21 23:20:32 EEST 2025
ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinhardt at outlook.com> | Fri Jun 13 00:08:20 2025 +0200| [58a222f561f36d8b5c83b6758f94c8a65e96cb4c] | committer: Andreas Rheinhardt
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 <andreas.rheinhardt at outlook.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=58a222f561f36d8b5c83b6758f94c8a65e96cb4c
---
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;
More information about the ffmpeg-cvslog
mailing list