aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilip Langdale <philipl@overt.org>2015-06-26 08:43:41 -0700
committerPhilip Langdale <philipl@overt.org>2015-06-26 19:07:51 -0700
commitb69bea3ab8f83b4cac7091d648d27c3be3efbc28 (patch)
tree6a78d8af64aaaaa5ce793944e20efe91a36faad8
parent7728d231a6cb5c31bf59a29ccc89193c82389e01 (diff)
downloadffmpeg-b69bea3ab8f83b4cac7091d648d27c3be3efbc28.tar.gz
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.
-rw-r--r--libavcodec/avcodec.h8
-rw-r--r--libavcodec/utils.c7
-rw-r--r--libavcodec/vdpau_hevc.c1
-rw-r--r--libavcodec/version.h2
4 files changed, 16 insertions, 2 deletions
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index 761d3c1b87..ddbf0a372b 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -894,6 +894,12 @@ typedef struct RcOverride{
*/
#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
//The following defines may change, don't expect compatibility if you use them.
#define MB_TYPE_INTRA4x4 0x0001
@@ -3336,7 +3342,7 @@ typedef struct AVHWAccel {
/**
* Hardware accelerated codec capabilities.
- * see FF_HWACCEL_CODEC_CAP_*
+ * see HWACCEL_CODEC_CAP_*
*/
int capabilities;
diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index 7696582aff..40ea5440b8 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -1176,6 +1176,13 @@ static int setup_hwaccel(AVCodecContext *avctx,
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) {
avctx->internal->hwaccel_priv_data = av_mallocz(hwa->priv_data_size);
if (!avctx->internal->hwaccel_priv_data)
diff --git a/libavcodec/vdpau_hevc.c b/libavcodec/vdpau_hevc.c
index ccf67648d3..0987b63e2d 100644
--- a/libavcodec/vdpau_hevc.c
+++ b/libavcodec/vdpau_hevc.c
@@ -427,6 +427,7 @@ AVHWAccel ff_hevc_vdpau_hwaccel = {
.type = AVMEDIA_TYPE_VIDEO,
.id = AV_CODEC_ID_HEVC,
.pix_fmt = AV_PIX_FMT_VDPAU,
+ .capabilities = HWACCEL_CODEC_CAP_EXPERIMENTAL,
.start_frame = vdpau_hevc_start_frame,
.end_frame = vdpau_hevc_end_frame,
.decode_slice = vdpau_hevc_decode_slice,
diff --git a/libavcodec/version.h b/libavcodec/version.h
index eff882059d..6e95c86be1 100644
--- a/libavcodec/version.h
+++ b/libavcodec/version.h
@@ -30,7 +30,7 @@
#define LIBAVCODEC_VERSION_MAJOR 56
#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, \
LIBAVCODEC_VERSION_MINOR, \