forked from marfrit/libva-v4l2-request-fourier
surface: Only set format if unset
The vaCreateSurface2 may be called multiple times, setting the format again would lead to EBUSY being returned as you cannot change the format if you have buffers allocated. Signed-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
This commit is contained in:
committed by
Paul Kocialkowski
parent
b5cee9f480
commit
b8ac9bb9ea
+24
-18
@@ -71,29 +71,35 @@ VAStatus RequestCreateSurfaces2(VADriverContextP context, unsigned int format,
|
||||
if (format != VA_RT_FORMAT_YUV420)
|
||||
return VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT;
|
||||
|
||||
found = v4l2_find_format(driver_data->video_fd,
|
||||
V4L2_BUF_TYPE_VIDEO_CAPTURE,
|
||||
V4L2_PIX_FMT_SUNXI_TILED_NV12);
|
||||
if (found)
|
||||
video_format = video_format_find(V4L2_PIX_FMT_SUNXI_TILED_NV12);
|
||||
|
||||
found = v4l2_find_format(driver_data->video_fd,
|
||||
V4L2_BUF_TYPE_VIDEO_CAPTURE,
|
||||
V4L2_PIX_FMT_NV12);
|
||||
if (found)
|
||||
video_format = video_format_find(V4L2_PIX_FMT_NV12);
|
||||
if (!driver_data->video_format) {
|
||||
found = v4l2_find_format(driver_data->video_fd,
|
||||
V4L2_BUF_TYPE_VIDEO_CAPTURE,
|
||||
V4L2_PIX_FMT_SUNXI_TILED_NV12);
|
||||
if (found)
|
||||
video_format = video_format_find(V4L2_PIX_FMT_SUNXI_TILED_NV12);
|
||||
|
||||
if (video_format == NULL)
|
||||
return VA_STATUS_ERROR_OPERATION_FAILED;
|
||||
found = v4l2_find_format(driver_data->video_fd,
|
||||
V4L2_BUF_TYPE_VIDEO_CAPTURE,
|
||||
V4L2_PIX_FMT_NV12);
|
||||
if (found)
|
||||
video_format = video_format_find(V4L2_PIX_FMT_NV12);
|
||||
|
||||
driver_data->video_format = video_format;
|
||||
if (video_format == NULL)
|
||||
return VA_STATUS_ERROR_OPERATION_FAILED;
|
||||
|
||||
capture_type = v4l2_type_video_capture(video_format->v4l2_mplane);
|
||||
driver_data->video_format = video_format;
|
||||
|
||||
rc = v4l2_set_format(driver_data->video_fd, capture_type,
|
||||
video_format->v4l2_format, width, height);
|
||||
if (rc < 0)
|
||||
return VA_STATUS_ERROR_OPERATION_FAILED;
|
||||
capture_type = v4l2_type_video_capture(video_format->v4l2_mplane);
|
||||
|
||||
rc = v4l2_set_format(driver_data->video_fd, capture_type,
|
||||
video_format->v4l2_format, width, height);
|
||||
if (rc < 0)
|
||||
return VA_STATUS_ERROR_OPERATION_FAILED;
|
||||
} else {
|
||||
video_format = driver_data->video_format;
|
||||
capture_type = v4l2_type_video_capture(video_format->v4l2_mplane);
|
||||
}
|
||||
|
||||
rc = v4l2_get_format(driver_data->video_fd, capture_type, &format_width,
|
||||
&format_height, destination_bytesperlines,
|
||||
|
||||
Reference in New Issue
Block a user