From: Alexandre Courbot <acourbot@chromium.org> To: Tiffany Lin <tiffany.lin@mediatek.com>, Andrew-CT Chen <andrew-ct.chen@mediatek.com>, Hans Verkuil <hverkuil-cisco@xs4all.nl>, Yunfei Dong <yunfei.dong@mediatek.com>, Maoguang Meng <maoguang.meng@mediatek.com> Cc: linux-media@vger.kernel.org, linux-mediatek@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Alexandre Courbot <acourbot@chromium.org> Subject: [PATCH v3 14/16] media: mtk-vcodec: venc: support ENUM_FRAMESIZES on OUTPUT formats Date: Mon, 13 Jul 2020 15:08:40 +0900 [thread overview] Message-ID: <20200713060842.471356-15-acourbot@chromium.org> (raw) In-Reply-To: <20200713060842.471356-1-acourbot@chromium.org> v4l2-compliance requires ENUM_FRAMESIZES to support OUTPUT formats. Reuse mtk_venc_find_format() to make sure both queues are considered when serving an ENUM_FRAMESIZES. Signed-off-by: Alexandre Courbot <acourbot@chromium.org> --- .../platform/mtk-vcodec/mtk_vcodec_enc.c | 71 +++++++++---------- 1 file changed, 33 insertions(+), 38 deletions(-) diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c index f8d4fbe927f9..1b79185cf922 100644 --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c @@ -123,28 +123,44 @@ static int vidioc_enum_fmt(struct v4l2_fmtdesc *f, return 0; } +static const struct mtk_video_fmt *mtk_venc_find_format(u32 fourcc, + const struct mtk_vcodec_enc_pdata *pdata) +{ + const struct mtk_video_fmt *fmt; + unsigned int k; + + for (k = 0; k < pdata->num_capture_formats; k++) { + fmt = &pdata->capture_formats[k]; + if (fmt->fourcc == fourcc) + return fmt; + } + + for (k = 0; k < pdata->num_output_formats; k++) { + fmt = &pdata->output_formats[k]; + if (fmt->fourcc == fourcc) + return fmt; + } + + return NULL; +} + static int vidioc_enum_framesizes(struct file *file, void *fh, struct v4l2_frmsizeenum *fsize) { - const struct mtk_vcodec_enc_pdata *pdata = - fh_to_ctx(fh)->dev->venc_pdata; - int i = 0; + const struct mtk_video_fmt *fmt; if (fsize->index != 0) return -EINVAL; - for (i = 0; i < pdata->num_capture_formats; ++i) { - const struct mtk_video_fmt *fmt = &pdata->capture_formats[i]; + fmt = mtk_venc_find_format(fsize->pixel_format, + fh_to_ctx(fh)->dev->venc_pdata); + if (!fmt) + return -EINVAL; - if (fsize->pixel_format != fmt->fourcc) - continue; + fsize->type = V4L2_FRMSIZE_TYPE_STEPWISE; + fsize->stepwise = mtk_venc_framesizes; - fsize->type = V4L2_FRMSIZE_TYPE_STEPWISE; - fsize->stepwise = mtk_venc_framesizes; - return 0; - } - - return -EINVAL; + return 0; } static int vidioc_enum_fmt_vid_cap(struct file *file, void *priv, @@ -222,27 +238,6 @@ static struct mtk_q_data *mtk_venc_get_q_data(struct mtk_vcodec_ctx *ctx, return &ctx->q_data[MTK_Q_DATA_DST]; } -static const struct mtk_video_fmt *mtk_venc_find_format(struct v4l2_format *f, - const struct mtk_vcodec_enc_pdata *pdata) -{ - const struct mtk_video_fmt *fmt; - unsigned int k; - - for (k = 0; k < pdata->num_capture_formats; k++) { - fmt = &pdata->capture_formats[k]; - if (fmt->fourcc == f->fmt.pix.pixelformat) - return fmt; - } - - for (k = 0; k < pdata->num_output_formats; k++) { - fmt = &pdata->output_formats[k]; - if (fmt->fourcc == f->fmt.pix.pixelformat) - return fmt; - } - - return NULL; -} - /* V4L2 specification suggests the driver corrects the format struct if any of * the dimensions is unsupported */ @@ -403,7 +398,7 @@ static int vidioc_venc_s_fmt_cap(struct file *file, void *priv, return -EINVAL; } - fmt = mtk_venc_find_format(f, pdata); + fmt = mtk_venc_find_format(f->fmt.pix.pixelformat, pdata); if (!fmt) { fmt = &ctx->dev->venc_pdata->capture_formats[0]; f->fmt.pix.pixelformat = fmt->fourcc; @@ -467,7 +462,7 @@ static int vidioc_venc_s_fmt_out(struct file *file, void *priv, return -EINVAL; } - fmt = mtk_venc_find_format(f, pdata); + fmt = mtk_venc_find_format(f->fmt.pix.pixelformat, pdata); if (!fmt) { fmt = &ctx->dev->venc_pdata->output_formats[0]; f->fmt.pix.pixelformat = fmt->fourcc; @@ -550,7 +545,7 @@ static int vidioc_try_fmt_vid_cap_mplane(struct file *file, void *priv, struct mtk_vcodec_ctx *ctx = fh_to_ctx(priv); const struct mtk_vcodec_enc_pdata *pdata = ctx->dev->venc_pdata; - fmt = mtk_venc_find_format(f, pdata); + fmt = mtk_venc_find_format(f->fmt.pix.pixelformat, pdata); if (!fmt) { fmt = &ctx->dev->venc_pdata->capture_formats[0]; f->fmt.pix.pixelformat = fmt->fourcc; @@ -570,7 +565,7 @@ static int vidioc_try_fmt_vid_out_mplane(struct file *file, void *priv, struct mtk_vcodec_ctx *ctx = fh_to_ctx(priv); const struct mtk_vcodec_enc_pdata *pdata = ctx->dev->venc_pdata; - fmt = mtk_venc_find_format(f, pdata); + fmt = mtk_venc_find_format(f->fmt.pix.pixelformat, pdata); if (!fmt) { fmt = &ctx->dev->venc_pdata->output_formats[0]; f->fmt.pix.pixelformat = fmt->fourcc; -- 2.27.0.383.g050319c2ae-goog
WARNING: multiple messages have this Message-ID (diff)
From: Alexandre Courbot <acourbot@chromium.org> To: Tiffany Lin <tiffany.lin@mediatek.com>, Andrew-CT Chen <andrew-ct.chen@mediatek.com>, Hans Verkuil <hverkuil-cisco@xs4all.nl>, Yunfei Dong <yunfei.dong@mediatek.com>, Maoguang Meng <maoguang.meng@mediatek.com> Cc: devicetree@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org, Alexandre Courbot <acourbot@chromium.org>, linux-media@vger.kernel.org Subject: [PATCH v3 14/16] media: mtk-vcodec: venc: support ENUM_FRAMESIZES on OUTPUT formats Date: Mon, 13 Jul 2020 15:08:40 +0900 [thread overview] Message-ID: <20200713060842.471356-15-acourbot@chromium.org> (raw) In-Reply-To: <20200713060842.471356-1-acourbot@chromium.org> v4l2-compliance requires ENUM_FRAMESIZES to support OUTPUT formats. Reuse mtk_venc_find_format() to make sure both queues are considered when serving an ENUM_FRAMESIZES. Signed-off-by: Alexandre Courbot <acourbot@chromium.org> --- .../platform/mtk-vcodec/mtk_vcodec_enc.c | 71 +++++++++---------- 1 file changed, 33 insertions(+), 38 deletions(-) diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c index f8d4fbe927f9..1b79185cf922 100644 --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c @@ -123,28 +123,44 @@ static int vidioc_enum_fmt(struct v4l2_fmtdesc *f, return 0; } +static const struct mtk_video_fmt *mtk_venc_find_format(u32 fourcc, + const struct mtk_vcodec_enc_pdata *pdata) +{ + const struct mtk_video_fmt *fmt; + unsigned int k; + + for (k = 0; k < pdata->num_capture_formats; k++) { + fmt = &pdata->capture_formats[k]; + if (fmt->fourcc == fourcc) + return fmt; + } + + for (k = 0; k < pdata->num_output_formats; k++) { + fmt = &pdata->output_formats[k]; + if (fmt->fourcc == fourcc) + return fmt; + } + + return NULL; +} + static int vidioc_enum_framesizes(struct file *file, void *fh, struct v4l2_frmsizeenum *fsize) { - const struct mtk_vcodec_enc_pdata *pdata = - fh_to_ctx(fh)->dev->venc_pdata; - int i = 0; + const struct mtk_video_fmt *fmt; if (fsize->index != 0) return -EINVAL; - for (i = 0; i < pdata->num_capture_formats; ++i) { - const struct mtk_video_fmt *fmt = &pdata->capture_formats[i]; + fmt = mtk_venc_find_format(fsize->pixel_format, + fh_to_ctx(fh)->dev->venc_pdata); + if (!fmt) + return -EINVAL; - if (fsize->pixel_format != fmt->fourcc) - continue; + fsize->type = V4L2_FRMSIZE_TYPE_STEPWISE; + fsize->stepwise = mtk_venc_framesizes; - fsize->type = V4L2_FRMSIZE_TYPE_STEPWISE; - fsize->stepwise = mtk_venc_framesizes; - return 0; - } - - return -EINVAL; + return 0; } static int vidioc_enum_fmt_vid_cap(struct file *file, void *priv, @@ -222,27 +238,6 @@ static struct mtk_q_data *mtk_venc_get_q_data(struct mtk_vcodec_ctx *ctx, return &ctx->q_data[MTK_Q_DATA_DST]; } -static const struct mtk_video_fmt *mtk_venc_find_format(struct v4l2_format *f, - const struct mtk_vcodec_enc_pdata *pdata) -{ - const struct mtk_video_fmt *fmt; - unsigned int k; - - for (k = 0; k < pdata->num_capture_formats; k++) { - fmt = &pdata->capture_formats[k]; - if (fmt->fourcc == f->fmt.pix.pixelformat) - return fmt; - } - - for (k = 0; k < pdata->num_output_formats; k++) { - fmt = &pdata->output_formats[k]; - if (fmt->fourcc == f->fmt.pix.pixelformat) - return fmt; - } - - return NULL; -} - /* V4L2 specification suggests the driver corrects the format struct if any of * the dimensions is unsupported */ @@ -403,7 +398,7 @@ static int vidioc_venc_s_fmt_cap(struct file *file, void *priv, return -EINVAL; } - fmt = mtk_venc_find_format(f, pdata); + fmt = mtk_venc_find_format(f->fmt.pix.pixelformat, pdata); if (!fmt) { fmt = &ctx->dev->venc_pdata->capture_formats[0]; f->fmt.pix.pixelformat = fmt->fourcc; @@ -467,7 +462,7 @@ static int vidioc_venc_s_fmt_out(struct file *file, void *priv, return -EINVAL; } - fmt = mtk_venc_find_format(f, pdata); + fmt = mtk_venc_find_format(f->fmt.pix.pixelformat, pdata); if (!fmt) { fmt = &ctx->dev->venc_pdata->output_formats[0]; f->fmt.pix.pixelformat = fmt->fourcc; @@ -550,7 +545,7 @@ static int vidioc_try_fmt_vid_cap_mplane(struct file *file, void *priv, struct mtk_vcodec_ctx *ctx = fh_to_ctx(priv); const struct mtk_vcodec_enc_pdata *pdata = ctx->dev->venc_pdata; - fmt = mtk_venc_find_format(f, pdata); + fmt = mtk_venc_find_format(f->fmt.pix.pixelformat, pdata); if (!fmt) { fmt = &ctx->dev->venc_pdata->capture_formats[0]; f->fmt.pix.pixelformat = fmt->fourcc; @@ -570,7 +565,7 @@ static int vidioc_try_fmt_vid_out_mplane(struct file *file, void *priv, struct mtk_vcodec_ctx *ctx = fh_to_ctx(priv); const struct mtk_vcodec_enc_pdata *pdata = ctx->dev->venc_pdata; - fmt = mtk_venc_find_format(f, pdata); + fmt = mtk_venc_find_format(f->fmt.pix.pixelformat, pdata); if (!fmt) { fmt = &ctx->dev->venc_pdata->output_formats[0]; f->fmt.pix.pixelformat = fmt->fourcc; -- 2.27.0.383.g050319c2ae-goog _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek
next prev parent reply other threads:[~2020-07-13 6:09 UTC|newest] Thread overview: 78+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-07-13 6:08 [PATCH v3 00/16] mtk-vcodec: venc: support for MT8183 and v4l2-compliance fixes Alexandre Courbot 2020-07-13 6:08 ` Alexandre Courbot 2020-07-13 6:08 ` [PATCH v3 01/16] media: mtk-vcodec: abstract firmware interface Alexandre Courbot 2020-07-13 6:08 ` Alexandre Courbot 2020-07-22 21:23 ` Ezequiel Garcia 2020-07-22 21:23 ` Ezequiel Garcia 2020-07-27 9:06 ` Alexandre Courbot 2020-07-27 9:06 ` Alexandre Courbot 2020-07-27 14:24 ` Ezequiel Garcia 2020-07-27 14:24 ` Ezequiel Garcia 2020-07-27 14:25 ` Ezequiel Garcia 2020-07-27 14:25 ` Ezequiel Garcia 2020-08-21 10:35 ` Alexandre Courbot 2020-08-21 10:35 ` Alexandre Courbot 2020-08-21 10:34 ` Alexandre Courbot 2020-08-21 10:34 ` Alexandre Courbot 2020-07-13 6:08 ` [PATCH v3 02/16] dt-bindings: media: mtk-vcodec: document SCP node Alexandre Courbot 2020-07-13 6:08 ` Alexandre Courbot 2020-07-13 6:20 ` Chen-Yu Tsai 2020-07-13 6:20 ` Chen-Yu Tsai 2020-08-21 10:35 ` Alexandre Courbot 2020-08-21 10:35 ` Alexandre Courbot 2020-07-22 21:37 ` Ezequiel Garcia 2020-07-22 21:37 ` Ezequiel Garcia 2020-07-27 9:06 ` Alexandre Courbot 2020-07-27 9:06 ` Alexandre Courbot 2020-07-27 14:12 ` Ezequiel Garcia 2020-07-27 14:12 ` Ezequiel Garcia 2020-07-13 6:08 ` [PATCH v3 03/16] media: mtk-vcodec: add SCP firmware ops Alexandre Courbot 2020-07-13 6:08 ` Alexandre Courbot 2020-07-22 21:39 ` Ezequiel Garcia 2020-07-22 21:39 ` Ezequiel Garcia 2020-07-27 9:06 ` Alexandre Courbot 2020-07-27 9:06 ` Alexandre Courbot 2020-07-27 14:09 ` Ezequiel Garcia 2020-07-27 14:09 ` Ezequiel Garcia 2020-08-21 10:35 ` Alexandre Courbot 2020-08-21 10:35 ` Alexandre Courbot 2020-07-13 6:08 ` [PATCH v3 04/16] media: mtk-vcodec: venc: support SCP firmware Alexandre Courbot 2020-07-13 6:08 ` Alexandre Courbot 2020-07-24 21:13 ` Ezequiel Garcia 2020-07-24 21:13 ` Ezequiel Garcia 2020-07-27 9:06 ` Alexandre Courbot 2020-07-27 9:06 ` Alexandre Courbot 2020-07-27 14:07 ` Ezequiel Garcia 2020-07-27 14:07 ` Ezequiel Garcia 2020-08-21 10:35 ` Alexandre Courbot 2020-08-21 10:35 ` Alexandre Courbot 2020-07-13 6:08 ` [PATCH v3 05/16] media: mtk-vcodec: venc: handle firmware version field Alexandre Courbot 2020-07-13 6:08 ` Alexandre Courbot 2020-07-13 6:08 ` [PATCH v3 06/16] media: mtk-vcodec: venc: specify bitrate range per-chip Alexandre Courbot 2020-07-13 6:08 ` Alexandre Courbot 2020-07-13 6:08 ` [PATCH v3 07/16] media: mtk-vcodec: venc: specify supported formats per-chip Alexandre Courbot 2020-07-13 6:08 ` Alexandre Courbot 2020-07-26 14:29 ` Ezequiel Garcia 2020-07-26 14:29 ` Ezequiel Garcia 2020-07-27 9:06 ` Alexandre Courbot 2020-07-27 9:06 ` Alexandre Courbot 2020-07-13 6:08 ` [PATCH v3 08/16] dt-bindings: media: document mediatek,mt8183-vcodec-enc Alexandre Courbot 2020-07-13 6:08 ` [PATCH v3 08/16] dt-bindings: media: document mediatek, mt8183-vcodec-enc Alexandre Courbot 2020-07-13 23:34 ` [PATCH v3 08/16] dt-bindings: media: document mediatek,mt8183-vcodec-enc Rob Herring 2020-07-13 23:34 ` Rob Herring 2020-07-13 6:08 ` [PATCH v3 09/16] media: mtk-vcodec: add support for MT8183 encoder Alexandre Courbot 2020-07-13 6:08 ` Alexandre Courbot 2020-07-13 6:08 ` [PATCH v3 10/16] Revert "media: mtk-vcodec: Remove extra area allocation in an input buffer on encoding" Alexandre Courbot 2020-07-13 6:08 ` Alexandre Courbot 2020-07-13 6:08 ` [PATCH v3 11/16] media: mtk-vcodec: venc support MIN_OUTPUT_BUFFERS control Alexandre Courbot 2020-07-13 6:08 ` Alexandre Courbot 2020-07-13 6:08 ` [PATCH v3 12/16] media: mtk-vcodec: venc: set OUTPUT buffers field to V4L2_FIELD_NONE Alexandre Courbot 2020-07-13 6:08 ` Alexandre Courbot 2020-07-13 6:08 ` [PATCH v3 13/16] media: mtk-vcodec: venc: use platform data for ENUM_FRAMESIZES Alexandre Courbot 2020-07-13 6:08 ` Alexandre Courbot 2020-07-13 6:08 ` Alexandre Courbot [this message] 2020-07-13 6:08 ` [PATCH v3 14/16] media: mtk-vcodec: venc: support ENUM_FRAMESIZES on OUTPUT formats Alexandre Courbot 2020-07-13 6:08 ` [PATCH v3 15/16] media: mtk-vcodec: venc: set default time per frame Alexandre Courbot 2020-07-13 6:08 ` Alexandre Courbot 2020-07-13 6:08 ` [PATCH v3 16/16] media: mtk-vcodec: venc: fix invalid time per frame in S_PARM Alexandre Courbot 2020-07-13 6:08 ` Alexandre Courbot
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20200713060842.471356-15-acourbot@chromium.org \ --to=acourbot@chromium.org \ --cc=andrew-ct.chen@mediatek.com \ --cc=devicetree@vger.kernel.org \ --cc=hverkuil-cisco@xs4all.nl \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-media@vger.kernel.org \ --cc=linux-mediatek@lists.infradead.org \ --cc=maoguang.meng@mediatek.com \ --cc=tiffany.lin@mediatek.com \ --cc=yunfei.dong@mediatek.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.