Bump required x264 version, because X264_WEIGHTP_BLIND was renamed to
X264_WEIGHTP_SIMPLE in version 110.
---
Sorry for the noise, forgot to commit some hunks in the first patch.
---
 configure            |    4 +-
 libavcodec/avcodec.h |   16 ++++++-----
 libavcodec/libx264.c |   69 ++++++++++++++++++++++++++++++++++++++++++++-----
 libavcodec/options.c |   20 +++++++++-----
 libavcodec/version.h |    3 ++
 5 files changed, 89 insertions(+), 23 deletions(-)

diff --git a/configure b/configure
index dbcada5..3f00c94 100755
--- a/configure
+++ b/configure
@@ -2871,8 +2871,8 @@ enabled libvpx     && {
     enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" 
vpx_codec_enc_init_ver -lvpx ||
                                 die "ERROR: libvpx encoder version must be 
>=0.9.1"; } }
 enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
-                      { check_cpp_condition x264.h "X264_BUILD >= 99" ||
-                        die "ERROR: libx264 version must be >= 0.99."; }
+                      { check_cpp_condition x264.h "X264_BUILD >= 110" ||
+                        die "ERROR: libx264 version must be >= 0.110."; }
 enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
 enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod 
-lmlib
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index 1f32592..d0713c5 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -2740,6 +2740,7 @@ typedef struct AVCodecContext {
      */
     int (*execute2)(struct AVCodecContext *c, int (*func)(struct 
AVCodecContext *c2, void *arg, int jobnr, int threadnr), void *arg2, int *ret, 
int count);
 
+#if FF_API_X264_GLOBAL_OPTS
     /**
      * explicit P-frame weighted prediction analysis method
      * 0: off
@@ -2748,7 +2749,7 @@ typedef struct AVCodecContext {
      * - encoding: Set by user.
      * - decoding: unused
      */
-    int weighted_p_pred;
+    attribute_deprecated int weighted_p_pred;
 
     /**
      * AQ mode
@@ -2758,7 +2759,7 @@ typedef struct AVCodecContext {
      * - encoding: Set by user
      * - decoding: unused
      */
-    int aq_mode;
+    attribute_deprecated int aq_mode;
 
     /**
      * AQ strength
@@ -2766,7 +2767,7 @@ typedef struct AVCodecContext {
      * - encoding: Set by user
      * - decoding: unused
      */
-    float aq_strength;
+    attribute_deprecated float aq_strength;
 
     /**
      * PSY RD
@@ -2774,7 +2775,7 @@ typedef struct AVCodecContext {
      * - encoding: Set by user
      * - decoding: unused
      */
-    float psy_rd;
+    attribute_deprecated float psy_rd;
 
     /**
      * PSY trellis
@@ -2782,7 +2783,7 @@ typedef struct AVCodecContext {
      * - encoding: Set by user
      * - decoding: unused
      */
-    float psy_trellis;
+    attribute_deprecated float psy_trellis;
 
     /**
      * RC lookahead
@@ -2790,7 +2791,7 @@ typedef struct AVCodecContext {
      * - encoding: Set by user
      * - decoding: unused
      */
-    int rc_lookahead;
+    attribute_deprecated int rc_lookahead;
 
     /**
      * Constant rate factor maximum
@@ -2799,7 +2800,8 @@ typedef struct AVCodecContext {
      * - encoding: Set by user.
      * - decoding: unused
      */
-    float crf_max;
+    attribute_deprecated float crf_max;
+#endif
 
     int log_level_offset;
 
diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c
index 5825945..30c1974 100644
--- a/libavcodec/libx264.c
+++ b/libavcodec/libx264.c
@@ -20,13 +20,16 @@
  */
 
 #include "avcodec.h"
+#include "libavutil/opt.h"
 #include <x264.h>
 #include <math.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <float.h>
 
 typedef struct X264Context {
+    AVClass        *class;
     x264_param_t    params;
     x264_t         *enc;
     x264_picture_t  pic;
@@ -178,7 +181,10 @@ static av_cold int X264_init(AVCodecContext *avctx)
         if (avctx->crf) {
             x4->params.rc.i_rc_method   = X264_RC_CRF;
             x4->params.rc.f_rf_constant = avctx->crf;
-            x4->params.rc.f_rf_constant_max = avctx->crf_max;
+#if FF_API_X264_GLOBAL_OPTS
+            if (avctx->crf_max >= 0)
+                x4->params.rc.f_rf_constant_max = avctx->crf_max;
+#endif
         } else if (avctx->cqp > -1) {
             x4->params.rc.i_rc_method   = X264_RC_CQP;
             x4->params.rc.i_qp_constant = avctx->cqp;
@@ -241,7 +247,10 @@ static av_cold int X264_init(AVCodecContext *avctx)
     x4->params.analyse.i_direct_mv_pred  = avctx->directpred;
 
     x4->params.analyse.b_weighted_bipred = avctx->flags2 & CODEC_FLAG2_WPRED;
-    x4->params.analyse.i_weighted_pred = avctx->weighted_p_pred;
+#if FF_API_X264_GLOBAL_OPTS
+    if (avctx->weighted_p_pred)
+        x4->params.analyse.i_weighted_pred = avctx->weighted_p_pred;
+#endif
 
     if (avctx->me_method == ME_EPZS)
         x4->params.analyse.i_me_method = X264_ME_DIA;
@@ -255,13 +264,22 @@ static av_cold int X264_init(AVCodecContext *avctx)
         x4->params.analyse.i_me_method = X264_ME_TESA;
     else x4->params.analyse.i_me_method = X264_ME_HEX;
 
-    x4->params.rc.i_aq_mode               = avctx->aq_mode;
-    x4->params.rc.f_aq_strength           = avctx->aq_strength;
-    x4->params.rc.i_lookahead             = avctx->rc_lookahead;
+#if FF_API_X264_GLOBAL_OPTS
+    if (avctx->aq_mode != 1)
+        x4->params.rc.i_aq_mode               = avctx->aq_mode;
+    if (avctx->aq_strength >= 0)
+        x4->params.rc.f_aq_strength           = avctx->aq_strength;
+    if (avctx->rc_lookahead != 40)
+        x4->params.rc.i_lookahead             = avctx->rc_lookahead;
+#endif
 
     x4->params.analyse.b_psy              = avctx->flags2 & CODEC_FLAG2_PSY;
-    x4->params.analyse.f_psy_rd           = avctx->psy_rd;
-    x4->params.analyse.f_psy_trellis      = avctx->psy_trellis;
+#if FF_API_X264_GLOBAL_OPTS
+    if (avctx->psy_rd >= 0)
+        x4->params.analyse.f_psy_rd           = avctx->psy_rd;
+    if (avctx->psy_trellis >= 0)
+        x4->params.analyse.f_psy_trellis      = avctx->psy_trellis;
+#endif
 
     x4->params.analyse.i_me_range         = avctx->me_range;
     x4->params.analyse.i_subpel_refine    = avctx->me_subpel_quality;
@@ -328,6 +346,42 @@ static av_cold int X264_init(AVCodecContext *avctx)
     return 0;
 }
 
+#define FLAGS AV_OPT_FLAG_ENCODING_PARAM | AV_OPT_FLAG_VIDEO_PARAM
+static const AVOption options[] = {
+    { "aq_mode", "AQ method", offsetof(X264Context, params.rc.i_aq_mode),
+      FF_OPT_TYPE_INT, X264_AQ_VARIANCE, 0, INT_MAX , FLAGS, "aq_mode"},
+    { "none", NULL, 0, FF_OPT_TYPE_CONST, X264_AQ_NONE, INT_MIN, INT_MAX, 
FLAGS, "aq_mode" },
+    { "variance", "Variance AQ (complexity mask)", 0, FF_OPT_TYPE_CONST,
+      X264_AQ_VARIANCE, INT_MIN, INT_MAX, FLAGS, "aq_mode" },
+    { "autovariance", "Auto-variance AQ (experimental)", 0, FF_OPT_TYPE_CONST,
+      X264_AQ_AUTOVARIANCE, INT_MIN, INT_MAX, FLAGS, "aq_mode" },
+    { "aq_strength", "AQ strength. Reduces blocking and blurring in flat and 
textured areas.",
+      offsetof(X264Context, params.rc.f_aq_strength), FF_OPT_TYPE_FLOAT, 1.0, 
0, FLT_MAX, FLAGS },
+    { "crf_max", "In CRF mode, prevents VBV from lowering quality beyond this 
point.",
+       offsetof(X264Context, params.rc.f_rf_constant_max),
+       FF_OPT_TYPE_FLOAT, 0, 0, 51, FLAGS },
+    { "psy_rd", "Psy RD strength", offsetof(X264Context, params.analyse.b_psy),
+      FF_OPT_TYPE_FLOAT, 1.0, 0, FLT_MAX, FLAGS },
+    { "psy_trellis", "Psy trellis strength", offsetof(X264Context, 
params.analyse.f_psy_trellis),
+      FF_OPT_TYPE_FLOAT, 0, 0, FLT_MAX, FLAGS },
+    { "rc_lookahead", "Number of frames to look ahead for frametype and 
ratecontrol",
+      offsetof(X264Context, params.rc.i_lookahead), FF_OPT_TYPE_INT, 40, 0, 
INT_MAX, FLAGS },
+    { "wpredp", "Weighted prediction analysis method",
+      offsetof(X264Context, params.analyse.i_weighted_pred),
+      FF_OPT_TYPE_INT, 0, 0, INT_MAX, FLAGS, "wpredp" },
+    { "none",   NULL, 0, FF_OPT_TYPE_CONST, X264_WEIGHTP_NONE,   INT_MIN, 
INT_MAX, FLAGS, "wpredp" },
+    { "simple", NULL, 0, FF_OPT_TYPE_CONST, X264_WEIGHTP_SIMPLE, INT_MIN, 
INT_MAX, FLAGS, "wpredp" },
+    { "smart",  NULL, 0, FF_OPT_TYPE_CONST, X264_WEIGHTP_SMART,  INT_MIN, 
INT_MAX, FLAGS, "wpredp" },
+    { NULL },
+};
+
+static const AVClass libx264_class = {
+    "libx264",
+    av_default_item_name,
+    options,
+    LIBAVUTIL_VERSION_INT,
+};
+
 AVCodec ff_libx264_encoder = {
     .name           = "libx264",
     .type           = AVMEDIA_TYPE_VIDEO,
@@ -339,4 +393,5 @@ AVCodec ff_libx264_encoder = {
     .capabilities   = CODEC_CAP_DELAY,
     .pix_fmts       = (const enum PixelFormat[]) { PIX_FMT_YUV420P, 
PIX_FMT_YUVJ420P, PIX_FMT_NONE },
     .long_name      = NULL_IF_CONFIG_SMALL("libx264 H.264 / AVC / MPEG-4 AVC / 
MPEG-4 part 10"),
+    .priv_class     = &libx264_class,
 };
diff --git a/libavcodec/options.c b/libavcodec/options.c
index ae8abb2..dc6c032 100644
--- a/libavcodec/options.c
+++ b/libavcodec/options.c
@@ -126,7 +126,9 @@ static const AVOption options[]={
 {"b_qfactor", "qp factor between p and b frames", OFFSET(b_quant_factor), 
FF_OPT_TYPE_FLOAT, 1.25, -FLT_MAX, FLT_MAX, V|E},
 {"rc_strategy", "ratecontrol method", OFFSET(rc_strategy), FF_OPT_TYPE_INT, 
DEFAULT, INT_MIN, INT_MAX, V|E},
 {"b_strategy", "strategy to choose between I/P/B-frames", 
OFFSET(b_frame_strategy), FF_OPT_TYPE_INT, 0, INT_MIN, INT_MAX, V|E},
-{"wpredp", "weighted prediction analysis method", OFFSET(weighted_p_pred), 
FF_OPT_TYPE_INT, 0, INT_MIN, INT_MAX, V|E},
+#if FF_API_X264_GLOBAL_OPTS
+{"wpredp", "deprecated, use x264-specific options", OFFSET(weighted_p_pred), 
FF_OPT_TYPE_INT, 0, INT_MIN, INT_MAX, V|E},
+#endif
 #if FF_API_HURRY_UP
 {"hurry_up", "deprecated, use skip_idct/skip_frame instead", OFFSET(hurry_up), 
FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|D},
 #endif
@@ -424,14 +426,18 @@ static const AVOption options[]={
 {"color_range", NULL, OFFSET(color_range), FF_OPT_TYPE_INT, 
AVCOL_RANGE_UNSPECIFIED, 0, AVCOL_RANGE_NB-1, V|E|D},
 {"chroma_sample_location", NULL, OFFSET(chroma_sample_location), 
FF_OPT_TYPE_INT, AVCHROMA_LOC_UNSPECIFIED, 0, AVCHROMA_LOC_NB-1, V|E|D},
 {"psy", "use psycho visual optimization", 0, FF_OPT_TYPE_CONST, 
CODEC_FLAG2_PSY, INT_MIN, INT_MAX, V|E, "flags2"},
-{"psy_rd", "specify psycho visual strength", OFFSET(psy_rd), 
FF_OPT_TYPE_FLOAT, 1.0, 0, FLT_MAX, V|E},
-{"psy_trellis", "specify psycho visual trellis", OFFSET(psy_trellis), 
FF_OPT_TYPE_FLOAT, 0, 0, FLT_MAX, V|E},
-{"aq_mode", "specify aq method", OFFSET(aq_mode), FF_OPT_TYPE_INT, 1, 0, 
INT_MAX, V|E},
-{"aq_strength", "specify aq strength", OFFSET(aq_strength), FF_OPT_TYPE_FLOAT, 
1.0, 0, FLT_MAX, V|E},
-{"rc_lookahead", "specify number of frames to look ahead for frametype", 
OFFSET(rc_lookahead), FF_OPT_TYPE_INT, 40, 0, INT_MAX, V|E},
+#if FF_API_X264_GLOBAL_OPTS
+{"psy_rd", "deprecated, use x264-specific options", OFFSET(psy_rd), 
FF_OPT_TYPE_FLOAT, -1.0, -1.0, FLT_MAX, V|E},
+{"psy_trellis", "deprecated, use x264-specific options", OFFSET(psy_trellis), 
FF_OPT_TYPE_FLOAT, -1.0, -1.0, FLT_MAX, V|E},
+{"aq_mode", "deprecated, use x264-specific options", OFFSET(aq_mode), 
FF_OPT_TYPE_INT, 1, 0, INT_MAX, V|E},
+{"aq_strength", "deprecated, use x264-specific options", OFFSET(aq_strength), 
FF_OPT_TYPE_FLOAT, -1.0, -1.0, FLT_MAX, V|E},
+{"rc_lookahead", "deprecated, use x264-specific options", 
OFFSET(rc_lookahead), FF_OPT_TYPE_INT, 40, 0, INT_MAX, V|E},
+#endif
 {"ssim", "ssim will be calculated during encoding", 0, FF_OPT_TYPE_CONST, 
CODEC_FLAG2_SSIM, INT_MIN, INT_MAX, V|E, "flags2"},
 {"intra_refresh", "use periodic insertion of intra blocks instead of 
keyframes", 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_INTRA_REFRESH, INT_MIN, INT_MAX, 
V|E, "flags2"},
-{"crf_max", "in crf mode, prevents vbv from lowering quality beyond this 
point", OFFSET(crf_max), FF_OPT_TYPE_FLOAT, DEFAULT, 0, 51, V|E},
+#if FF_API_X264_GLOBAL_OPTS
+{"crf_max", "deprecated, use x264-specific options", OFFSET(crf_max), 
FF_OPT_TYPE_FLOAT, -1.0, -1.0, 51, V|E},
+#endif
 {"log_level_offset", "set the log level offset", OFFSET(log_level_offset), 
FF_OPT_TYPE_INT, 0, INT_MIN, INT_MAX },
 {"lpc_type", "specify LPC algorithm", OFFSET(lpc_type), FF_OPT_TYPE_INT, 
AV_LPC_TYPE_DEFAULT, AV_LPC_TYPE_DEFAULT, AV_LPC_TYPE_NB-1, A|E},
 {"none",     NULL, 0, FF_OPT_TYPE_CONST, AV_LPC_TYPE_NONE,     INT_MIN, 
INT_MAX, A|E, "lpc_type"},
diff --git a/libavcodec/version.h b/libavcodec/version.h
index ec3045f..6f61fa5 100644
--- a/libavcodec/version.h
+++ b/libavcodec/version.h
@@ -86,5 +86,8 @@
 #ifndef FF_API_ANTIALIAS_ALGO
 #define FF_API_ANTIALIAS_ALGO   (LIBAVCODEC_VERSION_MAJOR < 54)
 #endif
+#ifndef FF_API_X264_GLOBAL_OPTS
+#define FF_API_X264_GLOBAL_OPTS (LIBAVCODEC_VERSION_MAJOR < 54)
+#endif
 
 #endif /* AVCODEC_VERSION_H */
-- 
1.7.4.1

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to