* [FFmpeg-devel] [PATCH v4 3/5] lavc: Remove libva 1.x support
2024-05-05 19:01 [FFmpeg-devel] [PATCH v4 1/5] configure: Remove libva 1.x support Mark Thompson
2024-05-05 19:01 ` [FFmpeg-devel] [PATCH v4 2/5] lavfi: " Mark Thompson
@ 2024-05-05 19:01 ` Mark Thompson
2024-05-05 19:01 ` [FFmpeg-devel] [PATCH v4 4/5] lavu: " Mark Thompson
` (2 subsequent siblings)
4 siblings, 0 replies; 8+ messages in thread
From: Mark Thompson @ 2024-05-05 19:01 UTC (permalink / raw)
To: ffmpeg-devel
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
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 8+ messages in thread
* [FFmpeg-devel] [PATCH v4 4/5] lavu: Remove libva 1.x support
2024-05-05 19:01 [FFmpeg-devel] [PATCH v4 1/5] configure: Remove libva 1.x support Mark Thompson
2024-05-05 19:01 ` [FFmpeg-devel] [PATCH v4 2/5] lavfi: " Mark Thompson
2024-05-05 19:01 ` [FFmpeg-devel] [PATCH v4 3/5] lavc: " Mark Thompson
@ 2024-05-05 19:01 ` Mark Thompson
2024-05-05 19:01 ` [FFmpeg-devel] [PATCH v4 5/5] hwcontext_vaapi: Deprecate quirks Mark Thompson
2024-05-07 5:27 ` [FFmpeg-devel] [PATCH v4 1/5] configure: Remove libva 1.x support Xiang, Haihao
4 siblings, 0 replies; 8+ messages in thread
From: Mark Thompson @ 2024-05-05 19:01 UTC (permalink / raw)
To: ffmpeg-devel
libva 2.0 was released in 2017 and the 2.x versions are included in all
supported distributions nowadays.
---
libavutil/hwcontext_vaapi.c | 22 ----------------------
1 file changed, 22 deletions(-)
diff --git a/libavutil/hwcontext_vaapi.c b/libavutil/hwcontext_vaapi.c
index 4cb25dd032..caff43d1ae 100644
--- a/libavutil/hwcontext_vaapi.c
+++ b/libavutil/hwcontext_vaapi.c
@@ -372,14 +372,6 @@ static const struct {
const char *match_string;
unsigned int quirks;
} vaapi_driver_quirks_table[] = {
-#if !VA_CHECK_VERSION(1, 0, 0)
- // The i965 driver did not conform before version 2.0.
- {
- "Intel i965 (Quick Sync)",
- "i965",
- AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS,
- },
-#endif
{
"Intel iHD",
"ubit",
@@ -1425,7 +1417,6 @@ fail:
}
#endif
-#if VA_CHECK_VERSION(0, 36, 0)
typedef struct VAAPIDRMImageBufferMapping {
VAImage image;
VABufferInfo buffer_info;
@@ -1585,7 +1576,6 @@ fail:
av_freep(&mapping);
return err;
}
-#endif
static int vaapi_map_to_drm(AVHWFramesContext *hwfc, AVFrame *dst,
const AVFrame *src, int flags)
@@ -1596,10 +1586,7 @@ static int vaapi_map_to_drm(AVHWFramesContext *hwfc, AVFrame *dst,
if (err != AVERROR(ENOSYS))
return err;
#endif
-#if VA_CHECK_VERSION(0, 36, 0)
return vaapi_map_to_drm_abh(hwfc, dst, src, flags);
-#endif
- return AVERROR(ENOSYS);
}
#endif /* CONFIG_LIBDRM */
@@ -1649,7 +1636,6 @@ static void vaapi_device_free(AVHWDeviceContext *ctx)
av_freep(&priv);
}
-#if CONFIG_VAAPI_1
static void vaapi_device_log_error(void *context, const char *message)
{
AVHWDeviceContext *ctx = context;
@@ -1663,7 +1649,6 @@ static void vaapi_device_log_info(void *context, const char *message)
av_log(ctx, AV_LOG_VERBOSE, "libva: %s", message);
}
-#endif
static int vaapi_device_connect(AVHWDeviceContext *ctx,
VADisplay display)
@@ -1672,10 +1657,8 @@ static int vaapi_device_connect(AVHWDeviceContext *ctx,
int major, minor;
VAStatus vas;
-#if CONFIG_VAAPI_1
vaSetErrorCallback(display, &vaapi_device_log_error, ctx);
vaSetInfoCallback (display, &vaapi_device_log_info, ctx);
-#endif
hwctx->display = display;
@@ -1919,7 +1902,6 @@ static int vaapi_device_create(AVHWDeviceContext *ctx, const char *device,
ent = av_dict_get(opts, "driver", NULL, 0);
if (ent) {
-#if VA_CHECK_VERSION(0, 38, 0)
VAStatus vas;
vas = vaSetDriverName(display, ent->value);
if (vas != VA_STATUS_SUCCESS) {
@@ -1928,10 +1910,6 @@ static int vaapi_device_create(AVHWDeviceContext *ctx, const char *device,
vaTerminate(display);
return AVERROR_EXTERNAL;
}
-#else
- av_log(ctx, AV_LOG_WARNING, "Driver name setting is not "
- "supported with this VAAPI version.\n");
-#endif
}
return vaapi_device_connect(ctx, display);
--
2.43.0
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 8+ messages in thread
* [FFmpeg-devel] [PATCH v4 5/5] hwcontext_vaapi: Deprecate quirks
2024-05-05 19:01 [FFmpeg-devel] [PATCH v4 1/5] configure: Remove libva 1.x support Mark Thompson
` (2 preceding siblings ...)
2024-05-05 19:01 ` [FFmpeg-devel] [PATCH v4 4/5] lavu: " Mark Thompson
@ 2024-05-05 19:01 ` Mark Thompson
2024-05-07 5:27 ` [FFmpeg-devel] [PATCH v4 1/5] configure: Remove libva 1.x support Xiang, Haihao
4 siblings, 0 replies; 8+ messages in thread
From: Mark Thompson @ 2024-05-05 19:01 UTC (permalink / raw)
To: ffmpeg-devel
These only apply to obsolete drivers which do not work with the
now-required libva 2.x.
---
libavutil/hwcontext_vaapi.c | 123 ++++++++++--------------------------
libavutil/hwcontext_vaapi.h | 15 +++++
2 files changed, 50 insertions(+), 88 deletions(-)
diff --git a/libavutil/hwcontext_vaapi.c b/libavutil/hwcontext_vaapi.c
index caff43d1ae..8591fb88ac 100644
--- a/libavutil/hwcontext_vaapi.c
+++ b/libavutil/hwcontext_vaapi.c
@@ -243,8 +243,7 @@ static int vaapi_frames_get_constraints(AVHWDeviceContext *hwdev,
unsigned int fourcc;
int err, i, j, attr_count, pix_fmt_count;
- if (config &&
- !(hwctx->driver_quirks & AV_VAAPI_DRIVER_QUIRK_SURFACE_ATTRIBUTES)) {
+ if (config) {
attr_count = 0;
vas = vaQuerySurfaceAttributes(hwctx->display, config->config_id,
0, &attr_count);
@@ -367,23 +366,6 @@ fail:
return err;
}
-static const struct {
- const char *friendly_name;
- const char *match_string;
- unsigned int quirks;
-} vaapi_driver_quirks_table[] = {
- {
- "Intel iHD",
- "ubit",
- AV_VAAPI_DRIVER_QUIRK_ATTRIB_MEMTYPE,
- },
- {
- "VDPAU wrapper",
- "Splitted-Desktop Systems VDPAU backend for VA-API",
- AV_VAAPI_DRIVER_QUIRK_SURFACE_ATTRIBUTES,
- },
-};
-
static int vaapi_device_init(AVHWDeviceContext *hwdev)
{
VAAPIDeviceContext *ctx = hwdev->hwctx;
@@ -436,36 +418,6 @@ static int vaapi_device_init(AVHWDeviceContext *hwdev)
if (vendor_string)
av_log(hwdev, AV_LOG_VERBOSE, "VAAPI driver: %s.\n", vendor_string);
- if (hwctx->driver_quirks & AV_VAAPI_DRIVER_QUIRK_USER_SET) {
- av_log(hwdev, AV_LOG_VERBOSE, "Using quirks set by user (%#x).\n",
- hwctx->driver_quirks);
- } else {
- // Detect the driver in use and set quirk flags if necessary.
- hwctx->driver_quirks = 0;
- if (vendor_string) {
- for (i = 0; i < FF_ARRAY_ELEMS(vaapi_driver_quirks_table); i++) {
- if (strstr(vendor_string,
- vaapi_driver_quirks_table[i].match_string)) {
- av_log(hwdev, AV_LOG_VERBOSE, "Matched driver string "
- "as known nonstandard driver \"%s\", setting "
- "quirks (%#x).\n",
- vaapi_driver_quirks_table[i].friendly_name,
- vaapi_driver_quirks_table[i].quirks);
- hwctx->driver_quirks |=
- vaapi_driver_quirks_table[i].quirks;
- break;
- }
- }
- if (!(i < FF_ARRAY_ELEMS(vaapi_driver_quirks_table))) {
- av_log(hwdev, AV_LOG_VERBOSE, "Driver not found in known "
- "nonstandard list, using standard behaviour.\n");
- }
- } else {
- av_log(hwdev, AV_LOG_VERBOSE, "Driver has no vendor string, "
- "assuming standard behaviour.\n");
- }
- }
-
av_free(image_list);
return 0;
fail:
@@ -562,48 +514,43 @@ static int vaapi_frames_init(AVHWFramesContext *hwfc)
}
if (!hwfc->pool) {
- if (!(hwctx->driver_quirks & AV_VAAPI_DRIVER_QUIRK_SURFACE_ATTRIBUTES)) {
- int need_memory_type = !(hwctx->driver_quirks & AV_VAAPI_DRIVER_QUIRK_ATTRIB_MEMTYPE);
- int need_pixel_format = 1;
- for (i = 0; i < avfc->nb_attributes; i++) {
- if (avfc->attributes[i].type == VASurfaceAttribMemoryType)
- need_memory_type = 0;
- if (avfc->attributes[i].type == VASurfaceAttribPixelFormat)
- need_pixel_format = 0;
- }
- ctx->nb_attributes =
- avfc->nb_attributes + need_memory_type + need_pixel_format;
+ int need_memory_type = 1;
+ int need_pixel_format = 1;
+ for (i = 0; i < avfc->nb_attributes; i++) {
+ if (avfc->attributes[i].type == VASurfaceAttribMemoryType)
+ need_memory_type = 0;
+ if (avfc->attributes[i].type == VASurfaceAttribPixelFormat)
+ need_pixel_format = 0;
+ }
+ ctx->nb_attributes =
+ avfc->nb_attributes + need_memory_type + need_pixel_format;
- ctx->attributes = av_malloc(ctx->nb_attributes *
- sizeof(*ctx->attributes));
- if (!ctx->attributes) {
- err = AVERROR(ENOMEM);
- goto fail;
- }
+ ctx->attributes = av_malloc(ctx->nb_attributes *
+ sizeof(*ctx->attributes));
+ if (!ctx->attributes) {
+ err = AVERROR(ENOMEM);
+ goto fail;
+ }
- for (i = 0; i < avfc->nb_attributes; i++)
- ctx->attributes[i] = avfc->attributes[i];
- if (need_memory_type) {
- ctx->attributes[i++] = (VASurfaceAttrib) {
- .type = VASurfaceAttribMemoryType,
- .flags = VA_SURFACE_ATTRIB_SETTABLE,
- .value.type = VAGenericValueTypeInteger,
- .value.value.i = VA_SURFACE_ATTRIB_MEM_TYPE_VA,
- };
- }
- if (need_pixel_format) {
- ctx->attributes[i++] = (VASurfaceAttrib) {
- .type = VASurfaceAttribPixelFormat,
- .flags = VA_SURFACE_ATTRIB_SETTABLE,
- .value.type = VAGenericValueTypeInteger,
- .value.value.i = desc->fourcc,
- };
- }
- av_assert0(i == ctx->nb_attributes);
- } else {
- ctx->attributes = NULL;
- ctx->nb_attributes = 0;
+ for (i = 0; i < avfc->nb_attributes; i++)
+ ctx->attributes[i] = avfc->attributes[i];
+ if (need_memory_type) {
+ ctx->attributes[i++] = (VASurfaceAttrib) {
+ .type = VASurfaceAttribMemoryType,
+ .flags = VA_SURFACE_ATTRIB_SETTABLE,
+ .value.type = VAGenericValueTypeInteger,
+ .value.value.i = VA_SURFACE_ATTRIB_MEM_TYPE_VA,
+ };
+ }
+ if (need_pixel_format) {
+ ctx->attributes[i++] = (VASurfaceAttrib) {
+ .type = VASurfaceAttribPixelFormat,
+ .flags = VA_SURFACE_ATTRIB_SETTABLE,
+ .value.type = VAGenericValueTypeInteger,
+ .value.value.i = desc->fourcc,
+ };
}
+ av_assert0(i == ctx->nb_attributes);
ctx->rt_format = desc->rt_format;
diff --git a/libavutil/hwcontext_vaapi.h b/libavutil/hwcontext_vaapi.h
index 0b2e071cb3..acd72eee6d 100644
--- a/libavutil/hwcontext_vaapi.h
+++ b/libavutil/hwcontext_vaapi.h
@@ -37,18 +37,24 @@ enum {
/**
* The quirks field has been set by the user and should not be detected
* automatically by av_hwdevice_ctx_init().
+ *
+ * @deprecated Driver quirks are no longer used.
*/
AV_VAAPI_DRIVER_QUIRK_USER_SET = (1 << 0),
/**
* The driver does not destroy parameter buffers when they are used by
* vaRenderPicture(). Additional code will be required to destroy them
* separately afterwards.
+ *
+ * @deprecated Driver quirks are no longer used.
*/
AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS = (1 << 1),
/**
* The driver does not support the VASurfaceAttribMemoryType attribute,
* so the surface allocation code will not try to use it.
+ *
+ * @deprecated Driver quirks are no longer used.
*/
AV_VAAPI_DRIVER_QUIRK_ATTRIB_MEMTYPE = (1 << 2),
@@ -56,6 +62,8 @@ enum {
* The driver does not support surface attributes at all.
* The surface allocation code will never pass them to surface allocation,
* and the results of the vaQuerySurfaceAttributes() call will be faked.
+ *
+ * @deprecated Driver quirks are no longer used.
*/
AV_VAAPI_DRIVER_QUIRK_SURFACE_ATTRIBUTES = (1 << 3),
};
@@ -76,7 +84,14 @@ typedef struct AVVAAPIDeviceContext {
* AV_VAAPI_DRIVER_QUIRK_USER_SET bit is already present. The user
* may need to refer to this field when performing any later
* operations using VAAPI with the same VADisplay.
+ *
+ * @deprecated This was used with libva before the 2.x to support
+ * various drivers which had behaviour not fully
+ * matching the specification. Since libva 2.x this is
+ * no longer used; setting this field has no effect and
+ * new code must ignore it.
*/
+ attribute_deprecated
unsigned int driver_quirks;
} AVVAAPIDeviceContext;
--
2.43.0
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 8+ messages in thread