Deprecates struct vaapi_context and the installed header vaapi.h, to be removed at the next version bump.
(cherry picked from commit 851960f6f8cf1f946fe42fa36cf6598fac68072c) --- doc/APIchanges | 4 +++ libavcodec/Makefile | 5 ++- libavcodec/vaapi.h | 11 +++++++ libavcodec/vaapi_decode.c | 78 ++++++++++++++++++++++++++++------------------- libavcodec/vaapi_decode.h | 6 ++++ libavcodec/version.h | 5 ++- 6 files changed, 73 insertions(+), 36 deletions(-) diff --git a/doc/APIchanges b/doc/APIchanges index 3279563d47..33c2f33581 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -15,6 +15,10 @@ libavutil: 2015-08-28 API changes, most recent first: +2017-01-xx - xxxxxxx - lavc 57.72.100 - vaapi.h + Deprecate struct vaapi_context and the vaapi.h installed header. + Callers should set AVCodecContext.hw_frames_ctx instead. + 2017-01-06 - xxxxxxx - lavf 57.62.100- avio.h Add avio_get_dyn_buf() diff --git a/libavcodec/Makefile b/libavcodec/Makefile index bd4b2315da..70784b74fb 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -769,7 +769,7 @@ OBJS-$(CONFIG_ADPCM_YAMAHA_ENCODER) += adpcmenc.o adpcm_data.o # hardware accelerators OBJS-$(CONFIG_D3D11VA) += dxva2.o OBJS-$(CONFIG_DXVA2) += dxva2.o -OBJS-$(CONFIG_VAAPI) += vaapi.o vaapi_decode.o +OBJS-$(CONFIG_VAAPI) += vaapi_decode.o OBJS-$(CONFIG_VDA) += vda.o videotoolbox.o OBJS-$(CONFIG_VIDEOTOOLBOX) += videotoolbox.o OBJS-$(CONFIG_VDPAU) += vdpau.o @@ -1000,8 +1000,7 @@ SKIPHEADERS-$(CONFIG_QSV) += qsv.h qsv_internal.h SKIPHEADERS-$(CONFIG_QSVDEC) += qsvdec.h SKIPHEADERS-$(CONFIG_QSVENC) += qsvenc.h SKIPHEADERS-$(CONFIG_XVMC) += xvmc.h -SKIPHEADERS-$(CONFIG_VAAPI) += vaapi_decode.h vaapi_encode.h \ - vaapi_internal.h +SKIPHEADERS-$(CONFIG_VAAPI) += vaapi_decode.h vaapi_encode.h SKIPHEADERS-$(CONFIG_VDA) += vda.h vda_vt_internal.h SKIPHEADERS-$(CONFIG_VDPAU) += vdpau.h vdpau_internal.h SKIPHEADERS-$(CONFIG_VIDEOTOOLBOX) += videotoolbox.h vda_vt_internal.h diff --git a/libavcodec/vaapi.h b/libavcodec/vaapi.h index 7a29f6f881..ab6110ba9c 100644 --- a/libavcodec/vaapi.h +++ b/libavcodec/vaapi.h @@ -34,6 +34,12 @@ #include "libavutil/attributes.h" #include "version.h" +#include "libavutil/attributes.h" + +#include "version.h" + +#if FF_API_STRUCT_VAAPI_CONTEXT + /** * @defgroup lavc_codec_hwaccel_vaapi VA API Decoding * @ingroup lavc_codec_hwaccel @@ -48,7 +54,10 @@ * during initialization or through each AVCodecContext.get_buffer() * function call. In any case, they must be valid prior to calling * decoding functions. + * + * Deprecated: use AVCodecContext.hw_frames_ctx instead. */ +attribute_deprecated struct vaapi_context { /** * Window system dependent data @@ -186,4 +195,6 @@ struct vaapi_context { /* @} */ +#endif /* FF_API_STRUCT_VAAPI_CONTEXT */ + #endif /* AVCODEC_VAAPI_H */ diff --git a/libavcodec/vaapi_decode.c b/libavcodec/vaapi_decode.c index 878e8ed3d1..da9e4aedde 100644 --- a/libavcodec/vaapi_decode.c +++ b/libavcodec/vaapi_decode.c @@ -427,6 +427,7 @@ int ff_vaapi_decode_init(AVCodecContext *avctx) ctx->va_config = VA_INVALID_ID; ctx->va_context = VA_INVALID_ID; +#if FF_API_STRUCT_VAAPI_CONTEXT if (avctx->hwaccel_context) { av_log(avctx, AV_LOG_WARNING, "Using deprecated struct " "vaapi_context in decode.\n"); @@ -453,7 +454,9 @@ int ff_vaapi_decode_init(AVCodecContext *avctx) ctx->hwctx->driver_quirks = AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS; - } else if (avctx->hw_frames_ctx) { + } else +#endif + if (avctx->hw_frames_ctx) { // This structure has a shorter lifetime than the enclosing // AVCodecContext, so we inherit the references from there // and do not need to make separate ones. @@ -471,6 +474,7 @@ int ff_vaapi_decode_init(AVCodecContext *avctx) goto fail; } +#if FF_API_STRUCT_VAAPI_CONTEXT if (ctx->have_old_context) { ctx->va_config = ctx->old_context->config_id; ctx->va_context = ctx->old_context->context_id; @@ -478,27 +482,31 @@ int ff_vaapi_decode_init(AVCodecContext *avctx) av_log(avctx, AV_LOG_DEBUG, "Using user-supplied decoder " "context: %#x/%#x.\n", ctx->va_config, ctx->va_context); } else { - err = vaapi_decode_make_config(avctx); - if (err) - goto fail; +#endif - vas = vaCreateContext(ctx->hwctx->display, ctx->va_config, - avctx->coded_width, avctx->coded_height, - VA_PROGRESSIVE, - ctx->hwfc->surface_ids, - ctx->hwfc->nb_surfaces, - &ctx->va_context); - if (vas != VA_STATUS_SUCCESS) { - av_log(avctx, AV_LOG_ERROR, "Failed to create decode " - "context: %d (%s).\n", vas, vaErrorStr(vas)); - err = AVERROR(EIO); - goto fail; - } + err = vaapi_decode_make_config(avctx); + if (err) + goto fail; - av_log(avctx, AV_LOG_DEBUG, "Decode context initialised: " - "%#x/%#x.\n", ctx->va_config, ctx->va_context); + vas = vaCreateContext(ctx->hwctx->display, ctx->va_config, + avctx->coded_width, avctx->coded_height, + VA_PROGRESSIVE, + ctx->hwfc->surface_ids, + ctx->hwfc->nb_surfaces, + &ctx->va_context); + if (vas != VA_STATUS_SUCCESS) { + av_log(avctx, AV_LOG_ERROR, "Failed to create decode " + "context: %d (%s).\n", vas, vaErrorStr(vas)); + err = AVERROR(EIO); + goto fail; } + av_log(avctx, AV_LOG_DEBUG, "Decode context initialised: " + "%#x/%#x.\n", ctx->va_config, ctx->va_context); +#if FF_API_STRUCT_VAAPI_CONTEXT + } +#endif + return 0; fail: @@ -511,26 +519,32 @@ int ff_vaapi_decode_uninit(AVCodecContext *avctx) VAAPIDecodeContext *ctx = avctx->internal->hwaccel_priv_data; VAStatus vas; +#if FF_API_STRUCT_VAAPI_CONTEXT if (ctx->have_old_context) { av_buffer_unref(&ctx->device_ref); } else { - if (ctx->va_context != VA_INVALID_ID) { - vas = vaDestroyContext(ctx->hwctx->display, ctx->va_context); - if (vas != VA_STATUS_SUCCESS) { - av_log(avctx, AV_LOG_ERROR, "Failed to destroy decode " - "context %#x: %d (%s).\n", - ctx->va_context, vas, vaErrorStr(vas)); - } +#endif + + if (ctx->va_context != VA_INVALID_ID) { + vas = vaDestroyContext(ctx->hwctx->display, ctx->va_context); + if (vas != VA_STATUS_SUCCESS) { + av_log(avctx, AV_LOG_ERROR, "Failed to destroy decode " + "context %#x: %d (%s).\n", + ctx->va_context, vas, vaErrorStr(vas)); } - if (ctx->va_config != VA_INVALID_ID) { - vas = vaDestroyConfig(ctx->hwctx->display, ctx->va_config); - if (vas != VA_STATUS_SUCCESS) { - av_log(avctx, AV_LOG_ERROR, "Failed to destroy decode " - "configuration %#x: %d (%s).\n", - ctx->va_config, vas, vaErrorStr(vas)); - } + } + if (ctx->va_config != VA_INVALID_ID) { + vas = vaDestroyConfig(ctx->hwctx->display, ctx->va_config); + if (vas != VA_STATUS_SUCCESS) { + av_log(avctx, AV_LOG_ERROR, "Failed to destroy decode " + "configuration %#x: %d (%s).\n", + ctx->va_config, vas, vaErrorStr(vas)); } } +#if FF_API_STRUCT_VAAPI_CONTEXT + } +#endif + return 0; } diff --git a/libavcodec/vaapi_decode.h b/libavcodec/vaapi_decode.h index f1caa54eca..5ac3069ef3 100644 --- a/libavcodec/vaapi_decode.h +++ b/libavcodec/vaapi_decode.h @@ -26,7 +26,11 @@ #include "libavutil/hwcontext_vaapi.h" #include "avcodec.h" + +#include "version.h" +#if FF_API_STRUCT_VAAPI_CONTEXT #include "vaapi.h" +#endif static inline VASurfaceID ff_vaapi_get_surface_id(AVFrame *pic) { @@ -54,9 +58,11 @@ typedef struct VAAPIDecodeContext { VAConfigID va_config; VAContextID va_context; +#if FF_API_STRUCT_VAAPI_CONTEXT int have_old_context; struct vaapi_context *old_context; AVBufferRef *device_ref; +#endif AVHWDeviceContext *device; AVVAAPIDeviceContext *hwctx; diff --git a/libavcodec/version.h b/libavcodec/version.h index c5a8f55897..5008d50bae 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -28,7 +28,7 @@ #include "libavutil/version.h" #define LIBAVCODEC_VERSION_MAJOR 57 -#define LIBAVCODEC_VERSION_MINOR 71 +#define LIBAVCODEC_VERSION_MINOR 72 #define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ @@ -226,5 +226,8 @@ #ifndef FF_API_NVENC_OLD_NAME #define FF_API_NVENC_OLD_NAME (LIBAVCODEC_VERSION_MAJOR < 59) #endif +#ifndef FF_API_STRUCT_VAAPI_CONTEXT +#define FF_API_STRUCT_VAAPI_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 59) +#endif #endif /* AVCODEC_VERSION_H */ -- 2.11.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel