All of lore.kernel.org
 help / color / mirror / Atom feed
From: Benjamin Gaignard <benjamin.gaignard@collabora.com>
To: Ezequiel Garcia <ezequiel@collabora.com>,
	p.zabel@pengutronix.de, mchehab@kernel.org, robh+dt@kernel.org,
	shawnguo@kernel.org, s.hauer@pengutronix.de,
	kernel@pengutronix.de, festevam@gmail.com, linux-imx@nxp.com,
	gregkh@linuxfoundation.org, mripard@kernel.org,
	paul.kocialkowski@bootlin.com, wens@csie.org,
	jernej.skrabec@siol.net, krzk@kernel.org, shengjiu.wang@nxp.com,
	adrian.ratiu@collabora.com, aisheng.dong@nxp.com,
	peng.fan@nxp.com, Anson.Huang@nxp.com, hverkuil-cisco@xs4all.nl
Cc: linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org,
	devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, devel@driverdev.osuosl.org,
	kernel@collabora.com
Subject: Re: [PATCH v1 13/18] media: hantro: Introduce G2/HEVC decoder
Date: Thu, 18 Feb 2021 11:43:43 +0100	[thread overview]
Message-ID: <1fab0734-f1db-21ee-152c-4b289be31e4a@collabora.com> (raw)
In-Reply-To: <bb410fde0a2f50cc34840e091c3d9c1395601514.camel@collabora.com>


Le 17/02/2021 à 21:45, Ezequiel Garcia a écrit :
> Hi Benjamin,
>
> Before I review the implementation in detail,
> there's one thing that looks suspicious.
>
> On Wed, 2021-02-17 at 09:03 +0100, Benjamin Gaignard wrote:
>> Implement all the logic to get G2 hardware decoding HEVC frames.
>> It support up level 5.1 HEVC stream.
>> It doesn't support yet 10 bits formats or scaling feature.
>>
>> Add HANTRO HEVC dedicated control to skip some bits at the beginning
>> of the slice header. That is very specific to this hardware so can't
>> go into uapi structures. Compute the needed value is complex and require
>> information from the stream that only the userland knows so let it
>> provide the correct value to the driver.
>>
>> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
>> Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
>> Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com>
>> ---
>>   drivers/staging/media/hantro/Makefile         |   2 +
>>   drivers/staging/media/hantro/hantro_drv.c     |  41 ++
>>   .../staging/media/hantro/hantro_g2_hevc_dec.c | 637 ++++++++++++++++++
>>   drivers/staging/media/hantro/hantro_g2_regs.h | 198 ++++++
>>   drivers/staging/media/hantro/hantro_hevc.c    | 274 ++++++++
>>   drivers/staging/media/hantro/hantro_hw.h      |  14 +
>>   6 files changed, 1166 insertions(+)
>>   create mode 100644 drivers/staging/media/hantro/hantro_g2_hevc_dec.c
>>   create mode 100644 drivers/staging/media/hantro/hantro_g2_regs.h
>>   create mode 100644 drivers/staging/media/hantro/hantro_hevc.c
>>
>> diff --git a/drivers/staging/media/hantro/Makefile b/drivers/staging/media/hantro/Makefile
>> index 743ce08eb184..0357f1772267 100644
>> --- a/drivers/staging/media/hantro/Makefile
>> +++ b/drivers/staging/media/hantro/Makefile
>> @@ -9,12 +9,14 @@ hantro-vpu-y += \
>>                  hantro_h1_jpeg_enc.o \
>>                  hantro_g1_h264_dec.o \
>>                  hantro_g1_mpeg2_dec.o \
>> +               hantro_g2_hevc_dec.o \
>>                  hantro_g1_vp8_dec.o \
>>                  rk3399_vpu_hw_jpeg_enc.o \
>>                  rk3399_vpu_hw_mpeg2_dec.o \
>>                  rk3399_vpu_hw_vp8_dec.o \
>>                  hantro_jpeg.o \
>>                  hantro_h264.o \
>> +               hantro_hevc.o \
>>                  hantro_mpeg2.o \
>>                  hantro_vp8.o
>>   
>> diff --git a/drivers/staging/media/hantro/hantro_drv.c b/drivers/staging/media/hantro/hantro_drv.c
>> index e1443c394f62..d171fb80876a 100644
>> --- a/drivers/staging/media/hantro/hantro_drv.c
>> +++ b/drivers/staging/media/hantro/hantro_drv.c
>> @@ -280,6 +280,20 @@ static int hantro_jpeg_s_ctrl(struct v4l2_ctrl *ctrl)
>>          return 0;
>>   }
>>   
>> +static int hantro_extra_s_ctrl(struct v4l2_ctrl *ctrl)
>> +{
>> +       const struct hantro_hevc_extra_decode_params *extra_params;
>> +       struct hantro_ctx *ctx;
>> +
>> +       ctx = container_of(ctrl->handler,
>> +                          struct hantro_ctx, ctrl_handler);
>> +       extra_params = &ctx->hevc_dec.ctrls.extra_params;
>> +
>> +       memcpy((void *)extra_params, ctrl->p_new.p_u8, sizeof(extra_params));
>> +
>> +       return 0;
>> +}
>> +
>>   static const struct v4l2_ctrl_ops hantro_ctrl_ops = {
>>          .try_ctrl = hantro_try_ctrl,
>>   };
>> @@ -288,6 +302,10 @@ static const struct v4l2_ctrl_ops hantro_jpeg_ctrl_ops = {
>>          .s_ctrl = hantro_jpeg_s_ctrl,
>>   };
>>   
>> +static const struct v4l2_ctrl_ops hantro_extra_ctrl_ops = {
>> +       .s_ctrl = hantro_extra_s_ctrl,
>> +};
>> +
>>   static const struct hantro_ctrl controls[] = {
>>          {
>>                  .codec = HANTRO_JPEG_ENCODER,
>> @@ -413,6 +431,29 @@ static const struct hantro_ctrl controls[] = {
>>                  .cfg = {
>>                          .id = V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS,
>>                  },
>> +       }, {
>> +               .codec = HANTRO_HEVC_DECODER,
>> +               .cfg = {
>> +                       .id = V4L2_CID_HANTRO_HEVC_EXTRA_DECODE_PARAMS,
>> +                       .name = "HANTRO extra decode params",
>> +                       .type = V4L2_CTRL_TYPE_U8,
>> +                       .min = 0,
>> +                       .def = 0,
>> +                       .max = 255,
>> +                       .step = 1,
>> +                       .dims = { sizeof(struct hantro_hevc_extra_decode_params) },
>> +                       .ops = &hantro_extra_ctrl_ops,
>> +               },
>> +       }, {
>> +               .codec = HANTRO_JPEG_ENCODER | HANTRO_MPEG2_DECODER |
>> +                        HANTRO_VP8_DECODER | HANTRO_H264_DECODER |
>> +                        HANTRO_HEVC_DECODER,
>> +               .cfg = {
>> +                       .id = V4L2_CID_USER_CLASS,
> Are you sure you need to expose the V4L2_CID_USER_CLASS?
> Maybe I'm missing something, but this looks odd.

v4l2-compliance complains if this isn't exposed when adding V4L2_CID_HANTRO_HEVC_EXTRA_DECODE_PARAMS.
Other drivers with dedicated control have duplicated this definition but I prefer use it directly.

Benjamin

>
> Thanks,
> Ezequiel
>
>

WARNING: multiple messages have this Message-ID (diff)
From: Benjamin Gaignard <benjamin.gaignard@collabora.com>
To: Ezequiel Garcia <ezequiel@collabora.com>,
	p.zabel@pengutronix.de, mchehab@kernel.org, robh+dt@kernel.org,
	shawnguo@kernel.org, s.hauer@pengutronix.de,
	kernel@pengutronix.de, festevam@gmail.com, linux-imx@nxp.com,
	gregkh@linuxfoundation.org, mripard@kernel.org,
	paul.kocialkowski@bootlin.com, wens@csie.org,
	jernej.skrabec@siol.net, krzk@kernel.org, shengjiu.wang@nxp.com,
	adrian.ratiu@collabora.com, aisheng.dong@nxp.com,
	peng.fan@nxp.com, Anson.Huang@nxp.com, hverkuil-cisco@xs4all.nl
Cc: devel@driverdev.osuosl.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org,
	kernel@collabora.com, linux-arm-kernel@lists.infradead.org,
	linux-media@vger.kernel.org
Subject: Re: [PATCH v1 13/18] media: hantro: Introduce G2/HEVC decoder
Date: Thu, 18 Feb 2021 11:43:43 +0100	[thread overview]
Message-ID: <1fab0734-f1db-21ee-152c-4b289be31e4a@collabora.com> (raw)
In-Reply-To: <bb410fde0a2f50cc34840e091c3d9c1395601514.camel@collabora.com>


Le 17/02/2021 à 21:45, Ezequiel Garcia a écrit :
> Hi Benjamin,
>
> Before I review the implementation in detail,
> there's one thing that looks suspicious.
>
> On Wed, 2021-02-17 at 09:03 +0100, Benjamin Gaignard wrote:
>> Implement all the logic to get G2 hardware decoding HEVC frames.
>> It support up level 5.1 HEVC stream.
>> It doesn't support yet 10 bits formats or scaling feature.
>>
>> Add HANTRO HEVC dedicated control to skip some bits at the beginning
>> of the slice header. That is very specific to this hardware so can't
>> go into uapi structures. Compute the needed value is complex and require
>> information from the stream that only the userland knows so let it
>> provide the correct value to the driver.
>>
>> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
>> Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
>> Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com>
>> ---
>>   drivers/staging/media/hantro/Makefile         |   2 +
>>   drivers/staging/media/hantro/hantro_drv.c     |  41 ++
>>   .../staging/media/hantro/hantro_g2_hevc_dec.c | 637 ++++++++++++++++++
>>   drivers/staging/media/hantro/hantro_g2_regs.h | 198 ++++++
>>   drivers/staging/media/hantro/hantro_hevc.c    | 274 ++++++++
>>   drivers/staging/media/hantro/hantro_hw.h      |  14 +
>>   6 files changed, 1166 insertions(+)
>>   create mode 100644 drivers/staging/media/hantro/hantro_g2_hevc_dec.c
>>   create mode 100644 drivers/staging/media/hantro/hantro_g2_regs.h
>>   create mode 100644 drivers/staging/media/hantro/hantro_hevc.c
>>
>> diff --git a/drivers/staging/media/hantro/Makefile b/drivers/staging/media/hantro/Makefile
>> index 743ce08eb184..0357f1772267 100644
>> --- a/drivers/staging/media/hantro/Makefile
>> +++ b/drivers/staging/media/hantro/Makefile
>> @@ -9,12 +9,14 @@ hantro-vpu-y += \
>>                  hantro_h1_jpeg_enc.o \
>>                  hantro_g1_h264_dec.o \
>>                  hantro_g1_mpeg2_dec.o \
>> +               hantro_g2_hevc_dec.o \
>>                  hantro_g1_vp8_dec.o \
>>                  rk3399_vpu_hw_jpeg_enc.o \
>>                  rk3399_vpu_hw_mpeg2_dec.o \
>>                  rk3399_vpu_hw_vp8_dec.o \
>>                  hantro_jpeg.o \
>>                  hantro_h264.o \
>> +               hantro_hevc.o \
>>                  hantro_mpeg2.o \
>>                  hantro_vp8.o
>>   
>> diff --git a/drivers/staging/media/hantro/hantro_drv.c b/drivers/staging/media/hantro/hantro_drv.c
>> index e1443c394f62..d171fb80876a 100644
>> --- a/drivers/staging/media/hantro/hantro_drv.c
>> +++ b/drivers/staging/media/hantro/hantro_drv.c
>> @@ -280,6 +280,20 @@ static int hantro_jpeg_s_ctrl(struct v4l2_ctrl *ctrl)
>>          return 0;
>>   }
>>   
>> +static int hantro_extra_s_ctrl(struct v4l2_ctrl *ctrl)
>> +{
>> +       const struct hantro_hevc_extra_decode_params *extra_params;
>> +       struct hantro_ctx *ctx;
>> +
>> +       ctx = container_of(ctrl->handler,
>> +                          struct hantro_ctx, ctrl_handler);
>> +       extra_params = &ctx->hevc_dec.ctrls.extra_params;
>> +
>> +       memcpy((void *)extra_params, ctrl->p_new.p_u8, sizeof(extra_params));
>> +
>> +       return 0;
>> +}
>> +
>>   static const struct v4l2_ctrl_ops hantro_ctrl_ops = {
>>          .try_ctrl = hantro_try_ctrl,
>>   };
>> @@ -288,6 +302,10 @@ static const struct v4l2_ctrl_ops hantro_jpeg_ctrl_ops = {
>>          .s_ctrl = hantro_jpeg_s_ctrl,
>>   };
>>   
>> +static const struct v4l2_ctrl_ops hantro_extra_ctrl_ops = {
>> +       .s_ctrl = hantro_extra_s_ctrl,
>> +};
>> +
>>   static const struct hantro_ctrl controls[] = {
>>          {
>>                  .codec = HANTRO_JPEG_ENCODER,
>> @@ -413,6 +431,29 @@ static const struct hantro_ctrl controls[] = {
>>                  .cfg = {
>>                          .id = V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS,
>>                  },
>> +       }, {
>> +               .codec = HANTRO_HEVC_DECODER,
>> +               .cfg = {
>> +                       .id = V4L2_CID_HANTRO_HEVC_EXTRA_DECODE_PARAMS,
>> +                       .name = "HANTRO extra decode params",
>> +                       .type = V4L2_CTRL_TYPE_U8,
>> +                       .min = 0,
>> +                       .def = 0,
>> +                       .max = 255,
>> +                       .step = 1,
>> +                       .dims = { sizeof(struct hantro_hevc_extra_decode_params) },
>> +                       .ops = &hantro_extra_ctrl_ops,
>> +               },
>> +       }, {
>> +               .codec = HANTRO_JPEG_ENCODER | HANTRO_MPEG2_DECODER |
>> +                        HANTRO_VP8_DECODER | HANTRO_H264_DECODER |
>> +                        HANTRO_HEVC_DECODER,
>> +               .cfg = {
>> +                       .id = V4L2_CID_USER_CLASS,
> Are you sure you need to expose the V4L2_CID_USER_CLASS?
> Maybe I'm missing something, but this looks odd.

v4l2-compliance complains if this isn't exposed when adding V4L2_CID_HANTRO_HEVC_EXTRA_DECODE_PARAMS.
Other drivers with dedicated control have duplicated this definition but I prefer use it directly.

Benjamin

>
> Thanks,
> Ezequiel
>
>
_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

WARNING: multiple messages have this Message-ID (diff)
From: Benjamin Gaignard <benjamin.gaignard@collabora.com>
To: Ezequiel Garcia <ezequiel@collabora.com>,
	p.zabel@pengutronix.de, mchehab@kernel.org, robh+dt@kernel.org,
	shawnguo@kernel.org, s.hauer@pengutronix.de,
	kernel@pengutronix.de, festevam@gmail.com, linux-imx@nxp.com,
	gregkh@linuxfoundation.org, mripard@kernel.org,
	paul.kocialkowski@bootlin.com, wens@csie.org,
	jernej.skrabec@siol.net, krzk@kernel.org, shengjiu.wang@nxp.com,
	adrian.ratiu@collabora.com, aisheng.dong@nxp.com,
	peng.fan@nxp.com, Anson.Huang@nxp.com, hverkuil-cisco@xs4all.nl
Cc: devel@driverdev.osuosl.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org,
	kernel@collabora.com, linux-arm-kernel@lists.infradead.org,
	linux-media@vger.kernel.org
Subject: Re: [PATCH v1 13/18] media: hantro: Introduce G2/HEVC decoder
Date: Thu, 18 Feb 2021 11:43:43 +0100	[thread overview]
Message-ID: <1fab0734-f1db-21ee-152c-4b289be31e4a@collabora.com> (raw)
In-Reply-To: <bb410fde0a2f50cc34840e091c3d9c1395601514.camel@collabora.com>


Le 17/02/2021 à 21:45, Ezequiel Garcia a écrit :
> Hi Benjamin,
>
> Before I review the implementation in detail,
> there's one thing that looks suspicious.
>
> On Wed, 2021-02-17 at 09:03 +0100, Benjamin Gaignard wrote:
>> Implement all the logic to get G2 hardware decoding HEVC frames.
>> It support up level 5.1 HEVC stream.
>> It doesn't support yet 10 bits formats or scaling feature.
>>
>> Add HANTRO HEVC dedicated control to skip some bits at the beginning
>> of the slice header. That is very specific to this hardware so can't
>> go into uapi structures. Compute the needed value is complex and require
>> information from the stream that only the userland knows so let it
>> provide the correct value to the driver.
>>
>> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
>> Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
>> Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com>
>> ---
>>   drivers/staging/media/hantro/Makefile         |   2 +
>>   drivers/staging/media/hantro/hantro_drv.c     |  41 ++
>>   .../staging/media/hantro/hantro_g2_hevc_dec.c | 637 ++++++++++++++++++
>>   drivers/staging/media/hantro/hantro_g2_regs.h | 198 ++++++
>>   drivers/staging/media/hantro/hantro_hevc.c    | 274 ++++++++
>>   drivers/staging/media/hantro/hantro_hw.h      |  14 +
>>   6 files changed, 1166 insertions(+)
>>   create mode 100644 drivers/staging/media/hantro/hantro_g2_hevc_dec.c
>>   create mode 100644 drivers/staging/media/hantro/hantro_g2_regs.h
>>   create mode 100644 drivers/staging/media/hantro/hantro_hevc.c
>>
>> diff --git a/drivers/staging/media/hantro/Makefile b/drivers/staging/media/hantro/Makefile
>> index 743ce08eb184..0357f1772267 100644
>> --- a/drivers/staging/media/hantro/Makefile
>> +++ b/drivers/staging/media/hantro/Makefile
>> @@ -9,12 +9,14 @@ hantro-vpu-y += \
>>                  hantro_h1_jpeg_enc.o \
>>                  hantro_g1_h264_dec.o \
>>                  hantro_g1_mpeg2_dec.o \
>> +               hantro_g2_hevc_dec.o \
>>                  hantro_g1_vp8_dec.o \
>>                  rk3399_vpu_hw_jpeg_enc.o \
>>                  rk3399_vpu_hw_mpeg2_dec.o \
>>                  rk3399_vpu_hw_vp8_dec.o \
>>                  hantro_jpeg.o \
>>                  hantro_h264.o \
>> +               hantro_hevc.o \
>>                  hantro_mpeg2.o \
>>                  hantro_vp8.o
>>   
>> diff --git a/drivers/staging/media/hantro/hantro_drv.c b/drivers/staging/media/hantro/hantro_drv.c
>> index e1443c394f62..d171fb80876a 100644
>> --- a/drivers/staging/media/hantro/hantro_drv.c
>> +++ b/drivers/staging/media/hantro/hantro_drv.c
>> @@ -280,6 +280,20 @@ static int hantro_jpeg_s_ctrl(struct v4l2_ctrl *ctrl)
>>          return 0;
>>   }
>>   
>> +static int hantro_extra_s_ctrl(struct v4l2_ctrl *ctrl)
>> +{
>> +       const struct hantro_hevc_extra_decode_params *extra_params;
>> +       struct hantro_ctx *ctx;
>> +
>> +       ctx = container_of(ctrl->handler,
>> +                          struct hantro_ctx, ctrl_handler);
>> +       extra_params = &ctx->hevc_dec.ctrls.extra_params;
>> +
>> +       memcpy((void *)extra_params, ctrl->p_new.p_u8, sizeof(extra_params));
>> +
>> +       return 0;
>> +}
>> +
>>   static const struct v4l2_ctrl_ops hantro_ctrl_ops = {
>>          .try_ctrl = hantro_try_ctrl,
>>   };
>> @@ -288,6 +302,10 @@ static const struct v4l2_ctrl_ops hantro_jpeg_ctrl_ops = {
>>          .s_ctrl = hantro_jpeg_s_ctrl,
>>   };
>>   
>> +static const struct v4l2_ctrl_ops hantro_extra_ctrl_ops = {
>> +       .s_ctrl = hantro_extra_s_ctrl,
>> +};
>> +
>>   static const struct hantro_ctrl controls[] = {
>>          {
>>                  .codec = HANTRO_JPEG_ENCODER,
>> @@ -413,6 +431,29 @@ static const struct hantro_ctrl controls[] = {
>>                  .cfg = {
>>                          .id = V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS,
>>                  },
>> +       }, {
>> +               .codec = HANTRO_HEVC_DECODER,
>> +               .cfg = {
>> +                       .id = V4L2_CID_HANTRO_HEVC_EXTRA_DECODE_PARAMS,
>> +                       .name = "HANTRO extra decode params",
>> +                       .type = V4L2_CTRL_TYPE_U8,
>> +                       .min = 0,
>> +                       .def = 0,
>> +                       .max = 255,
>> +                       .step = 1,
>> +                       .dims = { sizeof(struct hantro_hevc_extra_decode_params) },
>> +                       .ops = &hantro_extra_ctrl_ops,
>> +               },
>> +       }, {
>> +               .codec = HANTRO_JPEG_ENCODER | HANTRO_MPEG2_DECODER |
>> +                        HANTRO_VP8_DECODER | HANTRO_H264_DECODER |
>> +                        HANTRO_HEVC_DECODER,
>> +               .cfg = {
>> +                       .id = V4L2_CID_USER_CLASS,
> Are you sure you need to expose the V4L2_CID_USER_CLASS?
> Maybe I'm missing something, but this looks odd.

v4l2-compliance complains if this isn't exposed when adding V4L2_CID_HANTRO_HEVC_EXTRA_DECODE_PARAMS.
Other drivers with dedicated control have duplicated this definition but I prefer use it directly.

Benjamin

>
> Thanks,
> Ezequiel
>
>

_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip

WARNING: multiple messages have this Message-ID (diff)
From: Benjamin Gaignard <benjamin.gaignard@collabora.com>
To: Ezequiel Garcia <ezequiel@collabora.com>,
	p.zabel@pengutronix.de, mchehab@kernel.org, robh+dt@kernel.org,
	shawnguo@kernel.org, s.hauer@pengutronix.de,
	kernel@pengutronix.de, festevam@gmail.com, linux-imx@nxp.com,
	gregkh@linuxfoundation.org, mripard@kernel.org,
	paul.kocialkowski@bootlin.com, wens@csie.org,
	jernej.skrabec@siol.net, krzk@kernel.org, shengjiu.wang@nxp.com,
	adrian.ratiu@collabora.com, aisheng.dong@nxp.com,
	peng.fan@nxp.com, Anson.Huang@nxp.com, hverkuil-cisco@xs4all.nl
Cc: devel@driverdev.osuosl.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org,
	kernel@collabora.com, linux-arm-kernel@lists.infradead.org,
	linux-media@vger.kernel.org
Subject: Re: [PATCH v1 13/18] media: hantro: Introduce G2/HEVC decoder
Date: Thu, 18 Feb 2021 11:43:43 +0100	[thread overview]
Message-ID: <1fab0734-f1db-21ee-152c-4b289be31e4a@collabora.com> (raw)
In-Reply-To: <bb410fde0a2f50cc34840e091c3d9c1395601514.camel@collabora.com>


Le 17/02/2021 à 21:45, Ezequiel Garcia a écrit :
> Hi Benjamin,
>
> Before I review the implementation in detail,
> there's one thing that looks suspicious.
>
> On Wed, 2021-02-17 at 09:03 +0100, Benjamin Gaignard wrote:
>> Implement all the logic to get G2 hardware decoding HEVC frames.
>> It support up level 5.1 HEVC stream.
>> It doesn't support yet 10 bits formats or scaling feature.
>>
>> Add HANTRO HEVC dedicated control to skip some bits at the beginning
>> of the slice header. That is very specific to this hardware so can't
>> go into uapi structures. Compute the needed value is complex and require
>> information from the stream that only the userland knows so let it
>> provide the correct value to the driver.
>>
>> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
>> Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
>> Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com>
>> ---
>>   drivers/staging/media/hantro/Makefile         |   2 +
>>   drivers/staging/media/hantro/hantro_drv.c     |  41 ++
>>   .../staging/media/hantro/hantro_g2_hevc_dec.c | 637 ++++++++++++++++++
>>   drivers/staging/media/hantro/hantro_g2_regs.h | 198 ++++++
>>   drivers/staging/media/hantro/hantro_hevc.c    | 274 ++++++++
>>   drivers/staging/media/hantro/hantro_hw.h      |  14 +
>>   6 files changed, 1166 insertions(+)
>>   create mode 100644 drivers/staging/media/hantro/hantro_g2_hevc_dec.c
>>   create mode 100644 drivers/staging/media/hantro/hantro_g2_regs.h
>>   create mode 100644 drivers/staging/media/hantro/hantro_hevc.c
>>
>> diff --git a/drivers/staging/media/hantro/Makefile b/drivers/staging/media/hantro/Makefile
>> index 743ce08eb184..0357f1772267 100644
>> --- a/drivers/staging/media/hantro/Makefile
>> +++ b/drivers/staging/media/hantro/Makefile
>> @@ -9,12 +9,14 @@ hantro-vpu-y += \
>>                  hantro_h1_jpeg_enc.o \
>>                  hantro_g1_h264_dec.o \
>>                  hantro_g1_mpeg2_dec.o \
>> +               hantro_g2_hevc_dec.o \
>>                  hantro_g1_vp8_dec.o \
>>                  rk3399_vpu_hw_jpeg_enc.o \
>>                  rk3399_vpu_hw_mpeg2_dec.o \
>>                  rk3399_vpu_hw_vp8_dec.o \
>>                  hantro_jpeg.o \
>>                  hantro_h264.o \
>> +               hantro_hevc.o \
>>                  hantro_mpeg2.o \
>>                  hantro_vp8.o
>>   
>> diff --git a/drivers/staging/media/hantro/hantro_drv.c b/drivers/staging/media/hantro/hantro_drv.c
>> index e1443c394f62..d171fb80876a 100644
>> --- a/drivers/staging/media/hantro/hantro_drv.c
>> +++ b/drivers/staging/media/hantro/hantro_drv.c
>> @@ -280,6 +280,20 @@ static int hantro_jpeg_s_ctrl(struct v4l2_ctrl *ctrl)
>>          return 0;
>>   }
>>   
>> +static int hantro_extra_s_ctrl(struct v4l2_ctrl *ctrl)
>> +{
>> +       const struct hantro_hevc_extra_decode_params *extra_params;
>> +       struct hantro_ctx *ctx;
>> +
>> +       ctx = container_of(ctrl->handler,
>> +                          struct hantro_ctx, ctrl_handler);
>> +       extra_params = &ctx->hevc_dec.ctrls.extra_params;
>> +
>> +       memcpy((void *)extra_params, ctrl->p_new.p_u8, sizeof(extra_params));
>> +
>> +       return 0;
>> +}
>> +
>>   static const struct v4l2_ctrl_ops hantro_ctrl_ops = {
>>          .try_ctrl = hantro_try_ctrl,
>>   };
>> @@ -288,6 +302,10 @@ static const struct v4l2_ctrl_ops hantro_jpeg_ctrl_ops = {
>>          .s_ctrl = hantro_jpeg_s_ctrl,
>>   };
>>   
>> +static const struct v4l2_ctrl_ops hantro_extra_ctrl_ops = {
>> +       .s_ctrl = hantro_extra_s_ctrl,
>> +};
>> +
>>   static const struct hantro_ctrl controls[] = {
>>          {
>>                  .codec = HANTRO_JPEG_ENCODER,
>> @@ -413,6 +431,29 @@ static const struct hantro_ctrl controls[] = {
>>                  .cfg = {
>>                          .id = V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS,
>>                  },
>> +       }, {
>> +               .codec = HANTRO_HEVC_DECODER,
>> +               .cfg = {
>> +                       .id = V4L2_CID_HANTRO_HEVC_EXTRA_DECODE_PARAMS,
>> +                       .name = "HANTRO extra decode params",
>> +                       .type = V4L2_CTRL_TYPE_U8,
>> +                       .min = 0,
>> +                       .def = 0,
>> +                       .max = 255,
>> +                       .step = 1,
>> +                       .dims = { sizeof(struct hantro_hevc_extra_decode_params) },
>> +                       .ops = &hantro_extra_ctrl_ops,
>> +               },
>> +       }, {
>> +               .codec = HANTRO_JPEG_ENCODER | HANTRO_MPEG2_DECODER |
>> +                        HANTRO_VP8_DECODER | HANTRO_H264_DECODER |
>> +                        HANTRO_HEVC_DECODER,
>> +               .cfg = {
>> +                       .id = V4L2_CID_USER_CLASS,
> Are you sure you need to expose the V4L2_CID_USER_CLASS?
> Maybe I'm missing something, but this looks odd.

v4l2-compliance complains if this isn't exposed when adding V4L2_CID_HANTRO_HEVC_EXTRA_DECODE_PARAMS.
Other drivers with dedicated control have duplicated this definition but I prefer use it directly.

Benjamin

>
> Thanks,
> Ezequiel
>
>

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2021-02-18 12:29 UTC|newest]

Thread overview: 188+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-17  8:02 [PATCH v1 00/18] Add HANTRO G2/HEVC decoder support for IMX8MQ Benjamin Gaignard
2021-02-17  8:02 ` Benjamin Gaignard
2021-02-17  8:02 ` Benjamin Gaignard
2021-02-17  8:02 ` Benjamin Gaignard
2021-02-17  8:02 ` [PATCH v1 01/18] include: media: hevc: Add scaling and decode params controls Benjamin Gaignard
2021-02-17  8:02   ` Benjamin Gaignard
2021-02-17  8:02   ` Benjamin Gaignard
2021-02-17  8:02   ` Benjamin Gaignard
2021-02-17  8:02 ` [PATCH v1 02/18] media: hantro: Define HEVC codec profiles and supported features Benjamin Gaignard
2021-02-17  8:02   ` Benjamin Gaignard
2021-02-17  8:02   ` Benjamin Gaignard
2021-02-17  8:02   ` Benjamin Gaignard
2021-02-17 19:31   ` Ezequiel Garcia
2021-02-17 19:31     ` Ezequiel Garcia
2021-02-17 19:31     ` Ezequiel Garcia
2021-02-17 19:31     ` Ezequiel Garcia
2021-02-17  8:02 ` [PATCH v1 03/18] arm64: dts: imx8mq-evk: add reserve memory node for CMA region Benjamin Gaignard
2021-02-17  8:02   ` Benjamin Gaignard
2021-02-17  8:02   ` Benjamin Gaignard
2021-02-17  8:02   ` Benjamin Gaignard
2021-02-17 19:39   ` Ezequiel Garcia
2021-02-17 19:39     ` Ezequiel Garcia
2021-02-17 19:39     ` Ezequiel Garcia
2021-02-17 19:39     ` Ezequiel Garcia
2021-02-18 10:15     ` Lucas Stach
2021-02-18 10:15       ` Lucas Stach
2021-02-18 10:15       ` Lucas Stach
2021-02-18 10:15       ` Lucas Stach
2021-02-18 10:45     ` Dan Carpenter
2021-02-18 10:45       ` Dan Carpenter
2021-02-18 10:45       ` Dan Carpenter
2021-02-18 10:45       ` Dan Carpenter
2021-02-17  8:02 ` [PATCH v1 04/18] media: hevc: add structures for hevc codec Benjamin Gaignard
2021-02-17  8:02   ` Benjamin Gaignard
2021-02-17  8:02   ` Benjamin Gaignard
2021-02-17  8:02   ` Benjamin Gaignard
2021-02-17 19:54   ` Ezequiel Garcia
2021-02-17 19:54     ` Ezequiel Garcia
2021-02-17 19:54     ` Ezequiel Garcia
2021-02-17 19:54     ` Ezequiel Garcia
2021-02-17  8:02 ` [PATCH v1 05/18] media: controls: Add control for HEVC codec Benjamin Gaignard
2021-02-17  8:02   ` Benjamin Gaignard
2021-02-17  8:02   ` Benjamin Gaignard
2021-02-17  8:02   ` Benjamin Gaignard
2021-02-17 19:58   ` Ezequiel Garcia
2021-02-17 19:58     ` Ezequiel Garcia
2021-02-17 19:58     ` Ezequiel Garcia
2021-02-17 19:58     ` Ezequiel Garcia
2021-02-17  8:02 ` [PATCH v1 06/18] media: hantro: Make sure that ctx->codex_ops is set Benjamin Gaignard
2021-02-17  8:02   ` Benjamin Gaignard
2021-02-17  8:02   ` Benjamin Gaignard
2021-02-17  8:02   ` Benjamin Gaignard
2021-02-17 20:11   ` Ezequiel Garcia
2021-02-17 20:11     ` Ezequiel Garcia
2021-02-17 20:11     ` Ezequiel Garcia
2021-02-17 20:11     ` Ezequiel Garcia
2021-02-18 10:53   ` Dan Carpenter
2021-02-18 10:53     ` Dan Carpenter
2021-02-18 10:53     ` Dan Carpenter
2021-02-18 10:53     ` Dan Carpenter
2021-02-17  8:02 ` [PATCH v1 07/18] media: hantro: Add a field to distinguish the hardware versions Benjamin Gaignard
2021-02-17  8:02   ` Benjamin Gaignard
2021-02-17  8:02   ` Benjamin Gaignard
2021-02-17  8:02   ` Benjamin Gaignard
2021-02-17 20:15   ` Ezequiel Garcia
2021-02-17 20:15     ` Ezequiel Garcia
2021-02-17 20:15     ` Ezequiel Garcia
2021-02-17 20:15     ` Ezequiel Garcia
2021-02-18 10:55   ` Dan Carpenter
2021-02-18 10:55     ` Dan Carpenter
2021-02-18 10:55     ` Dan Carpenter
2021-02-18 10:55     ` Dan Carpenter
2021-02-17  8:02 ` [PATCH v1 08/18] media: hantro: Add HEVC structures Benjamin Gaignard
2021-02-17  8:02   ` Benjamin Gaignard
2021-02-17  8:02   ` Benjamin Gaignard
2021-02-17  8:02   ` Benjamin Gaignard
2021-02-17  8:02 ` [PATCH v1 09/18] media: hantro: move hantro_needs_postproc function Benjamin Gaignard
2021-02-17  8:02   ` Benjamin Gaignard
2021-02-17  8:02   ` Benjamin Gaignard
2021-02-17  8:02   ` Benjamin Gaignard
2021-02-18 10:59   ` Dan Carpenter
2021-02-18 10:59     ` Dan Carpenter
2021-02-18 10:59     ` Dan Carpenter
2021-02-18 10:59     ` Dan Carpenter
2021-02-17  8:02 ` [PATCH v1 10/18] media: hantro: Add helper functions for buffer information Benjamin Gaignard
2021-02-17  8:02   ` Benjamin Gaignard
2021-02-17  8:02   ` Benjamin Gaignard
2021-02-17  8:02   ` Benjamin Gaignard
2021-02-17 20:31   ` Ezequiel Garcia
2021-02-17 20:31     ` Ezequiel Garcia
2021-02-17 20:31     ` Ezequiel Garcia
2021-02-17 20:31     ` Ezequiel Garcia
2021-02-17  8:02 ` [PATCH v1 11/18] media: hantro: Add helper function for auxiliary buffers allocation Benjamin Gaignard
2021-02-17  8:02   ` Benjamin Gaignard
2021-02-17  8:02   ` Benjamin Gaignard
2021-02-17  8:02   ` Benjamin Gaignard
2021-02-17 20:42   ` Ezequiel Garcia
2021-02-17 20:42     ` Ezequiel Garcia
2021-02-17 20:42     ` Ezequiel Garcia
2021-02-17 20:42     ` Ezequiel Garcia
2021-02-18 14:51     ` Benjamin Gaignard
2021-02-18 14:51       ` Benjamin Gaignard
2021-02-18 14:51       ` Benjamin Gaignard
2021-02-18 14:51       ` Benjamin Gaignard
2021-02-17  8:03 ` [PATCH v1 12/18] media: uapi: Add a control for HANTRO driver Benjamin Gaignard
2021-02-17  8:03   ` Benjamin Gaignard
2021-02-17  8:03   ` Benjamin Gaignard
2021-02-17  8:03   ` Benjamin Gaignard
2021-02-17  8:03 ` [PATCH v1 13/18] media: hantro: Introduce G2/HEVC decoder Benjamin Gaignard
2021-02-17  8:03   ` Benjamin Gaignard
2021-02-17  8:03   ` Benjamin Gaignard
2021-02-17  8:03   ` Benjamin Gaignard
2021-02-17 20:45   ` Ezequiel Garcia
2021-02-17 20:45     ` Ezequiel Garcia
2021-02-17 20:45     ` Ezequiel Garcia
2021-02-17 20:45     ` Ezequiel Garcia
2021-02-18 10:43     ` Benjamin Gaignard [this message]
2021-02-18 10:43       ` Benjamin Gaignard
2021-02-18 10:43       ` Benjamin Gaignard
2021-02-18 10:43       ` Benjamin Gaignard
2021-02-18 11:47   ` Dan Carpenter
2021-02-18 11:47     ` Dan Carpenter
2021-02-18 11:47     ` Dan Carpenter
2021-02-18 11:47     ` Dan Carpenter
2021-02-17  8:03 ` [PATCH v1 14/18] media: hantro: add G2 support to postproc Benjamin Gaignard
2021-02-17  8:03   ` Benjamin Gaignard
2021-02-17  8:03   ` Benjamin Gaignard
2021-02-17  8:03   ` Benjamin Gaignard
2021-02-17  8:03 ` [PATCH v1 15/18] media: hantro: handle V4L2_PIX_FMT_HEVC_SLICE control Benjamin Gaignard
2021-02-17  8:03   ` Benjamin Gaignard
2021-02-17  8:03   ` Benjamin Gaignard
2021-02-17  8:03   ` Benjamin Gaignard
2021-02-17 20:13   ` Ezequiel Garcia
2021-02-17 20:13     ` Ezequiel Garcia
2021-02-17 20:13     ` Ezequiel Garcia
2021-02-17 20:13     ` Ezequiel Garcia
2021-02-17  8:03 ` [PATCH v1 16/18] media: hantro: IMX8M: add variant for G2/HEVC codec Benjamin Gaignard
2021-02-17  8:03   ` Benjamin Gaignard
2021-02-17  8:03   ` Benjamin Gaignard
2021-02-17  8:03   ` Benjamin Gaignard
2021-02-17  8:03 ` [PATCH v1 17/18] dt-bindings: media: nxp,imx8mq-vpu: Update bindings Benjamin Gaignard
2021-02-17  8:03   ` Benjamin Gaignard
2021-02-17  8:03   ` Benjamin Gaignard
2021-02-17  8:03   ` Benjamin Gaignard
2021-02-17 22:48   ` Rob Herring
2021-02-17 22:48     ` Rob Herring
2021-02-17 22:48     ` Rob Herring
2021-02-17 22:48     ` Rob Herring
2021-02-18 14:48     ` Benjamin Gaignard
2021-02-18 14:48       ` Benjamin Gaignard
2021-02-18 14:48       ` Benjamin Gaignard
2021-02-18 14:48       ` Benjamin Gaignard
2021-02-17  8:03 ` [PATCH v1 18/18] arm64: dts: imx8mq: Add node to G2 hardware Benjamin Gaignard
2021-02-17  8:03   ` Benjamin Gaignard
2021-02-17  8:03   ` Benjamin Gaignard
2021-02-17  8:03   ` Benjamin Gaignard
2021-02-17 20:43   ` Ezequiel Garcia
2021-02-17 20:43     ` Ezequiel Garcia
2021-02-17 20:43     ` Ezequiel Garcia
2021-02-17 20:43     ` Ezequiel Garcia
2021-02-18 15:47     ` Benjamin Gaignard
2021-02-18 15:47       ` Benjamin Gaignard
2021-02-18 15:47       ` Benjamin Gaignard
2021-02-18 15:47       ` Benjamin Gaignard
2021-02-17  8:08 ` [PATCH v1 00/18] Add HANTRO G2/HEVC decoder support for IMX8MQ Greg KH
2021-02-17  8:08   ` Greg KH
2021-02-17  8:08   ` Greg KH
2021-02-17  8:08   ` Greg KH
2021-02-17  8:28   ` Benjamin Gaignard
2021-02-17  8:28     ` Benjamin Gaignard
2021-02-17  8:28     ` Benjamin Gaignard
2021-02-17  8:28     ` Benjamin Gaignard
2021-02-17  8:36     ` Greg KH
2021-02-17  8:36       ` Greg KH
2021-02-17  8:36       ` Greg KH
2021-02-17  8:36       ` Greg KH
2021-02-17  9:10       ` Hans Verkuil
2021-02-17  9:10         ` Hans Verkuil
2021-02-17  9:10         ` Hans Verkuil
2021-02-17  9:10         ` Hans Verkuil
2021-02-17  9:23         ` Greg KH
2021-02-17  9:23           ` Greg KH
2021-02-17  9:23           ` Greg KH
2021-02-17  9:23           ` Greg KH
2021-02-17  8:38     ` Paul Kocialkowski
2021-02-17  8:38       ` Paul Kocialkowski
2021-02-17  8:38       ` Paul Kocialkowski
2021-02-17  8:38       ` Paul Kocialkowski

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=1fab0734-f1db-21ee-152c-4b289be31e4a@collabora.com \
    --to=benjamin.gaignard@collabora.com \
    --cc=Anson.Huang@nxp.com \
    --cc=adrian.ratiu@collabora.com \
    --cc=aisheng.dong@nxp.com \
    --cc=devel@driverdev.osuosl.org \
    --cc=devicetree@vger.kernel.org \
    --cc=ezequiel@collabora.com \
    --cc=festevam@gmail.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=hverkuil-cisco@xs4all.nl \
    --cc=jernej.skrabec@siol.net \
    --cc=kernel@collabora.com \
    --cc=kernel@pengutronix.de \
    --cc=krzk@kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-imx@nxp.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=linux-rockchip@lists.infradead.org \
    --cc=mchehab@kernel.org \
    --cc=mripard@kernel.org \
    --cc=p.zabel@pengutronix.de \
    --cc=paul.kocialkowski@bootlin.com \
    --cc=peng.fan@nxp.com \
    --cc=robh+dt@kernel.org \
    --cc=s.hauer@pengutronix.de \
    --cc=shawnguo@kernel.org \
    --cc=shengjiu.wang@nxp.com \
    --cc=wens@csie.org \
    /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
Be 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.