Commit b69bea3a authored by Philip Langdale's avatar Philip Langdale

avcodec: Add flag for experimental HWAccels and use it for VDPAU/HEVC

This HWAccel isn't really usable right now due to an nvidia driver bug,
so we don't want it selected by default.

HWAccels have a capabilities field and there's a comment about flags,
but no flags exist today, so let's add one for experimental hwaccels.
parent 7728d231
...@@ -894,6 +894,12 @@ typedef struct RcOverride{ ...@@ -894,6 +894,12 @@ typedef struct RcOverride{
*/ */
#define CODEC_CAP_LOSSLESS 0x80000000 #define CODEC_CAP_LOSSLESS 0x80000000
/**
* HWAccel is experimental and is thus avoided in favor of non experimental
* codecs
*/
#define HWACCEL_CODEC_CAP_EXPERIMENTAL 0x0200
#if FF_API_MB_TYPE #if FF_API_MB_TYPE
//The following defines may change, don't expect compatibility if you use them. //The following defines may change, don't expect compatibility if you use them.
#define MB_TYPE_INTRA4x4 0x0001 #define MB_TYPE_INTRA4x4 0x0001
...@@ -3336,7 +3342,7 @@ typedef struct AVHWAccel { ...@@ -3336,7 +3342,7 @@ typedef struct AVHWAccel {
/** /**
* Hardware accelerated codec capabilities. * Hardware accelerated codec capabilities.
* see FF_HWACCEL_CODEC_CAP_* * see HWACCEL_CODEC_CAP_*
*/ */
int capabilities; int capabilities;
......
...@@ -1176,6 +1176,13 @@ static int setup_hwaccel(AVCodecContext *avctx, ...@@ -1176,6 +1176,13 @@ static int setup_hwaccel(AVCodecContext *avctx,
return AVERROR(ENOENT); return AVERROR(ENOENT);
} }
if (hwa->capabilities & HWACCEL_CODEC_CAP_EXPERIMENTAL &&
avctx->strict_std_compliance > FF_COMPLIANCE_EXPERIMENTAL) {
av_log(avctx, AV_LOG_WARNING, "Ignoring experimental hwaccel: %s\n",
hwa->name);
return AVERROR(ENOTSUP);
}
if (hwa->priv_data_size) { if (hwa->priv_data_size) {
avctx->internal->hwaccel_priv_data = av_mallocz(hwa->priv_data_size); avctx->internal->hwaccel_priv_data = av_mallocz(hwa->priv_data_size);
if (!avctx->internal->hwaccel_priv_data) if (!avctx->internal->hwaccel_priv_data)
......
...@@ -427,6 +427,7 @@ AVHWAccel ff_hevc_vdpau_hwaccel = { ...@@ -427,6 +427,7 @@ AVHWAccel ff_hevc_vdpau_hwaccel = {
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.id = AV_CODEC_ID_HEVC, .id = AV_CODEC_ID_HEVC,
.pix_fmt = AV_PIX_FMT_VDPAU, .pix_fmt = AV_PIX_FMT_VDPAU,
.capabilities = HWACCEL_CODEC_CAP_EXPERIMENTAL,
.start_frame = vdpau_hevc_start_frame, .start_frame = vdpau_hevc_start_frame,
.end_frame = vdpau_hevc_end_frame, .end_frame = vdpau_hevc_end_frame,
.decode_slice = vdpau_hevc_decode_slice, .decode_slice = vdpau_hevc_decode_slice,
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
#define LIBAVCODEC_VERSION_MAJOR 56 #define LIBAVCODEC_VERSION_MAJOR 56
#define LIBAVCODEC_VERSION_MINOR 45 #define LIBAVCODEC_VERSION_MINOR 45
#define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_MICRO 101
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
LIBAVCODEC_VERSION_MINOR, \ LIBAVCODEC_VERSION_MINOR, \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment