From accb365696d7a6c2125e8ed445ea9aef906a670c Mon Sep 17 00:00:00 2001 From: Darshana Patil Date: Wed, 23 Mar 2022 12:26:05 -0700 Subject: [PATCH] video: driver: v4l2 compliance fixes for test formats v4l2 compliance fixes for test formats fixes: test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK test VIDIOC_G_FMT: OK test VIDIOC_TRY_FMT: OK test VIDIOC_S_FMT: OK Change-Id: I23c193ab5785bb10d070fa3085678d9669f53a92 Signed-off-by: Darshana Patil --- driver/vidc/inc/msm_vidc_internal.h | 2 + driver/vidc/src/msm_vdec.c | 72 ++++++++++++++--------------- driver/vidc/src/msm_venc.c | 72 ++++++++++++++--------------- driver/vidc/src/msm_vidc.c | 30 +++++++----- driver/vidc/src/msm_vidc_buffer.c | 8 ++-- driver/vidc/src/msm_vidc_driver.c | 54 ++++++++-------------- driver/vidc/src/msm_vidc_platform.c | 8 ++++ 7 files changed, 119 insertions(+), 127 deletions(-) diff --git a/driver/vidc/inc/msm_vidc_internal.h b/driver/vidc/inc/msm_vidc_internal.h index 4fa93147ec..32929cd130 100644 --- a/driver/vidc/inc/msm_vidc_internal.h +++ b/driver/vidc/inc/msm_vidc_internal.h @@ -134,6 +134,8 @@ */ #define MAX_DPB_LIST_ARRAY_SIZE (16 * 4) #define MAX_DPB_LIST_PAYLOAD_SIZE (16 * 4 * 4) +/* Default metadata size */ +#define MSM_VIDC_METADATA_SIZE ALIGN(16 * 1024, SZ_4K) enum msm_vidc_domain_type { MSM_VIDC_ENCODER = BIT(0), diff --git a/driver/vidc/src/msm_vdec.c b/driver/vidc/src/msm_vdec.c index 4e40fe2820..350cf9b698 100644 --- a/driver/vidc/src/msm_vdec.c +++ b/driver/vidc/src/msm_vdec.c @@ -106,6 +106,12 @@ static int msm_vdec_codec_change(struct msm_vidc_inst *inst, u32 v4l2_codec) v4l2_pixelfmt_name(v4l2_codec)); inst->codec = v4l2_codec_to_driver(v4l2_codec, __func__); + if (!inst->codec) { + i_vpr_e(inst, "%s: invalid codec %#x\n", __func__, v4l2_codec); + rc = -EINVAL; + goto exit; + } + inst->fmts[INPUT_PORT].fmt.pix_mp.pixelformat = v4l2_codec; rc = msm_vidc_update_debug_str(inst); if (rc) @@ -125,11 +131,11 @@ static int msm_vdec_codec_change(struct msm_vidc_inst *inst, u32 v4l2_codec) rc = msm_vidc_update_buffer_count(inst, INPUT_PORT); if (rc) - return rc; + goto exit; rc = msm_vidc_update_buffer_count(inst, OUTPUT_PORT); if (rc) - return rc; + goto exit; exit: return rc; @@ -2224,6 +2230,12 @@ int msm_vdec_try_fmt(struct msm_vidc_inst *inst, struct v4l2_format *f) f->fmt.pix_mp.height = inst->fmts[INPUT_PORT].fmt.pix_mp.height; f->fmt.pix_mp.width = inst->fmts[INPUT_PORT].fmt.pix_mp.width; } + } else if (f->type == INPUT_META_PLANE) { + f->fmt.meta.dataformat = inst->fmts[INPUT_META_PORT].fmt.meta.dataformat; + f->fmt.meta.buffersize = inst->fmts[INPUT_META_PORT].fmt.meta.buffersize; + } else if (f->type == OUTPUT_META_PLANE) { + f->fmt.meta.dataformat = inst->fmts[OUTPUT_META_PORT].fmt.meta.dataformat; + f->fmt.meta.buffersize = inst->fmts[OUTPUT_META_PORT].fmt.meta.buffersize; } else { i_vpr_e(inst, "%s: invalid type %d\n", __func__, f->type); return -EINVAL; @@ -2338,23 +2350,15 @@ int msm_vdec_s_fmt(struct msm_vidc_inst *inst, struct v4l2_format *f) fmt = &inst->fmts[INPUT_META_PORT]; fmt->type = INPUT_META_PLANE; fmt->fmt.meta.dataformat = V4L2_META_FMT_VIDC; - if (is_input_meta_enabled(inst)) { - fmt->fmt.meta.buffersize = call_session_op(core, - buffer_size, inst, MSM_VIDC_BUF_INPUT_META); - inst->buffers.input_meta.min_count = - inst->buffers.input.min_count; - inst->buffers.input_meta.extra_count = - inst->buffers.input.extra_count; - inst->buffers.input_meta.actual_count = - inst->buffers.input.actual_count; - inst->buffers.input_meta.size = fmt->fmt.meta.buffersize; - } else { - fmt->fmt.meta.buffersize = 0; - inst->buffers.input_meta.min_count = 0; - inst->buffers.input_meta.extra_count = 0; - inst->buffers.input_meta.actual_count = 0; - inst->buffers.input_meta.size = 0; - } + fmt->fmt.meta.buffersize = call_session_op(core, + buffer_size, inst, MSM_VIDC_BUF_INPUT_META); + inst->buffers.input_meta.min_count = + inst->buffers.input.min_count; + inst->buffers.input_meta.extra_count = + inst->buffers.input.extra_count; + inst->buffers.input_meta.actual_count = + inst->buffers.input.actual_count; + inst->buffers.input_meta.size = fmt->fmt.meta.buffersize; i_vpr_h(inst, "%s: type: INPUT_META, size %u min_count %d extra_count %d\n", __func__, fmt->fmt.meta.buffersize, @@ -2416,23 +2420,15 @@ int msm_vdec_s_fmt(struct msm_vidc_inst *inst, struct v4l2_format *f) fmt = &inst->fmts[OUTPUT_META_PORT]; fmt->type = OUTPUT_META_PLANE; fmt->fmt.meta.dataformat = V4L2_META_FMT_VIDC; - if (is_output_meta_enabled(inst)) { - fmt->fmt.meta.buffersize = call_session_op(core, - buffer_size, inst, MSM_VIDC_BUF_OUTPUT_META); - inst->buffers.output_meta.min_count = - inst->buffers.output.min_count; - inst->buffers.output_meta.extra_count = - inst->buffers.output.extra_count; - inst->buffers.output_meta.actual_count = - inst->buffers.output.actual_count; - inst->buffers.output_meta.size = fmt->fmt.meta.buffersize; - } else { - fmt->fmt.meta.buffersize = 0; - inst->buffers.output_meta.min_count = 0; - inst->buffers.output_meta.extra_count = 0; - inst->buffers.output_meta.actual_count = 0; - inst->buffers.output_meta.size = 0; - } + fmt->fmt.meta.buffersize = call_session_op(core, + buffer_size, inst, MSM_VIDC_BUF_OUTPUT_META); + inst->buffers.output_meta.min_count = + inst->buffers.output.min_count; + inst->buffers.output_meta.extra_count = + inst->buffers.output.extra_count; + inst->buffers.output_meta.actual_count = + inst->buffers.output.actual_count; + inst->buffers.output_meta.size = fmt->fmt.meta.buffersize; i_vpr_h(inst, "%s: type: OUTPUT_META, size %u min_count %d extra_count %d\n", __func__, fmt->fmt.meta.buffersize, @@ -2809,7 +2805,7 @@ int msm_vdec_inst_init(struct msm_vidc_inst *inst) f = &inst->fmts[INPUT_META_PORT]; f->type = INPUT_META_PLANE; f->fmt.meta.dataformat = V4L2_META_FMT_VIDC; - f->fmt.meta.buffersize = 0; + f->fmt.meta.buffersize = MSM_VIDC_METADATA_SIZE; inst->buffers.input_meta.min_count = 0; inst->buffers.input_meta.extra_count = 0; inst->buffers.input_meta.actual_count = 0; @@ -2847,7 +2843,7 @@ int msm_vdec_inst_init(struct msm_vidc_inst *inst) f = &inst->fmts[OUTPUT_META_PORT]; f->type = OUTPUT_META_PLANE; f->fmt.meta.dataformat = V4L2_META_FMT_VIDC; - f->fmt.meta.buffersize = 0; + f->fmt.meta.buffersize = MSM_VIDC_METADATA_SIZE; inst->buffers.output_meta.min_count = 0; inst->buffers.output_meta.extra_count = 0; inst->buffers.output_meta.actual_count = 0; diff --git a/driver/vidc/src/msm_venc.c b/driver/vidc/src/msm_venc.c index d59e5f8d3d..45ac8f714d 100644 --- a/driver/vidc/src/msm_venc.c +++ b/driver/vidc/src/msm_venc.c @@ -70,6 +70,12 @@ static int msm_venc_codec_change(struct msm_vidc_inst *inst, u32 v4l2_codec) v4l2_pixelfmt_name(v4l2_codec)); inst->codec = v4l2_codec_to_driver(v4l2_codec, __func__); + if (!inst->codec) { + i_vpr_e(inst, "%s: invalid codec %#x\n", __func__, v4l2_codec); + rc = -EINVAL; + goto exit; + } + inst->fmts[OUTPUT_PORT].fmt.pix_mp.pixelformat = v4l2_codec; rc = msm_vidc_update_debug_str(inst); if (rc) @@ -89,11 +95,11 @@ static int msm_venc_codec_change(struct msm_vidc_inst *inst, u32 v4l2_codec) rc = msm_vidc_update_buffer_count(inst, INPUT_PORT); if (rc) - return rc; + goto exit; rc = msm_vidc_update_buffer_count(inst, OUTPUT_PORT); if (rc) - return rc; + goto exit; exit: return rc; @@ -1071,6 +1077,12 @@ int msm_venc_try_fmt(struct msm_vidc_inst *inst, struct v4l2_format *f) f->fmt.pix_mp.pixelformat = inst->fmts[OUTPUT_PORT].fmt.pix_mp.pixelformat; pix_fmt = v4l2_codec_to_driver(f->fmt.pix_mp.pixelformat, __func__); } + } else if (f->type == INPUT_META_PLANE) { + f->fmt.meta.dataformat = inst->fmts[INPUT_META_PORT].fmt.meta.dataformat; + f->fmt.meta.buffersize = inst->fmts[INPUT_META_PORT].fmt.meta.buffersize; + } else if (f->type == OUTPUT_META_PLANE) { + f->fmt.meta.dataformat = inst->fmts[OUTPUT_META_PORT].fmt.meta.dataformat; + f->fmt.meta.buffersize = inst->fmts[OUTPUT_META_PORT].fmt.meta.buffersize; } else { i_vpr_e(inst, "%s: invalid type %d\n", __func__, f->type); return -EINVAL; @@ -1178,23 +1190,15 @@ static int msm_venc_s_fmt_output_meta(struct msm_vidc_inst *inst, struct v4l2_fo fmt = &inst->fmts[OUTPUT_META_PORT]; fmt->type = OUTPUT_META_PLANE; fmt->fmt.meta.dataformat = V4L2_META_FMT_VIDC; - if (is_output_meta_enabled(inst)) { - fmt->fmt.meta.buffersize = call_session_op(core, - buffer_size, inst, MSM_VIDC_BUF_OUTPUT_META); - inst->buffers.output_meta.min_count = - inst->buffers.output.min_count; - inst->buffers.output_meta.extra_count = - inst->buffers.output.extra_count; - inst->buffers.output_meta.actual_count = - inst->buffers.output.actual_count; - inst->buffers.output_meta.size = fmt->fmt.meta.buffersize; - } else { - fmt->fmt.meta.buffersize = 0; - inst->buffers.output_meta.min_count = 0; - inst->buffers.output_meta.extra_count = 0; - inst->buffers.output_meta.actual_count = 0; - inst->buffers.output_meta.size = 0; - } + fmt->fmt.meta.buffersize = call_session_op(core, + buffer_size, inst, MSM_VIDC_BUF_OUTPUT_META); + inst->buffers.output_meta.min_count = + inst->buffers.output.min_count; + inst->buffers.output_meta.extra_count = + inst->buffers.output.extra_count; + inst->buffers.output_meta.actual_count = + inst->buffers.output.actual_count; + inst->buffers.output_meta.size = fmt->fmt.meta.buffersize; memcpy(f, fmt, sizeof(struct v4l2_format)); @@ -1332,23 +1336,15 @@ static int msm_venc_s_fmt_input_meta(struct msm_vidc_inst *inst, struct v4l2_for fmt = &inst->fmts[INPUT_META_PORT]; fmt->type = INPUT_META_PLANE; fmt->fmt.meta.dataformat = V4L2_META_FMT_VIDC; - if (is_input_meta_enabled(inst)) { - fmt->fmt.meta.buffersize = call_session_op(core, - buffer_size, inst, MSM_VIDC_BUF_INPUT_META); - inst->buffers.input_meta.min_count = - inst->buffers.input.min_count; - inst->buffers.input_meta.extra_count = - inst->buffers.input.extra_count; - inst->buffers.input_meta.actual_count = - inst->buffers.input.actual_count; - inst->buffers.input_meta.size = fmt->fmt.meta.buffersize; - } else { - fmt->fmt.meta.buffersize = 0; - inst->buffers.input_meta.min_count = 0; - inst->buffers.input_meta.extra_count = 0; - inst->buffers.input_meta.actual_count = 0; - inst->buffers.input_meta.size = 0; - } + fmt->fmt.meta.buffersize = call_session_op(core, + buffer_size, inst, MSM_VIDC_BUF_INPUT_META); + inst->buffers.input_meta.min_count = + inst->buffers.input.min_count; + inst->buffers.input_meta.extra_count = + inst->buffers.input.extra_count; + inst->buffers.input_meta.actual_count = + inst->buffers.input.actual_count; + inst->buffers.input_meta.size = fmt->fmt.meta.buffersize; memcpy(f, fmt, sizeof(struct v4l2_format)); @@ -1862,7 +1858,7 @@ int msm_venc_inst_init(struct msm_vidc_inst *inst) f = &inst->fmts[OUTPUT_META_PORT]; f->type = OUTPUT_META_PLANE; f->fmt.meta.dataformat = V4L2_META_FMT_VIDC; - f->fmt.meta.buffersize = 0; + f->fmt.meta.buffersize = MSM_VIDC_METADATA_SIZE; inst->buffers.output_meta.min_count = 0; inst->buffers.output_meta.extra_count = 0; inst->buffers.output_meta.actual_count = 0; @@ -1896,7 +1892,7 @@ int msm_venc_inst_init(struct msm_vidc_inst *inst) f = &inst->fmts[INPUT_META_PORT]; f->type = INPUT_META_PLANE; f->fmt.meta.dataformat = V4L2_META_FMT_VIDC; - f->fmt.meta.buffersize = 0; + f->fmt.meta.buffersize = MSM_VIDC_METADATA_SIZE; inst->buffers.input_meta.min_count = 0; inst->buffers.input_meta.extra_count = 0; inst->buffers.input_meta.actual_count = 0; diff --git a/driver/vidc/src/msm_vidc.c b/driver/vidc/src/msm_vidc.c index 7b3ff1189f..b0023ffa7a 100644 --- a/driver/vidc/src/msm_vidc.c +++ b/driver/vidc/src/msm_vidc.c @@ -694,13 +694,16 @@ int msm_vidc_enum_framesizes(void *instance, struct v4l2_frmsizeenum *fsize) if (fsize->index) return -EINVAL; - /* validate pixel format */ - codec = v4l2_codec_to_driver(fsize->pixel_format, __func__); - if (!codec) { - colorfmt = v4l2_colorformat_to_driver(fsize->pixel_format, __func__); - if (colorfmt == MSM_VIDC_FMT_NONE) { - i_vpr_e(inst, "%s: unsupported pix fmt %#x\n", __func__, fsize->pixel_format); - return -EINVAL; + if (fsize->pixel_format != V4L2_META_FMT_VIDC) { + /* validate pixel format */ + codec = v4l2_codec_to_driver(fsize->pixel_format, __func__); + if (!codec) { + colorfmt = v4l2_colorformat_to_driver(fsize->pixel_format, __func__); + if (colorfmt == MSM_VIDC_FMT_NONE) { + i_vpr_e(inst, "%s: unsupported pix fmt %#x\n", + __func__, fsize->pixel_format); + return -EINVAL; + } } } @@ -749,11 +752,14 @@ int msm_vidc_enum_frameintervals(void *instance, struct v4l2_frmivalenum *fival) if (fival->index) return -EINVAL; - /* validate pixel format */ - colorfmt = v4l2_colorformat_to_driver(fival->pixel_format, __func__); - if (colorfmt == MSM_VIDC_FMT_NONE) { - i_vpr_e(inst, "%s: unsupported pix fmt %#x\n", __func__, fival->pixel_format); - return -EINVAL; + if (fival->pixel_format != V4L2_META_FMT_VIDC) { + /* validate pixel format */ + colorfmt = v4l2_colorformat_to_driver(fival->pixel_format, __func__); + if (colorfmt == MSM_VIDC_FMT_NONE) { + i_vpr_e(inst, "%s: unsupported pix fmt %#x\n", + __func__, fival->pixel_format); + return -EINVAL; + } } /* validate resolution */ diff --git a/driver/vidc/src/msm_vidc_buffer.c b/driver/vidc/src/msm_vidc_buffer.c index 97cef807d2..4087bcd5dc 100644 --- a/driver/vidc/src/msm_vidc_buffer.c +++ b/driver/vidc/src/msm_vidc_buffer.c @@ -282,12 +282,12 @@ u32 msm_vidc_decoder_output_size(struct msm_vidc_inst *inst) u32 msm_vidc_decoder_input_meta_size(struct msm_vidc_inst *inst) { - return ALIGN(16 * 1024, SZ_4K); + return MSM_VIDC_METADATA_SIZE; } u32 msm_vidc_decoder_output_meta_size(struct msm_vidc_inst *inst) { - return ALIGN(16 * 1024, SZ_4K); + return MSM_VIDC_METADATA_SIZE; } u32 msm_vidc_encoder_input_size(struct msm_vidc_inst *inst) @@ -378,7 +378,7 @@ u32 msm_vidc_encoder_input_meta_size(struct msm_vidc_inst *inst) return 0; } - size = ALIGN(16 * 1024, SZ_4K); + size = MSM_VIDC_METADATA_SIZE; if (inst->capabilities->cap[META_ROI_INFO].value) { lcu_size = 16; @@ -397,5 +397,5 @@ u32 msm_vidc_encoder_input_meta_size(struct msm_vidc_inst *inst) u32 msm_vidc_encoder_output_meta_size(struct msm_vidc_inst *inst) { - return ALIGN(16 * 1024, SZ_4K); + return MSM_VIDC_METADATA_SIZE; } diff --git a/driver/vidc/src/msm_vidc_driver.c b/driver/vidc/src/msm_vidc_driver.c index b41a67e04e..5030c29eab 100644 --- a/driver/vidc/src/msm_vidc_driver.c +++ b/driver/vidc/src/msm_vidc_driver.c @@ -541,7 +541,7 @@ enum msm_vidc_codec_type v4l2_codec_to_driver(u32 v4l2_codec, const char *func) codec = MSM_VIDC_HEIC; break; default: - d_vpr_e("%s: invalid v4l2 codec %#x\n", func, v4l2_codec); + d_vpr_h("%s: invalid v4l2 codec %#x\n", func, v4l2_codec); break; } return codec; @@ -5610,42 +5610,26 @@ int msm_vidc_update_meta_port_settings(struct msm_vidc_inst *inst) core = inst->core; fmt = &inst->fmts[INPUT_META_PORT]; - if (is_input_meta_enabled(inst)) { - fmt->fmt.meta.buffersize = call_session_op(core, - buffer_size, inst, MSM_VIDC_BUF_INPUT_META); - inst->buffers.input_meta.min_count = - inst->buffers.input.min_count; - inst->buffers.input_meta.extra_count = - inst->buffers.input.extra_count; - inst->buffers.input_meta.actual_count = - inst->buffers.input.actual_count; - inst->buffers.input_meta.size = fmt->fmt.meta.buffersize; - } else { - fmt->fmt.meta.buffersize = 0; - inst->buffers.input_meta.min_count = 0; - inst->buffers.input_meta.extra_count = 0; - inst->buffers.input_meta.actual_count = 0; - inst->buffers.input_meta.size = 0; - } + fmt->fmt.meta.buffersize = call_session_op(core, + buffer_size, inst, MSM_VIDC_BUF_INPUT_META); + inst->buffers.input_meta.min_count = + inst->buffers.input.min_count; + inst->buffers.input_meta.extra_count = + inst->buffers.input.extra_count; + inst->buffers.input_meta.actual_count = + inst->buffers.input.actual_count; + inst->buffers.input_meta.size = fmt->fmt.meta.buffersize; fmt = &inst->fmts[OUTPUT_META_PORT]; - if (is_output_meta_enabled(inst)) { - fmt->fmt.meta.buffersize = call_session_op(core, - buffer_size, inst, MSM_VIDC_BUF_OUTPUT_META); - inst->buffers.output_meta.min_count = - inst->buffers.output.min_count; - inst->buffers.output_meta.extra_count = - inst->buffers.output.extra_count; - inst->buffers.output_meta.actual_count = - inst->buffers.output.actual_count; - inst->buffers.output_meta.size = fmt->fmt.meta.buffersize; - } else { - fmt->fmt.meta.buffersize = 0; - inst->buffers.output_meta.min_count = 0; - inst->buffers.output_meta.extra_count = 0; - inst->buffers.output_meta.actual_count = 0; - inst->buffers.output_meta.size = 0; - } + fmt->fmt.meta.buffersize = call_session_op(core, + buffer_size, inst, MSM_VIDC_BUF_OUTPUT_META); + inst->buffers.output_meta.min_count = + inst->buffers.output.min_count; + inst->buffers.output_meta.extra_count = + inst->buffers.output.extra_count; + inst->buffers.output_meta.actual_count = + inst->buffers.output.actual_count; + inst->buffers.output_meta.size = fmt->fmt.meta.buffersize; return 0; } diff --git a/driver/vidc/src/msm_vidc_platform.c b/driver/vidc/src/msm_vidc_platform.c index 3840106459..4046c3d4b0 100644 --- a/driver/vidc/src/msm_vidc_platform.c +++ b/driver/vidc/src/msm_vidc_platform.c @@ -36,10 +36,14 @@ static struct v4l2_ioctl_ops msm_v4l2_ioctl_ops_enc = { .vidioc_querycap = msm_v4l2_querycap, .vidioc_enum_fmt_vid_cap = msm_v4l2_enum_fmt, .vidioc_enum_fmt_vid_out = msm_v4l2_enum_fmt, + .vidioc_enum_fmt_meta_cap = msm_v4l2_enum_fmt, + .vidioc_enum_fmt_meta_out = msm_v4l2_enum_fmt, .vidioc_enum_framesizes = msm_v4l2_enum_framesizes, .vidioc_enum_frameintervals = msm_v4l2_enum_frameintervals, .vidioc_try_fmt_vid_cap_mplane = msm_v4l2_try_fmt, .vidioc_try_fmt_vid_out_mplane = msm_v4l2_try_fmt, + .vidioc_try_fmt_meta_cap = msm_v4l2_try_fmt, + .vidioc_try_fmt_meta_out = msm_v4l2_try_fmt, .vidioc_s_fmt_vid_cap = msm_v4l2_s_fmt, .vidioc_s_fmt_vid_out = msm_v4l2_s_fmt, .vidioc_s_fmt_vid_cap_mplane = msm_v4l2_s_fmt, @@ -76,10 +80,14 @@ static struct v4l2_ioctl_ops msm_v4l2_ioctl_ops_dec = { .vidioc_querycap = msm_v4l2_querycap, .vidioc_enum_fmt_vid_cap = msm_v4l2_enum_fmt, .vidioc_enum_fmt_vid_out = msm_v4l2_enum_fmt, + .vidioc_enum_fmt_meta_cap = msm_v4l2_enum_fmt, + .vidioc_enum_fmt_meta_out = msm_v4l2_enum_fmt, .vidioc_enum_framesizes = msm_v4l2_enum_framesizes, .vidioc_enum_frameintervals = msm_v4l2_enum_frameintervals, .vidioc_try_fmt_vid_cap_mplane = msm_v4l2_try_fmt, .vidioc_try_fmt_vid_out_mplane = msm_v4l2_try_fmt, + .vidioc_try_fmt_meta_cap = msm_v4l2_try_fmt, + .vidioc_try_fmt_meta_out = msm_v4l2_try_fmt, .vidioc_s_fmt_vid_cap = msm_v4l2_s_fmt, .vidioc_s_fmt_vid_out = msm_v4l2_s_fmt, .vidioc_s_fmt_vid_cap_mplane = msm_v4l2_s_fmt,