summaryrefslogtreecommitdiffstats
path: root/src/picture.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/picture.c')
-rw-r--r--src/picture.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/picture.c b/src/picture.c
index f1ec1c3..3490820 100644
--- a/src/picture.c
+++ b/src/picture.c
@@ -267,10 +267,19 @@ VAStatus RequestEndPicture(VADriverContextP context, VAContextID context_id)
struct object_context *context_object;
struct object_config *config_object;
struct object_surface *surface_object;
+ struct video_format *video_format;
+ unsigned int output_type, capture_type;
int request_fd;
VAStatus status;
int rc;
+ video_format = driver_data->video_format;
+ if (video_format == NULL)
+ return VA_STATUS_ERROR_OPERATION_FAILED;
+
+ output_type = v4l2_type_video_output(video_format->v4l2_mplane);
+ capture_type = v4l2_type_video_capture(video_format->v4l2_mplane);
+
context_object = CONTEXT(driver_data, context_id);
if (context_object == NULL)
return VA_STATUS_ERROR_INVALID_CONTEXT;
@@ -298,15 +307,13 @@ VAStatus RequestEndPicture(VADriverContextP context, VAContextID context_id)
if (rc != VA_STATUS_SUCCESS)
return rc;
- rc = v4l2_queue_buffer(driver_data->video_fd, -1,
- V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
+ rc = v4l2_queue_buffer(driver_data->video_fd, -1, capture_type,
surface_object->destination_index, 0,
surface_object->destination_buffers_count);
if (rc < 0)
return VA_STATUS_ERROR_OPERATION_FAILED;
- rc = v4l2_queue_buffer(driver_data->video_fd, request_fd,
- V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
+ rc = v4l2_queue_buffer(driver_data->video_fd, request_fd, output_type,
surface_object->source_index,
surface_object->slices_size, 1);
if (rc < 0)