Andreas Rheinhardt: > Currently, ff_mpv_encode_end() is the close function of > the two MJPEG-based encoders; it calls ff_mjpeg_encode_close() > for them which adds a check to the generic code. > This commit reverses the order of this relationship: > The MJPEG encoders directly use a custom close function > which in turn calls ff_mpv_encode_end(). This avoids the branch > in ff_mpv_encode_end() and makes the generic code more generic. > > Signed-off-by: Andreas Rheinhardt <andreas.rheinha...@outlook.com> > --- > libavcodec/mjpegenc.c | 9 ++++++--- > libavcodec/mjpegenc.h | 1 - > libavcodec/mpegvideo_enc.c | 3 --- > 3 files changed, 6 insertions(+), 7 deletions(-) > > diff --git a/libavcodec/mjpegenc.c b/libavcodec/mjpegenc.c > index 0ade66bc5f..5bd25b4f3b 100644 > --- a/libavcodec/mjpegenc.c > +++ b/libavcodec/mjpegenc.c > @@ -320,12 +320,15 @@ av_cold int ff_mjpeg_encode_init(MpegEncContext *s) > return 0; > } > > -av_cold void ff_mjpeg_encode_close(MpegEncContext *s) > +static av_cold int mjpeg_encode_close(AVCodecContext *avctx) > { > + MpegEncContext *const s = avctx->priv_data; > if (s->mjpeg_ctx) { > av_freep(&s->mjpeg_ctx->huff_buffer); > av_freep(&s->mjpeg_ctx); > } > + ff_mpv_encode_end(avctx); > + return 0; > } > > /** > @@ -618,7 +621,7 @@ const AVCodec ff_mjpeg_encoder = { > .priv_data_size = sizeof(MpegEncContext), > .init = ff_mpv_encode_init, > .encode2 = ff_mpv_encode_picture, > - .close = ff_mpv_encode_end, > + .close = mjpeg_encode_close, > .capabilities = AV_CODEC_CAP_SLICE_THREADS | > AV_CODEC_CAP_FRAME_THREADS, > .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | > FF_CODEC_CAP_INIT_CLEANUP, > .pix_fmts = (const enum AVPixelFormat[]) { > @@ -647,7 +650,7 @@ const AVCodec ff_amv_encoder = { > .priv_data_size = sizeof(MpegEncContext), > .init = ff_mpv_encode_init, > .encode2 = amv_encode_picture, > - .close = ff_mpv_encode_end, > + .close = mjpeg_encode_close, > .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | > FF_CODEC_CAP_INIT_CLEANUP, > .pix_fmts = (const enum AVPixelFormat[]) { > AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_NONE > diff --git a/libavcodec/mjpegenc.h b/libavcodec/mjpegenc.h > index 2e92511276..bc9b017e7a 100644 > --- a/libavcodec/mjpegenc.h > +++ b/libavcodec/mjpegenc.h > @@ -105,7 +105,6 @@ static inline void put_marker(PutBitContext *p, enum > JpegMarker code) > } > > int ff_mjpeg_encode_init(MpegEncContext *s); > -void ff_mjpeg_encode_close(MpegEncContext *s); > void ff_mjpeg_encode_mb(MpegEncContext *s, int16_t block[12][64]); > int ff_mjpeg_encode_stuffing(MpegEncContext *s); > > diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c > index 128d1a327c..d2520368e1 100644 > --- a/libavcodec/mpegvideo_enc.c > +++ b/libavcodec/mpegvideo_enc.c > @@ -970,9 +970,6 @@ av_cold int ff_mpv_encode_end(AVCodecContext *avctx) > ff_rate_control_uninit(s); > > ff_mpv_common_end(s); > - if ((CONFIG_MJPEG_ENCODER || CONFIG_AMV_ENCODER) && > - s->out_format == FMT_MJPEG) > - ff_mjpeg_encode_close(s); > > for (i = 0; i < FF_ARRAY_ELEMS(s->tmp_frames); i++) > av_frame_free(&s->tmp_frames[i]); >
Will apply this patchset tonight unless there are objections. - Andreas _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".