[FFmpeg-devel] [PATCH v2] avcodec/libx264: bump minimum required version to 155

Niklas Haas ffmpeg at haasn.xyz
Mon Apr 15 14:47:04 EEST 2024


On Fri, 12 Apr 2024 12:45:44 +0200 Niklas Haas <ffmpeg at haasn.xyz> wrote:
> On Tue, 09 Apr 2024 15:12:05 +0200 Niklas Haas <ffmpeg at haasn.xyz> wrote:
> > From: Niklas Haas <git at haasn.dev>
> > 
> > This version is seven years old, and present in Debian oldoldstable,
> > Ubuntu 20.04 and Leap 15.0.
> > 
> > Allows cleaning up the file substantially. In particular, this is
> > motivated by the desire to stop relying on init_static_data.
> > ---
> >  configure            |  2 +-
> >  libavcodec/libx264.c | 52 ++++++--------------------------------------
> >  2 files changed, 8 insertions(+), 46 deletions(-)
> > 
> > diff --git a/configure b/configure
> > index f511fbae492..248ce2040d6 100755
> > --- a/configure
> > +++ b/configure
> > @@ -7007,7 +7007,7 @@ enabled libwebp           && {
> >      enabled libwebp_encoder      && require_pkg_config libwebp "libwebp >= 0.2.0" webp/encode.h WebPGetEncoderVersion
> >      enabled libwebp_anim_encoder && check_pkg_config libwebp_anim_encoder "libwebpmux >= 0.4.0" webp/mux.h WebPAnimEncoderOptionsInit; }
> >  enabled libx264           && require_pkg_config libx264 x264 "stdint.h x264.h" x264_encoder_encode &&
> > -                             require_cpp_condition libx264 x264.h "X264_BUILD >= 122" && {
> > +                             require_cpp_condition libx264 x264.h "X264_BUILD >= 155" && {
> >                               [ "$toolchain" != "msvc" ] ||
> >                               require_cpp_condition libx264 x264.h "X264_BUILD >= 158"; } &&
> >                               check_cpp_condition libx264_hdr10 x264.h "X264_BUILD >= 163" &&
> > diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c
> > index eadb20d2b39..2715f277f1f 100644
> > --- a/libavcodec/libx264.c
> > +++ b/libavcodec/libx264.c
> > @@ -270,11 +270,9 @@ static void reconfig_encoder(AVCodecContext *ctx, const AVFrame *frame)
> >          case AV_STEREO3D_FRAMESEQUENCE:
> >              fpa_type = 5;
> >              break;
> > -#if X264_BUILD >= 145
> >          case AV_STEREO3D_2D:
> >              fpa_type = 6;
> >              break;
> > -#endif
> >          default:
> >              fpa_type = -1;
> >              break;
> > @@ -394,14 +392,14 @@ static int setup_mb_info(AVCodecContext *ctx, x264_picture_t *pic,
> >      return 0;
> >  }
> >  
> > -static int setup_roi(AVCodecContext *ctx, x264_picture_t *pic, int bit_depth,
> > +static int setup_roi(AVCodecContext *ctx, x264_picture_t *pic,
> >                       const AVFrame *frame, const uint8_t *data, size_t size)
> >  {
> >      X264Context *x4 = ctx->priv_data;
> >  
> >      int mbx = (frame->width + MB_SIZE - 1) / MB_SIZE;
> >      int mby = (frame->height + MB_SIZE - 1) / MB_SIZE;
> > -    int qp_range = 51 + 6 * (bit_depth - 8);
> > +    int qp_range = 51 + 6 * (x4->params.i_bitdepth - 8);
> >      int nb_rois;
> >      const AVRegionOfInterest *roi;
> >      uint32_t roi_size;
> > @@ -476,7 +474,7 @@ static int setup_frame(AVCodecContext *ctx, const AVFrame *frame,
> >      x264_sei_t     *sei = &pic->extra_sei;
> >      unsigned int sei_data_size = 0;
> >      int64_t wallclock = 0;
> > -    int bit_depth, ret;
> > +    int ret;
> >      AVFrameSideData *sd;
> >      AVFrameSideData *mbinfo_sd;
> >  
> > @@ -486,12 +484,7 @@ static int setup_frame(AVCodecContext *ctx, const AVFrame *frame,
> >  
> >      x264_picture_init(pic);
> >      pic->img.i_csp   = x4->params.i_csp;
> > -#if X264_BUILD >= 153
> > -    bit_depth = x4->params.i_bitdepth;
> > -#else
> > -    bit_depth = x264_bit_depth;
> > -#endif
> > -    if (bit_depth > 8)
> > +    if (x4->params.i_bitdepth > 8)
> >          pic->img.i_csp |= X264_CSP_HIGH_DEPTH;
> >      pic->img.i_plane = av_pix_fmt_count_planes(ctx->pix_fmt);
> >  
> > @@ -564,7 +557,7 @@ static int setup_frame(AVCodecContext *ctx, const AVFrame *frame,
> >  
> >      sd = av_frame_get_side_data(frame, AV_FRAME_DATA_REGIONS_OF_INTEREST);
> >      if (sd) {
> > -        ret = setup_roi(ctx, pic, bit_depth, frame, sd->data, sd->size);
> > +        ret = setup_roi(ctx, pic, frame, sd->data, sd->size);
> >          if (ret < 0)
> >              goto fail;
> >      }
> > @@ -1109,9 +1102,7 @@ static av_cold int X264_init(AVCodecContext *avctx)
> >      x4->params.p_log_private        = avctx;
> >      x4->params.i_log_level          = X264_LOG_DEBUG;
> >      x4->params.i_csp                = convert_pix_fmt(avctx->pix_fmt);
> > -#if X264_BUILD >= 153
> >      x4->params.i_bitdepth           = av_pix_fmt_desc_get(avctx->pix_fmt)->comp[0].depth;
> > -#endif
> >  
> >      PARSE_X264_OPT("weightp", wpredp);
> >  
> > @@ -1180,11 +1171,10 @@ static av_cold int X264_init(AVCodecContext *avctx)
> >      else if (x4->params.i_level_idc > 0) {
> >          int i;
> >          int mbn = AV_CEIL_RSHIFT(avctx->width, 4) * AV_CEIL_RSHIFT(avctx->height, 4);
> > -        int scale = X264_BUILD < 129 ? 384 : 1;
> >  
> >          for (i = 0; i<x264_levels[i].level_idc; i++)
> >              if (x264_levels[i].level_idc == x4->params.i_level_idc)
> > -                x4->params.i_frame_reference = av_clip(x264_levels[i].dpb / mbn / scale, 1, x4->params.i_frame_reference);
> > +                x4->params.i_frame_reference = av_clip(x264_levels[i].dpb / mbn, 1, x4->params.i_frame_reference);
> >      }
> >  
> >      if (avctx->trellis >= 0)
> > @@ -1228,12 +1218,7 @@ static av_cold int X264_init(AVCodecContext *avctx)
> >          x4->params.b_vfr_input = 0;
> >      }
> >      if (x4->avcintra_class >= 0)
> > -#if X264_BUILD >= 142
> >          x4->params.i_avcintra_class = x4->avcintra_class;
> > -#else
> > -        av_log(avctx, AV_LOG_ERROR,
> > -               "x264 too old for AVC Intra, at least version 142 needed\n");
> > -#endif
> >  
> >      if (x4->avcintra_class > 200) {
> >  #if X264_BUILD < 164
> > @@ -1395,11 +1380,9 @@ FF_ENABLE_DEPRECATION_WARNINGS
> >          }
> >      }
> >  
> > -#if X264_BUILD >= 142
> >      /* Separate headers not supported in AVC-Intra mode */
> >      if (x4->avcintra_class >= 0)
> >          x4->params.b_repeat_headers = 1;
> > -#endif
> >  
> >      {
> >          AVDictionaryEntry *en = NULL;
> > @@ -1513,18 +1496,6 @@ static const enum AVPixelFormat pix_fmts_8bit_rgb[] = {
> >  };
> >  #endif
> >  
> > -#if X264_BUILD < 153
> > -static av_cold void X264_init_static(FFCodec *codec)
> > -{
> > -    if (x264_bit_depth == 8)
> > -        codec->p.pix_fmts = pix_fmts_8bit;
> > -    else if (x264_bit_depth == 9)
> > -        codec->p.pix_fmts = pix_fmts_9bit;
> > -    else if (x264_bit_depth == 10)
> > -        codec->p.pix_fmts = pix_fmts_10bit;
> > -}
> > -#endif
> > -
> >  #define OFFSET(x) offsetof(X264Context, x)
> >  #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
> >  static const AVOption options[] = {
> > @@ -1544,9 +1515,7 @@ static const AVOption options[] = {
> >      { "none",          NULL,                              0, AV_OPT_TYPE_CONST, {.i64 = X264_AQ_NONE},         INT_MIN, INT_MAX, VE, .unit = "aq_mode" },
> >      { "variance",      "Variance AQ (complexity mask)",   0, AV_OPT_TYPE_CONST, {.i64 = X264_AQ_VARIANCE},     INT_MIN, INT_MAX, VE, .unit = "aq_mode" },
> >      { "autovariance",  "Auto-variance AQ",                0, AV_OPT_TYPE_CONST, {.i64 = X264_AQ_AUTOVARIANCE}, INT_MIN, INT_MAX, VE, .unit = "aq_mode" },
> > -#if X264_BUILD >= 144
> >      { "autovariance-biased", "Auto-variance AQ with bias to dark scenes", 0, AV_OPT_TYPE_CONST, {.i64 = X264_AQ_AUTOVARIANCE_BIASED}, INT_MIN, INT_MAX, VE, .unit = "aq_mode" },
> > -#endif
> >      { "aq-strength",   "AQ strength. Reduces blocking and blurring in flat and textured areas.", OFFSET(aq_strength), AV_OPT_TYPE_FLOAT, {.dbl = -1}, -1, FLT_MAX, VE},
> >      { "psy",           "Use psychovisual optimizations.",                 OFFSET(psy),           AV_OPT_TYPE_BOOL,   { .i64 = -1 }, -1, 1, VE },
> >      { "psy-rd",        "Strength of psychovisual optimization, in <psy-rd>:<psy-trellis> format.", OFFSET(psy_rd), AV_OPT_TYPE_STRING,  {0 }, 0, 0, VE},
> > @@ -1644,10 +1613,7 @@ static const AVClass x264_class = {
> >      .version    = LIBAVUTIL_VERSION_INT,
> >  };
> >  
> > -#if X264_BUILD >= 153
> > -const
> > -#endif
> > -FFCodec ff_libx264_encoder = {
> > +const FFCodec ff_libx264_encoder = {
> >      .p.name           = "libx264",
> >      CODEC_LONG_NAME("libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10"),
> >      .p.type           = AVMEDIA_TYPE_VIDEO,
> > @@ -1665,11 +1631,7 @@ FFCodec ff_libx264_encoder = {
> >      .flush            = X264_flush,
> >      .close            = X264_close,
> >      .defaults         = x264_defaults,
> > -#if X264_BUILD < 153
> > -    .init_static_data = X264_init_static,
> > -#else
> >      .p.pix_fmts       = pix_fmts_all,
> > -#endif
> >      .caps_internal  = FF_CODEC_CAP_INIT_CLEANUP | FF_CODEC_CAP_AUTO_THREADS
> >  #if X264_BUILD < 158
> >                        | FF_CODEC_CAP_NOT_INIT_THREADSAFE
> > -- 
> > 2.44.0
> > 
> 
> Any further objection to this version of the patch? As discussed in the
> other thread, this still compiles out of the box on basically every
> distribution that still has general support.

Will merge soon if there is no reply.


More information about the ffmpeg-devel mailing list