summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/request.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/request.c b/src/request.c
index a36a505..2c3ed7f 100644
--- a/src/request.c
+++ b/src/request.c
@@ -37,6 +37,7 @@
#include "request.h"
#include "utils.h"
+#include "v4l2.h"
#include <assert.h>
#include <stdio.h>
@@ -59,8 +60,9 @@ VAStatus VA_DRIVER_INIT_FUNC(VADriverContextP context)
{
struct request_data *driver_data;
struct VADriverVTable *vtable = context->vtable;
- struct v4l2_capability capability;
VAStatus status;
+ unsigned int capabilities;
+ unsigned int capabilities_required;
int video_fd = -1;
int media_fd = -1;
char *video_path;
@@ -151,10 +153,16 @@ VAStatus VA_DRIVER_INIT_FUNC(VADriverContextP context)
if (video_fd < 0)
return VA_STATUS_ERROR_OPERATION_FAILED;
- rc = ioctl(video_fd, VIDIOC_QUERYCAP, &capability);
- if (rc < 0 || !(capability.capabilities & V4L2_CAP_VIDEO_M2M_MPLANE)) {
- request_log("Video device %s does not support m2m mplanes\n",
- video_path);
+ rc = v4l2_query_capabilities(video_fd, &capabilities);
+ if (rc < 0) {
+ status = VA_STATUS_ERROR_OPERATION_FAILED;
+ goto error;
+ }
+
+ capabilities_required = V4L2_CAP_VIDEO_M2M_MPLANE | V4L2_CAP_STREAMING;
+
+ if ((capabilities & capabilities_required) != capabilities_required) {
+ request_log("Missing required driver capabilities\n");
status = VA_STATUS_ERROR_OPERATION_FAILED;
goto error;
}