aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2016-09-30 21:21:46 +0200
committerMark Thompson <sw@jkqxz.net>2016-11-13 20:39:49 +0000
commit775a8477b74bb2fa95ca2b13c08f3fd8d6c617b6 (patch)
tree4f5d7dd11b889a00b0d24ab7b7eb146d8c12b883
parent8d47d8407569aade0c0d564600919349789dc38b (diff)
downloadffmpeg-775a8477b74bb2fa95ca2b13c08f3fd8d6c617b6.tar.gz
hwcontext_vaapi: add a quirk for the missing MemoryType attribute
The Intel binary iHD driver does not support the VASurfaceAttribMemoryType, so surface allocation will fail when using it. (cherry picked from commit 2124711b950b03c582a119c75f52a87acc32d6ec)
-rw-r--r--doc/APIchanges3
-rw-r--r--libavutil/hwcontext_vaapi.c8
-rw-r--r--libavutil/hwcontext_vaapi.h6
-rw-r--r--libavutil/version.h2
4 files changed, 17 insertions, 2 deletions
diff --git a/doc/APIchanges b/doc/APIchanges
index e2daed3aca..3089c82eb4 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -15,6 +15,9 @@ libavutil: 2015-08-28
API changes, most recent first:
+2016-xx-xx - xxxxxxx - lavu 55.39.100 - hwcontext_vaapi.h
+ Add AV_VAAPI_DRIVER_QUIRK_ATTRIB_MEMTYPE.
+
2016-xx-xx - xxxxxxx - lavu 55.38.100 - hwcontext_vaapi.h
Add driver quirks field to VAAPI-specific hwdevice and enum with
members AV_VAAPI_DRIVER_QUIRK_* to represent its values.
diff --git a/libavutil/hwcontext_vaapi.c b/libavutil/hwcontext_vaapi.c
index 06836a7156..605e465e2d 100644
--- a/libavutil/hwcontext_vaapi.c
+++ b/libavutil/hwcontext_vaapi.c
@@ -275,6 +275,11 @@ static const struct {
"i965",
AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS,
},
+ {
+ "Intel iHD",
+ "ubit",
+ AV_VAAPI_DRIVER_QUIRK_ATTRIB_MEMTYPE,
+ },
};
static int vaapi_device_init(AVHWDeviceContext *hwdev)
@@ -449,7 +454,8 @@ static int vaapi_frames_init(AVHWFramesContext *hwfc)
}
if (!hwfc->pool) {
- int need_memory_type = 1, need_pixel_format = 1;
+ 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 (ctx->attributes[i].type == VASurfaceAttribMemoryType)
need_memory_type = 0;
diff --git a/libavutil/hwcontext_vaapi.h b/libavutil/hwcontext_vaapi.h
index 8bd8031b9d..da1d4fe6c2 100644
--- a/libavutil/hwcontext_vaapi.h
+++ b/libavutil/hwcontext_vaapi.h
@@ -45,6 +45,12 @@ enum {
* separately afterwards.
*/
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.
+ */
+ AV_VAAPI_DRIVER_QUIRK_ATTRIB_MEMTYPE = (1 << 2),
};
/**
diff --git a/libavutil/version.h b/libavutil/version.h
index 81c51815a4..6d68051999 100644
--- a/libavutil/version.h
+++ b/libavutil/version.h
@@ -79,7 +79,7 @@
*/
#define LIBAVUTIL_VERSION_MAJOR 55
-#define LIBAVUTIL_VERSION_MINOR 38
+#define LIBAVUTIL_VERSION_MINOR 39
#define LIBAVUTIL_VERSION_MICRO 100
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \