media: mediatek: vcodec: Report supported bitrate modes
Commit Message
The media driver supports constant bitrate mode only.
The supported rate control mode is reported through querymenu() and
s_ctrl() fails if non constant bitrate mode (e.g. VBR) is requested.
Signed-off-by: Hirokazu Honda <hiroh@chromium.org>
---
.../media/platform/mediatek/vcodec/mtk_vcodec_enc.c | 11 +++++++++++
1 file changed, 11 insertions(+)
Comments
Dear Hiro,
Thanks for the patch.
On Wed, 2022-06-22 at 17:36 +0900, Hirokazu Honda wrote:
> The media driver supports constant bitrate mode only.
> The supported rate control mode is reported through querymenu() and
> s_ctrl() fails if non constant bitrate mode (e.g. VBR) is requested.
>
> Signed-off-by: Hirokazu Honda <hiroh@chromium.org>
> ---
> .../media/platform/mediatek/vcodec/mtk_vcodec_enc.c | 11
> +++++++++++
> 1 file changed, 11 insertions(+)
>
> diff --git a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_enc.c
> b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_enc.c
> index c21367038c34..98d451ce2545 100644
> --- a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_enc.c
> +++ b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_enc.c
> @@ -50,6 +50,14 @@ static int vidioc_venc_s_ctrl(struct v4l2_ctrl
> *ctrl)
> int ret = 0;
>
> switch (ctrl->id) {
> + case V4L2_CID_MPEG_VIDEO_BITRATE_MODE:
> + mtk_v4l2_debug(2, "V4L2_CID_MPEG_VIDEO_BITRATE_MODE
> val= %d",
> + ctrl->val);
> + if (ctrl->val != V4L2_MPEG_VIDEO_BITRATE_MODE_CBR) {
> + mtk_v4l2_err("Unsupported bitrate mode =%d",
> ctrl->val);
> + ret = -EINVAL;
> + }
> + break;
> case V4L2_CID_MPEG_VIDEO_BITRATE:
> mtk_v4l2_debug(2, "V4L2_CID_MPEG_VIDEO_BITRATE val =
> %d",
> ctrl->val);
> @@ -1373,6 +1381,9 @@ int mtk_vcodec_enc_ctrls_setup(struct
> mtk_vcodec_ctx *ctx)
> 0, V4L2_MPEG_VIDEO_H264_LEVEL_4_0);
> v4l2_ctrl_new_std_menu(handler, ops,
> V4L2_CID_MPEG_VIDEO_VP8_PROFILE,
> V4L2_MPEG_VIDEO_VP8_PROFILE_0, 0,
> V4L2_MPEG_VIDEO_VP8_PROFILE_0);
> + v4l2_ctrl_new_std_menu(handler, ops,
> V4L2_CID_MPEG_VIDEO_BITRATE_MODE,
> + V4L2_MPEG_VIDEO_BITRATE_MODE_CBR,
> + 0, V4L2_MPEG_VIDEO_BITRATE_MODE_CBR);
>
>
> if (handler->error) {
Reviewed-by: Irui Wang <irui.wang@mediatek.com>
On Wed, Jun 22, 2022 at 4:37 PM Hirokazu Honda <hiroh@chromium.org> wrote:
>
> The media driver supports constant bitrate mode only.
> The supported rate control mode is reported through querymenu() and
> s_ctrl() fails if non constant bitrate mode (e.g. VBR) is requested.
>
> Signed-off-by: Hirokazu Honda <hiroh@chromium.org>
> ---
> .../media/platform/mediatek/vcodec/mtk_vcodec_enc.c | 11 +++++++++++
> 1 file changed, 11 insertions(+)
>
> diff --git a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_enc.c b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_enc.c
> index c21367038c34..98d451ce2545 100644
> --- a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_enc.c
> +++ b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_enc.c
> @@ -50,6 +50,14 @@ static int vidioc_venc_s_ctrl(struct v4l2_ctrl *ctrl)
> int ret = 0;
>
> switch (ctrl->id) {
> + case V4L2_CID_MPEG_VIDEO_BITRATE_MODE:
> + mtk_v4l2_debug(2, "V4L2_CID_MPEG_VIDEO_BITRATE_MODE val= %d",
> + ctrl->val);
> + if (ctrl->val != V4L2_MPEG_VIDEO_BITRATE_MODE_CBR) {
> + mtk_v4l2_err("Unsupported bitrate mode =%d", ctrl->val);
> + ret = -EINVAL;
I wonder if this code will ever actually be hit. This driver uses
v4l2_ctrl_handler, and IIUC all controls are prevalidated by the core
before this callback is called.
ChenYu
> + }
> + break;
> case V4L2_CID_MPEG_VIDEO_BITRATE:
> mtk_v4l2_debug(2, "V4L2_CID_MPEG_VIDEO_BITRATE val = %d",
> ctrl->val);
> @@ -1373,6 +1381,9 @@ int mtk_vcodec_enc_ctrls_setup(struct mtk_vcodec_ctx *ctx)
> 0, V4L2_MPEG_VIDEO_H264_LEVEL_4_0);
> v4l2_ctrl_new_std_menu(handler, ops, V4L2_CID_MPEG_VIDEO_VP8_PROFILE,
> V4L2_MPEG_VIDEO_VP8_PROFILE_0, 0, V4L2_MPEG_VIDEO_VP8_PROFILE_0);
> + v4l2_ctrl_new_std_menu(handler, ops, V4L2_CID_MPEG_VIDEO_BITRATE_MODE,
> + V4L2_MPEG_VIDEO_BITRATE_MODE_CBR,
> + 0, V4L2_MPEG_VIDEO_BITRATE_MODE_CBR);
>
>
> if (handler->error) {
> --
> 2.37.0.rc0.104.g0611611a94-goog
>
@@ -50,6 +50,14 @@ static int vidioc_venc_s_ctrl(struct v4l2_ctrl *ctrl)
int ret = 0;
switch (ctrl->id) {
+ case V4L2_CID_MPEG_VIDEO_BITRATE_MODE:
+ mtk_v4l2_debug(2, "V4L2_CID_MPEG_VIDEO_BITRATE_MODE val= %d",
+ ctrl->val);
+ if (ctrl->val != V4L2_MPEG_VIDEO_BITRATE_MODE_CBR) {
+ mtk_v4l2_err("Unsupported bitrate mode =%d", ctrl->val);
+ ret = -EINVAL;
+ }
+ break;
case V4L2_CID_MPEG_VIDEO_BITRATE:
mtk_v4l2_debug(2, "V4L2_CID_MPEG_VIDEO_BITRATE val = %d",
ctrl->val);
@@ -1373,6 +1381,9 @@ int mtk_vcodec_enc_ctrls_setup(struct mtk_vcodec_ctx *ctx)
0, V4L2_MPEG_VIDEO_H264_LEVEL_4_0);
v4l2_ctrl_new_std_menu(handler, ops, V4L2_CID_MPEG_VIDEO_VP8_PROFILE,
V4L2_MPEG_VIDEO_VP8_PROFILE_0, 0, V4L2_MPEG_VIDEO_VP8_PROFILE_0);
+ v4l2_ctrl_new_std_menu(handler, ops, V4L2_CID_MPEG_VIDEO_BITRATE_MODE,
+ V4L2_MPEG_VIDEO_BITRATE_MODE_CBR,
+ 0, V4L2_MPEG_VIDEO_BITRATE_MODE_CBR);
if (handler->error) {