Message ID | 1530530783-9480-1-git-send-email-vgarodia@codeaurora.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 02/07/18 13:26, Vikash Garodia wrote: > There is a requirement to add frame level rate control. > > Signed-off-by: Vikash Garodia <vgarodia@codeaurora.org> > --- > drivers/media/platform/qcom/venus/venc.c | 28 ++++++++++++++++++++++++++++ > 1 file changed, 28 insertions(+) > > diff --git a/drivers/media/platform/qcom/venus/venc.c b/drivers/media/platform/qcom/venus/venc.c > index a2c6a4b..eaf2fa8 100644 > --- a/drivers/media/platform/qcom/venus/venc.c > +++ b/drivers/media/platform/qcom/venus/venc.c > @@ -546,6 +546,33 @@ static int venc_g_parm(struct file *file, void *fh, struct v4l2_streamparm *a) > return 0; > } > > +static int venc_s_ext_ctrls(struct file *file, void *fh, > + struct v4l2_ext_controls *ctrl) > +{ > + struct venus_inst *inst = to_inst(file); > + struct v4l2_ext_control *control; > + u32 ptype, i, ret; > + struct hfi_enable en = { .enable = 1 }; > + void *pdata = NULL; > + > + control = ctrl->controls; > + for (i = 0; i < ctrl->count; i++) { > + switch (control[i].id) { > + case V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE: > + ptype = HFI_PROPERTY_PARAM_VENC_DISABLE_RC_TIMESTAMP; > + en.enable = control[i].value; > + pdata = &en; > + break; > + default: > + return -EINVAL; > + } > + } > + ret = hfi_session_set_property(inst, ptype, pdata); > + if (ret) > + return ret; > + return 0; > +} > + > static int venc_enum_framesizes(struct file *file, void *fh, > struct v4l2_frmsizeenum *fsize) > { > @@ -638,6 +665,7 @@ static int venc_enum_frameintervals(struct file *file, void *fh, > .vidioc_streamoff = v4l2_m2m_ioctl_streamoff, > .vidioc_s_parm = venc_s_parm, > .vidioc_g_parm = venc_g_parm, > + .vidioc_s_ext_ctrl = venc_s_ext_ctrls, No, that's not how you do this. See venc_ctrls.c on how to handle controls. Nacked-by: Hans Verkuil <hans.verkuil@cisco.com> Regards, Hans > .vidioc_enum_framesizes = venc_enum_framesizes, > .vidioc_enum_frameintervals = venc_enum_frameintervals, > .vidioc_subscribe_event = v4l2_ctrl_subscribe_event, >
Hi Vikash, Thank you for the patch! Yet something to improve: [auto build test ERROR on linuxtv-media/master] [also build test ERROR on v4.18-rc3 next-20180702] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Vikash-Garodia/venus-venc-add-support-for-ext-controls/20180702-213140 base: git://linuxtv.org/media_tree.git master config: i386-allmodconfig (attached as .config) compiler: gcc-7 (Debian 7.3.0-16) 7.3.0 reproduce: # save the attached .config to linux build tree make ARCH=i386 All errors (new ones prefixed by >>): >> drivers/media/platform/qcom/venus/venc.c:653:3: error: 'const struct v4l2_ioctl_ops' has no member named 'vidioc_s_ext_ctrl'; did you mean 'vidioc_s_ext_ctrls'? .vidioc_s_ext_ctrl = venc_s_ext_ctrls, ^~~~~~~~~~~~~~~~~ vidioc_s_ext_ctrls >> drivers/media/platform/qcom/venus/venc.c:653:23: error: positional initialization of field in 'struct' declared with 'designated_init' attribute [-Werror=designated-init] .vidioc_s_ext_ctrl = venc_s_ext_ctrls, ^~~~~~~~~~~~~~~~ drivers/media/platform/qcom/venus/venc.c:653:23: note: (near initialization for 'venc_ioctl_ops') >> drivers/media/platform/qcom/venus/venc.c:653:23: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types] drivers/media/platform/qcom/venus/venc.c:653:23: note: (near initialization for 'venc_ioctl_ops.vidioc_try_fmt_vid_out_mplane') cc1: some warnings being treated as errors vim +653 drivers/media/platform/qcom/venus/venc.c 629 630 static const struct v4l2_ioctl_ops venc_ioctl_ops = { 631 .vidioc_querycap = venc_querycap, 632 .vidioc_enum_fmt_vid_cap_mplane = venc_enum_fmt, 633 .vidioc_enum_fmt_vid_out_mplane = venc_enum_fmt, 634 .vidioc_s_fmt_vid_cap_mplane = venc_s_fmt, 635 .vidioc_s_fmt_vid_out_mplane = venc_s_fmt, 636 .vidioc_g_fmt_vid_cap_mplane = venc_g_fmt, 637 .vidioc_g_fmt_vid_out_mplane = venc_g_fmt, 638 .vidioc_try_fmt_vid_cap_mplane = venc_try_fmt, 639 .vidioc_try_fmt_vid_out_mplane = venc_try_fmt, 640 .vidioc_g_selection = venc_g_selection, 641 .vidioc_s_selection = venc_s_selection, 642 .vidioc_reqbufs = v4l2_m2m_ioctl_reqbufs, 643 .vidioc_querybuf = v4l2_m2m_ioctl_querybuf, 644 .vidioc_create_bufs = v4l2_m2m_ioctl_create_bufs, 645 .vidioc_prepare_buf = v4l2_m2m_ioctl_prepare_buf, 646 .vidioc_qbuf = v4l2_m2m_ioctl_qbuf, 647 .vidioc_expbuf = v4l2_m2m_ioctl_expbuf, 648 .vidioc_dqbuf = v4l2_m2m_ioctl_dqbuf, 649 .vidioc_streamon = v4l2_m2m_ioctl_streamon, 650 .vidioc_streamoff = v4l2_m2m_ioctl_streamoff, 651 .vidioc_s_parm = venc_s_parm, 652 .vidioc_g_parm = venc_g_parm, > 653 .vidioc_s_ext_ctrl = venc_s_ext_ctrls, 654 .vidioc_enum_framesizes = venc_enum_framesizes, 655 .vidioc_enum_frameintervals = venc_enum_frameintervals, 656 .vidioc_subscribe_event = v4l2_ctrl_subscribe_event, 657 .vidioc_unsubscribe_event = v4l2_event_unsubscribe, 658 }; 659 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Hi Vikash, Thank you for the patch! Yet something to improve: [auto build test ERROR on linuxtv-media/master] [also build test ERROR on v4.18-rc3 next-20180702] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Vikash-Garodia/venus-venc-add-support-for-ext-controls/20180702-213140 base: git://linuxtv.org/media_tree.git master config: ia64-allmodconfig (attached as .config) compiler: ia64-linux-gcc (GCC) 8.1.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree GCC_VERSION=8.1.0 make.cross ARCH=ia64 All errors (new ones prefixed by >>): drivers/media/platform/qcom/venus/venc.c:653:3: error: 'const struct v4l2_ioctl_ops' has no member named 'vidioc_s_ext_ctrl'; did you mean 'vidioc_s_ext_ctrls'? .vidioc_s_ext_ctrl = venc_s_ext_ctrls, ^~~~~~~~~~~~~~~~~ vidioc_s_ext_ctrls >> drivers/media/platform/qcom/venus/venc.c:653:23: error: initialization of 'int (*)(struct file *, void *, struct v4l2_streamparm *)' from incompatible pointer type 'int (*)(struct file *, void *, struct v4l2_ext_controls *)' [-Werror=incompatible-pointer-types] .vidioc_s_ext_ctrl = venc_s_ext_ctrls, ^~~~~~~~~~~~~~~~ drivers/media/platform/qcom/venus/venc.c:653:23: note: (near initialization for 'venc_ioctl_ops.vidioc_s_parm') cc1: some warnings being treated as errors vim +653 drivers/media/platform/qcom/venus/venc.c 629 630 static const struct v4l2_ioctl_ops venc_ioctl_ops = { 631 .vidioc_querycap = venc_querycap, 632 .vidioc_enum_fmt_vid_cap_mplane = venc_enum_fmt, 633 .vidioc_enum_fmt_vid_out_mplane = venc_enum_fmt, 634 .vidioc_s_fmt_vid_cap_mplane = venc_s_fmt, 635 .vidioc_s_fmt_vid_out_mplane = venc_s_fmt, 636 .vidioc_g_fmt_vid_cap_mplane = venc_g_fmt, 637 .vidioc_g_fmt_vid_out_mplane = venc_g_fmt, 638 .vidioc_try_fmt_vid_cap_mplane = venc_try_fmt, 639 .vidioc_try_fmt_vid_out_mplane = venc_try_fmt, 640 .vidioc_g_selection = venc_g_selection, 641 .vidioc_s_selection = venc_s_selection, 642 .vidioc_reqbufs = v4l2_m2m_ioctl_reqbufs, 643 .vidioc_querybuf = v4l2_m2m_ioctl_querybuf, 644 .vidioc_create_bufs = v4l2_m2m_ioctl_create_bufs, 645 .vidioc_prepare_buf = v4l2_m2m_ioctl_prepare_buf, 646 .vidioc_qbuf = v4l2_m2m_ioctl_qbuf, 647 .vidioc_expbuf = v4l2_m2m_ioctl_expbuf, 648 .vidioc_dqbuf = v4l2_m2m_ioctl_dqbuf, 649 .vidioc_streamon = v4l2_m2m_ioctl_streamon, 650 .vidioc_streamoff = v4l2_m2m_ioctl_streamoff, 651 .vidioc_s_parm = venc_s_parm, 652 .vidioc_g_parm = venc_g_parm, > 653 .vidioc_s_ext_ctrl = venc_s_ext_ctrls, 654 .vidioc_enum_framesizes = venc_enum_framesizes, 655 .vidioc_enum_frameintervals = venc_enum_frameintervals, 656 .vidioc_subscribe_event = v4l2_ctrl_subscribe_event, 657 .vidioc_unsubscribe_event = v4l2_event_unsubscribe, 658 }; 659 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
diff --git a/drivers/media/platform/qcom/venus/venc.c b/drivers/media/platform/qcom/venus/venc.c index a2c6a4b..eaf2fa8 100644 --- a/drivers/media/platform/qcom/venus/venc.c +++ b/drivers/media/platform/qcom/venus/venc.c @@ -546,6 +546,33 @@ static int venc_g_parm(struct file *file, void *fh, struct v4l2_streamparm *a) return 0; } +static int venc_s_ext_ctrls(struct file *file, void *fh, + struct v4l2_ext_controls *ctrl) +{ + struct venus_inst *inst = to_inst(file); + struct v4l2_ext_control *control; + u32 ptype, i, ret; + struct hfi_enable en = { .enable = 1 }; + void *pdata = NULL; + + control = ctrl->controls; + for (i = 0; i < ctrl->count; i++) { + switch (control[i].id) { + case V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE: + ptype = HFI_PROPERTY_PARAM_VENC_DISABLE_RC_TIMESTAMP; + en.enable = control[i].value; + pdata = &en; + break; + default: + return -EINVAL; + } + } + ret = hfi_session_set_property(inst, ptype, pdata); + if (ret) + return ret; + return 0; +} + static int venc_enum_framesizes(struct file *file, void *fh, struct v4l2_frmsizeenum *fsize) { @@ -638,6 +665,7 @@ static int venc_enum_frameintervals(struct file *file, void *fh, .vidioc_streamoff = v4l2_m2m_ioctl_streamoff, .vidioc_s_parm = venc_s_parm, .vidioc_g_parm = venc_g_parm, + .vidioc_s_ext_ctrl = venc_s_ext_ctrls, .vidioc_enum_framesizes = venc_enum_framesizes, .vidioc_enum_frameintervals = venc_enum_frameintervals, .vidioc_subscribe_event = v4l2_ctrl_subscribe_event,
There is a requirement to add frame level rate control. Signed-off-by: Vikash Garodia <vgarodia@codeaurora.org> --- drivers/media/platform/qcom/venus/venc.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+)