diff --git a/src/surface.c b/src/surface.c index 38954cc..a6abb9b 100644 --- a/src/surface.c +++ b/src/surface.c @@ -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,