[FFmpeg-devel] [PATCH 05/18] lavc/dv: remove ff_dvvideo_init()

Andreas Rheinhardt andreas.rheinhardt at outlook.com
Wed Aug 24 15:27:43 EEST 2022


Anton Khirnov:
> The function contains only two assignments, which are simpler to
> duplicate into decoder and encoder. Additionally, dvdec does not use
> DVVideoContext.avctx at all.
> ---
>  libavcodec/dv.c    | 10 ----------
>  libavcodec/dv.h    |  2 --
>  libavcodec/dvdec.c |  4 +++-
>  libavcodec/dvenc.c |  5 ++++-
>  4 files changed, 7 insertions(+), 14 deletions(-)
> 
> diff --git a/libavcodec/dv.c b/libavcodec/dv.c
> index e2550c4cc1..9e05aa8927 100644
> --- a/libavcodec/dv.c
> +++ b/libavcodec/dv.c
> @@ -184,13 +184,3 @@ int ff_dv_init_dynamic_tables(DVVideoContext *ctx, const AVDVProfile *d)
>  
>      return 0;
>  }
> -
> -av_cold int ff_dvvideo_init(AVCodecContext *avctx)
> -{
> -    DVVideoContext *s = avctx->priv_data;
> -
> -    s->avctx = avctx;
> -    avctx->chroma_sample_location = AVCHROMA_LOC_TOPLEFT;
> -
> -    return 0;
> -}
> diff --git a/libavcodec/dv.h b/libavcodec/dv.h
> index 331b8e846a..2b082d0140 100644
> --- a/libavcodec/dv.h
> +++ b/libavcodec/dv.h
> @@ -97,8 +97,6 @@ enum dv_pack_type {
>  
>  int ff_dv_init_dynamic_tables(DVVideoContext *s, const AVDVProfile *d);
>  
> -int ff_dvvideo_init(AVCodecContext *avctx);
> -
>  static inline int dv_work_pool_size(const AVDVProfile *d)
>  {
>      int size = d->n_difchan * d->difseg_size * 27;
> diff --git a/libavcodec/dvdec.c b/libavcodec/dvdec.c
> index bad8419925..daee2347e6 100644
> --- a/libavcodec/dvdec.c
> +++ b/libavcodec/dvdec.c
> @@ -240,6 +240,8 @@ static av_cold int dvvideo_decode_init(AVCodecContext *avctx)
>      DVVideoContext *s = avctx->priv_data;
>      int i;
>  
> +    avctx->chroma_sample_location = AVCHROMA_LOC_TOPLEFT;
> +
>      ff_idctdsp_init(&s->idsp, avctx);
>  
>      for (i = 0; i < 64; i++)
> @@ -258,7 +260,7 @@ static av_cold int dvvideo_decode_init(AVCodecContext *avctx)
>  
>      ff_thread_once(&init_static_once, dv_init_static);
>  
> -    return ff_dvvideo_init(avctx);
> +    return 0;
>  }
>  
>  /* decode AC coefficients */
> diff --git a/libavcodec/dvenc.c b/libavcodec/dvenc.c
> index 5ba4de3213..8027feb9b3 100644
> --- a/libavcodec/dvenc.c
> +++ b/libavcodec/dvenc.c
> @@ -55,6 +55,9 @@ static av_cold int dvvideo_encode_init(AVCodecContext *avctx)
>      PixblockDSPContext pdsp;
>      int ret;
>  
> +    s->avctx = avctx;
> +    avctx->chroma_sample_location = AVCHROMA_LOC_TOPLEFT;
> +
>      s->sys = av_dv_codec_profile2(avctx->width, avctx->height, avctx->pix_fmt, avctx->time_base);
>      if (!s->sys) {
>          av_log(avctx, AV_LOG_ERROR, "Found no DV profile for %ix%i %s video. "
> @@ -91,7 +94,7 @@ static av_cold int dvvideo_encode_init(AVCodecContext *avctx)
>      }
>  #endif
>  
> -    return ff_dvvideo_init(avctx);
> +    return 0;
>  }
>  
>  /* bit budget for AC only in 5 MBs */

There is actually another issue here: Encoders are not supposed to set
chroma_sample_location at all according to the documentation. I sent a
patch to implement this
(https://ffmpeg.org/pipermail/ffmpeg-devel/2022-July/298518.html -- it
also inlines and removes ff_dvvideo_init()), but I am unsure whether it
is not the documentation that needs to be updated.

- Andreas


More information about the ffmpeg-devel mailing list