avcodec/libx264: bump minimum required version to 155

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.
This commit is contained in:
Niklas Haas 2024-04-09 15:09:40 +02:00
parent 476688095f
commit 71669f2ad5
2 changed files with 8 additions and 46 deletions

2
configure vendored
View File

@ -7015,7 +7015,7 @@ enabled libwebp && {
enabled libwebp_encoder && require_pkg_config libwebp "libwebp >= 0.2.0" webp/encode.h WebPGetEncoderVersion 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 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 && 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" ] || [ "$toolchain" != "msvc" ] ||
require_cpp_condition libx264 x264.h "X264_BUILD >= 158"; } && require_cpp_condition libx264 x264.h "X264_BUILD >= 158"; } &&
check_cpp_condition libx264_hdr10 x264.h "X264_BUILD >= 163" && check_cpp_condition libx264_hdr10 x264.h "X264_BUILD >= 163" &&

View File

@ -270,11 +270,9 @@ static void reconfig_encoder(AVCodecContext *ctx, const AVFrame *frame)
case AV_STEREO3D_FRAMESEQUENCE: case AV_STEREO3D_FRAMESEQUENCE:
fpa_type = 5; fpa_type = 5;
break; break;
#if X264_BUILD >= 145
case AV_STEREO3D_2D: case AV_STEREO3D_2D:
fpa_type = 6; fpa_type = 6;
break; break;
#endif
default: default:
fpa_type = -1; fpa_type = -1;
break; break;
@ -394,14 +392,14 @@ static int setup_mb_info(AVCodecContext *ctx, x264_picture_t *pic,
return 0; 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) const AVFrame *frame, const uint8_t *data, size_t size)
{ {
X264Context *x4 = ctx->priv_data; X264Context *x4 = ctx->priv_data;
int mbx = (frame->width + MB_SIZE - 1) / MB_SIZE; int mbx = (frame->width + MB_SIZE - 1) / MB_SIZE;
int mby = (frame->height + 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; int nb_rois;
const AVRegionOfInterest *roi; const AVRegionOfInterest *roi;
uint32_t roi_size; uint32_t roi_size;
@ -476,7 +474,7 @@ static int setup_frame(AVCodecContext *ctx, const AVFrame *frame,
x264_sei_t *sei = &pic->extra_sei; x264_sei_t *sei = &pic->extra_sei;
unsigned int sei_data_size = 0; unsigned int sei_data_size = 0;
int64_t wallclock = 0; int64_t wallclock = 0;
int bit_depth, ret; int ret;
AVFrameSideData *sd; AVFrameSideData *sd;
AVFrameSideData *mbinfo_sd; AVFrameSideData *mbinfo_sd;
@ -486,12 +484,7 @@ static int setup_frame(AVCodecContext *ctx, const AVFrame *frame,
x264_picture_init(pic); x264_picture_init(pic);
pic->img.i_csp = x4->params.i_csp; pic->img.i_csp = x4->params.i_csp;
#if X264_BUILD >= 153 if (x4->params.i_bitdepth > 8)
bit_depth = x4->params.i_bitdepth;
#else
bit_depth = x264_bit_depth;
#endif
if (bit_depth > 8)
pic->img.i_csp |= X264_CSP_HIGH_DEPTH; pic->img.i_csp |= X264_CSP_HIGH_DEPTH;
pic->img.i_plane = av_pix_fmt_count_planes(ctx->pix_fmt); 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); sd = av_frame_get_side_data(frame, AV_FRAME_DATA_REGIONS_OF_INTEREST);
if (sd) { 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) if (ret < 0)
goto fail; goto fail;
} }
@ -1109,9 +1102,7 @@ static av_cold int X264_init(AVCodecContext *avctx)
x4->params.p_log_private = avctx; x4->params.p_log_private = avctx;
x4->params.i_log_level = X264_LOG_DEBUG; x4->params.i_log_level = X264_LOG_DEBUG;
x4->params.i_csp = convert_pix_fmt(avctx->pix_fmt); 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; x4->params.i_bitdepth = av_pix_fmt_desc_get(avctx->pix_fmt)->comp[0].depth;
#endif
PARSE_X264_OPT("weightp", wpredp); 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) { else if (x4->params.i_level_idc > 0) {
int i; int i;
int mbn = AV_CEIL_RSHIFT(avctx->width, 4) * AV_CEIL_RSHIFT(avctx->height, 4); 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++) for (i = 0; i<x264_levels[i].level_idc; i++)
if (x264_levels[i].level_idc == x4->params.i_level_idc) 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) if (avctx->trellis >= 0)
@ -1228,12 +1218,7 @@ static av_cold int X264_init(AVCodecContext *avctx)
x4->params.b_vfr_input = 0; x4->params.b_vfr_input = 0;
} }
if (x4->avcintra_class >= 0) if (x4->avcintra_class >= 0)
#if X264_BUILD >= 142
x4->params.i_avcintra_class = x4->avcintra_class; 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 (x4->avcintra_class > 200) {
#if X264_BUILD < 164 #if X264_BUILD < 164
@ -1395,11 +1380,9 @@ FF_ENABLE_DEPRECATION_WARNINGS
} }
} }
#if X264_BUILD >= 142
/* Separate headers not supported in AVC-Intra mode */ /* Separate headers not supported in AVC-Intra mode */
if (x4->avcintra_class >= 0) if (x4->avcintra_class >= 0)
x4->params.b_repeat_headers = 1; x4->params.b_repeat_headers = 1;
#endif
{ {
AVDictionaryEntry *en = NULL; AVDictionaryEntry *en = NULL;
@ -1513,18 +1496,6 @@ static const enum AVPixelFormat pix_fmts_8bit_rgb[] = {
}; };
#endif #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 OFFSET(x) offsetof(X264Context, x)
#define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
static const AVOption options[] = { 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" }, { "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" }, { "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" }, { "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" }, { "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}, { "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", "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}, { "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, .version = LIBAVUTIL_VERSION_INT,
}; };
#if X264_BUILD >= 153 const FFCodec ff_libx264_encoder = {
const
#endif
FFCodec ff_libx264_encoder = {
.p.name = "libx264", .p.name = "libx264",
CODEC_LONG_NAME("libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10"), CODEC_LONG_NAME("libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10"),
.p.type = AVMEDIA_TYPE_VIDEO, .p.type = AVMEDIA_TYPE_VIDEO,
@ -1665,11 +1631,7 @@ FFCodec ff_libx264_encoder = {
.flush = X264_flush, .flush = X264_flush,
.close = X264_close, .close = X264_close,
.defaults = x264_defaults, .defaults = x264_defaults,
#if X264_BUILD < 153
.init_static_data = X264_init_static,
#else
.p.pix_fmts = pix_fmts_all, .p.pix_fmts = pix_fmts_all,
#endif
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP | FF_CODEC_CAP_AUTO_THREADS .caps_internal = FF_CODEC_CAP_INIT_CLEANUP | FF_CODEC_CAP_AUTO_THREADS
#if X264_BUILD < 158 #if X264_BUILD < 158
| FF_CODEC_CAP_NOT_INIT_THREADSAFE | FF_CODEC_CAP_NOT_INIT_THREADSAFE