[FFmpeg-devel] [PATCH v4 3/5] lavc: Remove libva 1.x support
Mark Thompson
sw at jkqxz.net
Sun May 5 22:01:45 EEST 2024
libva 2.0 was released in 2017 and the 2.x versions are included in all
supported distributions nowadays.
---
libavcodec/vaapi_decode.c | 39 ++---------------
libavcodec/vaapi_encode.c | 78 ++++++----------------------------
libavcodec/vaapi_encode.h | 9 ----
libavcodec/vaapi_encode_h264.c | 18 --------
libavcodec/vaapi_encode_h265.c | 2 -
5 files changed, 15 insertions(+), 131 deletions(-)
diff --git a/libavcodec/vaapi_decode.c b/libavcodec/vaapi_decode.c
index 21b273cd0f..ef1ea27a08 100644
--- a/libavcodec/vaapi_decode.c
+++ b/libavcodec/vaapi_decode.c
@@ -191,16 +191,10 @@ int ff_vaapi_decode_issue(AVCodecContext *avctx,
av_log(avctx, AV_LOG_ERROR, "Failed to end picture decode "
"issue: %d (%s).\n", vas, vaErrorStr(vas));
err = AVERROR(EIO);
- if (CONFIG_VAAPI_1 || ctx->hwctx->driver_quirks &
- AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS)
- goto fail;
- else
- goto fail_at_end;
+ goto fail;
}
- if (CONFIG_VAAPI_1 || ctx->hwctx->driver_quirks &
- AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS)
- ff_vaapi_decode_destroy_buffers(avctx, pic);
+ ff_vaapi_decode_destroy_buffers(avctx, pic);
err = 0;
goto exit;
@@ -213,7 +207,6 @@ fail_with_picture:
}
fail:
ff_vaapi_decode_destroy_buffers(avctx, pic);
-fail_at_end:
exit:
pic->nb_param_buffers = 0;
pic->nb_slices = 0;
@@ -406,12 +399,10 @@ static const struct {
H264ConstrainedBaseline),
MAP(H264, H264_MAIN, H264Main ),
MAP(H264, H264_HIGH, H264High ),
-#if VA_CHECK_VERSION(0, 37, 0)
MAP(HEVC, HEVC_MAIN, HEVCMain ),
MAP(HEVC, HEVC_MAIN_10, HEVCMain10 ),
MAP(HEVC, HEVC_MAIN_STILL_PICTURE,
HEVCMain ),
-#endif
#if VA_CHECK_VERSION(1, 2, 0) && CONFIG_HEVC_VAAPI_HWACCEL
MAP(HEVC, HEVC_REXT, None,
ff_vaapi_parse_hevc_rext_scc_profile ),
@@ -429,14 +420,10 @@ static const struct {
MAP(VC1, VC1_COMPLEX, VC1Advanced ),
MAP(VC1, VC1_ADVANCED, VC1Advanced ),
MAP(VP8, UNKNOWN, VP8Version0_3 ),
-#if VA_CHECK_VERSION(0, 38, 0)
MAP(VP9, VP9_0, VP9Profile0 ),
-#endif
-#if VA_CHECK_VERSION(0, 39, 0)
MAP(VP9, VP9_1, VP9Profile1 ),
MAP(VP9, VP9_2, VP9Profile2 ),
MAP(VP9, VP9_3, VP9Profile3 ),
-#endif
#if VA_CHECK_VERSION(1, 8, 0)
MAP(AV1, AV1_MAIN, AV1Profile0),
MAP(AV1, AV1_HIGH, AV1Profile1),
@@ -599,27 +586,7 @@ static int vaapi_decode_make_config(AVCodecContext *avctx,
if (err < 0)
goto fail;
- if (CONFIG_VAAPI_1)
- frames->initial_pool_size = 0;
- else {
- frames->initial_pool_size = 1;
- // Add per-codec number of surfaces used for storing reference frames.
- switch (avctx->codec_id) {
- case AV_CODEC_ID_H264:
- case AV_CODEC_ID_HEVC:
- case AV_CODEC_ID_AV1:
- frames->initial_pool_size += 16;
- break;
- case AV_CODEC_ID_VP9:
- frames->initial_pool_size += 8;
- break;
- case AV_CODEC_ID_VP8:
- frames->initial_pool_size += 3;
- break;
- default:
- frames->initial_pool_size += 2;
- }
- }
+ frames->initial_pool_size = 0;
}
av_hwframe_constraints_free(&constraints);
diff --git a/libavcodec/vaapi_encode.c b/libavcodec/vaapi_encode.c
index f54b2579ec..6f062e8277 100644
--- a/libavcodec/vaapi_encode.c
+++ b/libavcodec/vaapi_encode.c
@@ -530,7 +530,6 @@ static int vaapi_encode_issue(AVCodecContext *avctx,
}
}
-#if VA_CHECK_VERSION(1, 0, 0)
sd = av_frame_get_side_data(pic->input_image,
AV_FRAME_DATA_REGIONS_OF_INTEREST);
if (sd && ctx->roi_allowed) {
@@ -593,7 +592,6 @@ static int vaapi_encode_issue(AVCodecContext *avctx,
if (err < 0)
goto fail;
}
-#endif
vas = vaBeginPicture(ctx->hwctx->display, ctx->va_context,
pic->input_surface);
@@ -618,26 +616,17 @@ static int vaapi_encode_issue(AVCodecContext *avctx,
av_log(avctx, AV_LOG_ERROR, "Failed to end picture encode issue: "
"%d (%s).\n", vas, vaErrorStr(vas));
err = AVERROR(EIO);
- // vaRenderPicture() has been called here, so we should not destroy
- // the parameter buffers unless separate destruction is required.
- if (CONFIG_VAAPI_1 || ctx->hwctx->driver_quirks &
- AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS)
- goto fail;
- else
- goto fail_at_end;
- }
-
- if (CONFIG_VAAPI_1 || ctx->hwctx->driver_quirks &
- AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS) {
- for (i = 0; i < pic->nb_param_buffers; i++) {
- vas = vaDestroyBuffer(ctx->hwctx->display,
- pic->param_buffers[i]);
- if (vas != VA_STATUS_SUCCESS) {
- av_log(avctx, AV_LOG_ERROR, "Failed to destroy "
- "param buffer %#x: %d (%s).\n",
- pic->param_buffers[i], vas, vaErrorStr(vas));
- // And ignore.
- }
+ goto fail;
+ }
+
+ for (i = 0; i < pic->nb_param_buffers; i++) {
+ vas = vaDestroyBuffer(ctx->hwctx->display,
+ pic->param_buffers[i]);
+ if (vas != VA_STATUS_SUCCESS) {
+ av_log(avctx, AV_LOG_ERROR, "Failed to destroy "
+ "param buffer %#x: %d (%s).\n",
+ pic->param_buffers[i], vas, vaErrorStr(vas));
+ // And ignore.
}
}
@@ -654,7 +643,6 @@ fail:
for (i = 0; i < pic->nb_slices; i++)
av_freep(&pic->slices[i].codec_slice_params);
}
-fail_at_end:
av_freep(&pic->codec_picture_params);
av_freep(&pic->param_buffers);
av_freep(&pic->slices);
@@ -1530,25 +1518,19 @@ static const VAAPIEncodeRTFormat vaapi_encode_rt_formats[] = {
{ "YUV444", VA_RT_FORMAT_YUV444, 8, 3, 0, 0 },
{ "XYUV", VA_RT_FORMAT_YUV444, 8, 3, 0, 0 },
{ "YUV411", VA_RT_FORMAT_YUV411, 8, 3, 2, 0 },
-#if VA_CHECK_VERSION(0, 38, 1)
{ "YUV420_10", VA_RT_FORMAT_YUV420_10BPP, 10, 3, 1, 1 },
-#endif
};
static const VAEntrypoint vaapi_encode_entrypoints_normal[] = {
VAEntrypointEncSlice,
VAEntrypointEncPicture,
-#if VA_CHECK_VERSION(0, 39, 2)
VAEntrypointEncSliceLP,
-#endif
0
};
-#if VA_CHECK_VERSION(0, 39, 2)
static const VAEntrypoint vaapi_encode_entrypoints_low_power[] = {
VAEntrypointEncSliceLP,
0
};
-#endif
static av_cold int vaapi_encode_profile_entrypoint(AVCodecContext *avctx)
{
@@ -1566,13 +1548,7 @@ static av_cold int vaapi_encode_profile_entrypoint(AVCodecContext *avctx)
if (ctx->low_power) {
-#if VA_CHECK_VERSION(0, 39, 2)
usable_entrypoints = vaapi_encode_entrypoints_low_power;
-#else
- av_log(avctx, AV_LOG_ERROR, "Low-power encoding is not "
- "supported with this VAAPI version.\n");
- return AVERROR(EINVAL);
-#endif
} else {
usable_entrypoints = vaapi_encode_entrypoints_normal;
}
@@ -1623,11 +1599,7 @@ static av_cold int vaapi_encode_profile_entrypoint(AVCodecContext *avctx)
avctx->profile != AV_PROFILE_UNKNOWN)
continue;
-#if VA_CHECK_VERSION(1, 0, 0)
profile_string = vaProfileStr(profile->va_profile);
-#else
- profile_string = "(no profile names)";
-#endif
for (j = 0; j < n; j++) {
if (va_profiles[j] == profile->va_profile)
@@ -1686,11 +1658,7 @@ static av_cold int vaapi_encode_profile_entrypoint(AVCodecContext *avctx)
}
ctx->va_entrypoint = va_entrypoints[i];
-#if VA_CHECK_VERSION(1, 0, 0)
entrypoint_string = vaEntrypointStr(ctx->va_entrypoint);
-#else
- entrypoint_string = "(no entrypoint names)";
-#endif
av_log(avctx, AV_LOG_VERBOSE, "Using VAAPI entrypoint %s (%d).\n",
entrypoint_string, ctx->va_entrypoint);
@@ -1807,16 +1775,10 @@ static av_cold int vaapi_encode_init_rate_control(AVCodecContext *avctx)
supported_va_rc_modes = rc_attr.value;
if (ctx->blbrc) {
-#if VA_CHECK_VERSION(0, 39, 2)
if (!(supported_va_rc_modes & VA_RC_MB)) {
ctx->blbrc = 0;
av_log(avctx, AV_LOG_WARNING, "Driver does not support BLBRC.\n");
}
-#else
- ctx->blbrc = 0;
- av_log(avctx, AV_LOG_WARNING, "Please consider to update to VAAPI 0.39.2 "
- "or above, which can support BLBRC.\n");
-#endif
}
for (i = 0; i < FF_ARRAY_ELEMS(vaapi_encode_rc_modes); i++) {
@@ -2044,11 +2006,7 @@ rc_mode_found:
ctx->config_attributes[ctx->nb_config_attributes++] =
(VAConfigAttrib) {
.type = VAConfigAttribRateControl,
-#if VA_CHECK_VERSION(0, 39, 2)
.value = ctx->blbrc ? ctx->va_rc_mode | VA_RC_MB : ctx->va_rc_mode,
-#else
- .value = ctx->va_rc_mode,
-#endif
};
}
@@ -2081,9 +2039,7 @@ rc_mode_found:
#if VA_CHECK_VERSION(1, 3, 0)
.quality_factor = rc_quality,
#endif
-#if VA_CHECK_VERSION(0, 39, 2)
.rc_flags.bits.mb_rate_control = ctx->blbrc ? 1 : 2,
-#endif
};
vaapi_encode_add_global_param(avctx,
VAEncMiscParameterTypeRateControl,
@@ -2119,12 +2075,10 @@ rc_mode_found:
ctx->fr_params = (VAEncMiscParameterFrameRate) {
.framerate = (unsigned int)fr_den << 16 | fr_num,
};
-#if VA_CHECK_VERSION(0, 40, 0)
vaapi_encode_add_global_param(avctx,
VAEncMiscParameterTypeFrameRate,
&ctx->fr_params,
sizeof(ctx->fr_params));
-#endif
return 0;
}
@@ -2338,11 +2292,9 @@ static av_cold int vaapi_encode_init_row_slice_structure(AVCodecContext *avctx,
}
ctx->nb_slices = (ctx->slice_block_rows + k - 1) / k;
ctx->slice_size = k;
-#if VA_CHECK_VERSION(1, 0, 0)
} else if (slice_structure & VA_ENC_SLICE_STRUCTURE_EQUAL_ROWS) {
ctx->nb_slices = ctx->slice_block_rows;
ctx->slice_size = 1;
-#endif
} else {
av_log(avctx, AV_LOG_ERROR, "Driver does not support any usable "
"slice structure modes (%#x).\n", slice_structure);
@@ -2566,7 +2518,6 @@ static av_cold int vaapi_encode_init_packed_headers(AVCodecContext *avctx)
static av_cold int vaapi_encode_init_quality(AVCodecContext *avctx)
{
-#if VA_CHECK_VERSION(0, 36, 0)
VAAPIEncodeContext *ctx = avctx->priv_data;
VAStatus vas;
VAConfigAttrib attr = { VAConfigAttribEncQualityRange };
@@ -2603,17 +2554,12 @@ static av_cold int vaapi_encode_init_quality(AVCodecContext *avctx)
&ctx->quality_params,
sizeof(ctx->quality_params));
}
-#else
- av_log(avctx, AV_LOG_WARNING, "The encode quality option is "
- "not supported with this VAAPI version.\n");
-#endif
return 0;
}
static av_cold int vaapi_encode_init_roi(AVCodecContext *avctx)
{
-#if VA_CHECK_VERSION(1, 0, 0)
VAAPIEncodeContext *ctx = avctx->priv_data;
VAStatus vas;
VAConfigAttrib attr = { VAConfigAttribEncROI };
@@ -2640,7 +2586,7 @@ static av_cold int vaapi_encode_init_roi(AVCodecContext *avctx)
(ctx->va_rc_mode == VA_RC_CQP ||
roi.bits.roi_rc_qp_delta_support);
}
-#endif
+
return 0;
}
diff --git a/libavcodec/vaapi_encode.h b/libavcodec/vaapi_encode.h
index 0eed9691ca..43f3b8cf82 100644
--- a/libavcodec/vaapi_encode.h
+++ b/libavcodec/vaapi_encode.h
@@ -22,10 +22,7 @@
#include <stdint.h>
#include <va/va.h>
-
-#if VA_CHECK_VERSION(1, 0, 0)
#include <va/va_str.h>
-#endif
#include "libavutil/hwcontext.h"
#include "libavutil/hwcontext_vaapi.h"
@@ -82,12 +79,8 @@ typedef struct VAAPIEncodePicture {
void *opaque;
AVBufferRef *opaque_ref;
-#if VA_CHECK_VERSION(1, 0, 0)
// ROI regions.
VAEncROI *roi;
-#else
- void *roi;
-#endif
int type;
int b_depth;
@@ -293,9 +286,7 @@ typedef struct VAAPIEncodeContext {
VAEncMiscParameterHRD hrd_params;
VAEncMiscParameterFrameRate fr_params;
VAEncMiscParameterBufferMaxFrameSize mfs_params;
-#if VA_CHECK_VERSION(0, 36, 0)
VAEncMiscParameterBufferQualityLevel quality_params;
-#endif
// Per-sequence parameter structure (VAEncSequenceParameterBuffer*).
void *codec_sequence_params;
diff --git a/libavcodec/vaapi_encode_h264.c b/libavcodec/vaapi_encode_h264.c
index d656b1020f..bb4c250bb4 100644
--- a/libavcodec/vaapi_encode_h264.c
+++ b/libavcodec/vaapi_encode_h264.c
@@ -106,7 +106,6 @@ typedef struct VAAPIEncodeH264Context {
int aud_needed;
int sei_needed;
- int sei_cbr_workaround_needed;
} VAAPIEncodeH264Context;
@@ -271,19 +270,6 @@ static int vaapi_encode_h264_write_extra_header(AVCodecContext *avctx,
*type = VAEncPackedHeaderRawData;
return 0;
-
-#if !CONFIG_VAAPI_1
- } else if (priv->sei_cbr_workaround_needed) {
- // Insert a zero-length header using the old SEI type. This is
- // required to avoid triggering broken behaviour on Intel platforms
- // in CBR mode where an invalid SEI message is generated by the
- // driver and inserted into the stream.
- *data_len = 0;
- *type = VAEncPackedHeaderH264_SEI;
- priv->sei_cbr_workaround_needed = 0;
- return 0;
-#endif
-
} else {
return AVERROR_EOF;
}
@@ -681,10 +667,6 @@ static int vaapi_encode_h264_init_picture_params(AVCodecContext *avctx,
if (priv->sei & SEI_IDENTIFIER && pic->encode_order == 0)
priv->sei_needed |= SEI_IDENTIFIER;
-#if !CONFIG_VAAPI_1
- if (ctx->va_rc_mode == VA_RC_CBR)
- priv->sei_cbr_workaround_needed = 1;
-#endif
if (priv->sei & SEI_TIMING) {
priv->sei_pic_timing = (H264RawSEIPicTiming) {
diff --git a/libavcodec/vaapi_encode_h265.c b/libavcodec/vaapi_encode_h265.c
index 2f59161346..a85b514715 100644
--- a/libavcodec/vaapi_encode_h265.c
+++ b/libavcodec/vaapi_encode_h265.c
@@ -1302,10 +1302,8 @@ static av_cold int vaapi_encode_h265_configure(AVCodecContext *avctx)
static const VAAPIEncodeProfile vaapi_encode_h265_profiles[] = {
{ AV_PROFILE_HEVC_MAIN, 8, 3, 1, 1, VAProfileHEVCMain },
{ AV_PROFILE_HEVC_REXT, 8, 3, 1, 1, VAProfileHEVCMain },
-#if VA_CHECK_VERSION(0, 37, 0)
{ AV_PROFILE_HEVC_MAIN_10, 10, 3, 1, 1, VAProfileHEVCMain10 },
{ AV_PROFILE_HEVC_REXT, 10, 3, 1, 1, VAProfileHEVCMain10 },
-#endif
#if VA_CHECK_VERSION(1, 2, 0)
{ AV_PROFILE_HEVC_REXT, 12, 3, 1, 1, VAProfileHEVCMain12 },
{ AV_PROFILE_HEVC_REXT, 8, 3, 1, 0, VAProfileHEVCMain422_10 },
--
2.43.0
More information about the ffmpeg-devel
mailing list