linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Tomasz Figa <tfiga@chromium.org>
To: sgorle@codeaurora.org
Cc: Stanimir Varbanov <stanimir.varbanov@linaro.org>,
	Hans Verkuil <hverkuil@xs4all.nl>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Linux Media Mailing List <linux-media@vger.kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	linux-arm-msm <linux-arm-msm@vger.kernel.org>,
	Alexandre Courbot <acourbot@chromium.org>,
	vgarodia@codeaurora.org
Subject: Re: [PATCH v1 2/5] media: venus: dynamically configure codec type
Date: Wed, 14 Nov 2018 19:56:33 +0900	[thread overview]
Message-ID: <CAAFQd5D4p_1PGCYzeKTYJovS6PVA7rho0wj_knvr4Vm3gDOtTw@mail.gmail.com> (raw)
In-Reply-To: <1538222432-25894-3-git-send-email-sgorle@codeaurora.org>

On Sat, Sep 29, 2018 at 9:01 PM Srinu Gorle <sgorle@codeaurora.org> wrote:
>
> - currently video decoder instance is hardcoded to H.264 video format.
> - this change enables video decoder dynamically configure to
>   any supported video format.
>
> Signed-off-by: Srinu Gorle <sgorle@codeaurora.org>
> ---
>  drivers/media/platform/qcom/venus/helpers.c | 51 ++++++++++++++---------------
>  drivers/media/platform/qcom/venus/helpers.h |  1 +
>  drivers/media/platform/qcom/venus/vdec.c    |  2 ++
>  3 files changed, 27 insertions(+), 27 deletions(-)
>
> diff --git a/drivers/media/platform/qcom/venus/helpers.c b/drivers/media/platform/qcom/venus/helpers.c
> index 822a853..c82dbac 100644
> --- a/drivers/media/platform/qcom/venus/helpers.c
> +++ b/drivers/media/platform/qcom/venus/helpers.c
> @@ -36,47 +36,44 @@ struct intbuf {
>         unsigned long attrs;
>  };
>
> -bool venus_helper_check_codec(struct venus_inst *inst, u32 v4l2_pixfmt)
> +u32 v4l2_venus_fmt(u32 pixfmt)
>  {
> -       struct venus_core *core = inst->core;
> -       u32 session_type = inst->session_type;
> -       u32 codec;
> -
> -       switch (v4l2_pixfmt) {
> +       switch (pixfmt) {
>         case V4L2_PIX_FMT_H264:
> -               codec = HFI_VIDEO_CODEC_H264;
> -               break;
> +       case V4L2_PIX_FMT_H264_NO_SC:
> +               return HFI_VIDEO_CODEC_H264;
>         case V4L2_PIX_FMT_H263:
> -               codec = HFI_VIDEO_CODEC_H263;
> -               break;
> +               return HFI_VIDEO_CODEC_H263;
>         case V4L2_PIX_FMT_MPEG1:
> -               codec = HFI_VIDEO_CODEC_MPEG1;
> -               break;
> +               return HFI_VIDEO_CODEC_MPEG1;
>         case V4L2_PIX_FMT_MPEG2:
> -               codec = HFI_VIDEO_CODEC_MPEG2;
> -               break;
> +               return HFI_VIDEO_CODEC_MPEG2;
>         case V4L2_PIX_FMT_MPEG4:
> -               codec = HFI_VIDEO_CODEC_MPEG4;
> -               break;
> +               return HFI_VIDEO_CODEC_MPEG4;
>         case V4L2_PIX_FMT_VC1_ANNEX_G:
>         case V4L2_PIX_FMT_VC1_ANNEX_L:
> -               codec = HFI_VIDEO_CODEC_VC1;
> -               break;
> +               return HFI_VIDEO_CODEC_VC1;
>         case V4L2_PIX_FMT_VP8:
> -               codec = HFI_VIDEO_CODEC_VP8;
> -               break;
> +               return HFI_VIDEO_CODEC_VP8;
>         case V4L2_PIX_FMT_VP9:
> -               codec = HFI_VIDEO_CODEC_VP9;
> -               break;
> +               return HFI_VIDEO_CODEC_VP9;
>         case V4L2_PIX_FMT_XVID:
> -               codec = HFI_VIDEO_CODEC_DIVX;
> -               break;
> +               return HFI_VIDEO_CODEC_DIVX;
>         case V4L2_PIX_FMT_HEVC:
> -               codec = HFI_VIDEO_CODEC_HEVC;
> -               break;
> +               return HFI_VIDEO_CODEC_HEVC;
>         default:
> -               return false;
> +               return 0;
>         }
> +}
> +EXPORT_SYMBOL_GPL(v4l2_venus_fmt);
> +
> +bool venus_helper_check_codec(struct venus_inst *inst, u32 v4l2_pixfmt)
> +{
> +       struct venus_core *core = inst->core;
> +       u32 session_type = inst->session_type;
> +       u32 codec;
> +
> +       codec = v4l2_venus_fmt(v4l2_pixfmt);
>
>         if (session_type == VIDC_SESSION_TYPE_ENC && core->enc_codecs & codec)
>                 return true;
> diff --git a/drivers/media/platform/qcom/venus/helpers.h b/drivers/media/platform/qcom/venus/helpers.h
> index 3de0c44..725831d 100644
> --- a/drivers/media/platform/qcom/venus/helpers.h
> +++ b/drivers/media/platform/qcom/venus/helpers.h
> @@ -19,6 +19,7 @@
>
>  struct venus_inst;
>
> +u32 v4l2_venus_fmt(u32 pixfmt);
>  bool venus_helper_check_codec(struct venus_inst *inst, u32 v4l2_pixfmt);
>  struct vb2_v4l2_buffer *venus_helper_find_buf(struct venus_inst *inst,
>                                               unsigned int type, u32 idx);
> diff --git a/drivers/media/platform/qcom/venus/vdec.c b/drivers/media/platform/qcom/venus/vdec.c
> index 98675db..afe3b36 100644
> --- a/drivers/media/platform/qcom/venus/vdec.c
> +++ b/drivers/media/platform/qcom/venus/vdec.c
> @@ -413,6 +413,8 @@ static int vdec_enum_framesizes(struct file *file, void *fh,
>                                   V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE);
>                 if (!fmt)
>                         return -EINVAL;
> +               inst->fmt_out = fmt;
> +               inst->hfi_codec = v4l2_venus_fmt(fmt->pixfmt);

That's wrong. ENUM_FRAMESIZES (and any other ENUM_* or G_* ioctl) must
not affect driver state or result in any other side effects.

Best regards,
Tomasz

  reply	other threads:[~2018-11-14 10:56 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-29 12:00 [PATCH v1 0/5] Venus - Decode reconfig sequence Srinu Gorle
2018-09-29 12:00 ` [PATCH v1 1/5] media: venus: handle video decoder resolution change Srinu Gorle
2018-11-14 10:50   ` Tomasz Figa
2018-09-29 12:00 ` [PATCH v1 2/5] media: venus: dynamically configure codec type Srinu Gorle
2018-11-14 10:56   ` Tomasz Figa [this message]
2018-09-29 12:00 ` [PATCH v1 3/5] media: venus: do not destroy video session during queue setup Srinu Gorle
2018-11-09  9:59   ` Stanimir Varbanov
2018-11-14 11:02     ` Tomasz Figa
2018-09-29 12:00 ` [PATCH v1 4/5] media: venus: video decoder drop frames handling Srinu Gorle
2018-11-14 11:04   ` Tomasz Figa
2018-09-29 12:00 ` [PATCH v1 5/5] media: venus: update number of bytes used field properly for EOS frames Srinu Gorle
2018-11-08 10:16   ` Stanimir Varbanov
2018-11-12  8:12     ` Alexandre Courbot
2018-11-12 12:20       ` Stanimir Varbanov
2018-11-13  9:31         ` 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=CAAFQd5D4p_1PGCYzeKTYJovS6PVA7rho0wj_knvr4Vm3gDOtTw@mail.gmail.com \
    --to=tfiga@chromium.org \
    --cc=acourbot@chromium.org \
    --cc=hverkuil@xs4all.nl \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@kernel.org \
    --cc=sgorle@codeaurora.org \
    --cc=stanimir.varbanov@linaro.org \
    --cc=vgarodia@codeaurora.org \
    --subject='Re: [PATCH v1 2/5] media: venus: dynamically configure codec type' \
    /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: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).