Re: [PATCH v8 11/13] media: hantro: Introduce G2/HEVC decoder

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 01/04/2021 18:00, Benjamin Gaignard wrote:
 > > Implement all the logic to get G2 hardware decoding HEVC frames.
 > > It support up level 5.1 HEVC stream.

support -> supports

 > > It doesn't support yet 10 bits formats or scaling feature.

scaling -> the scaling

 > >
 > > 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

Compute -> Computing
require -> requires

 > > 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@xxxxxxxxxxxxx>
 > > Co-developed-by: Adrian Ratiu <adrian.ratiu@xxxxxxxxxxxxx>
 > > Signed-off-by: Adrian Ratiu <adrian.ratiu@xxxxxxxxxxxxx>
 > > Co-developed-by: Ezequiel Garcia <ezequiel@xxxxxxxxxxxxx>
 > > Signed-off-by: Ezequiel Garcia <ezequiel@xxxxxxxxxxxxx>
 > > ---
 > > version 8:
 > >  - Fix compilation warnings
 > >
 > > version 7:
 > >  - Improve motion vectors requested memory size computation.
 > >
 > >  drivers/staging/media/hantro/Makefile         |   2 +
 > >  drivers/staging/media/hantro/hantro.h         |   2 +
 > >  drivers/staging/media/hantro/hantro_drv.c     |  36 ++
 > >  .../staging/media/hantro/hantro_g2_hevc_dec.c | 587 ++++++++++++++++++
 > >  drivers/staging/media/hantro/hantro_g2_regs.h | 198 ++++++
 > >  drivers/staging/media/hantro/hantro_hevc.c    | 325 ++++++++++
 > >  drivers/staging/media/hantro/hantro_hw.h      |  49 ++
 > >  7 files changed, 1199 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.h 
b/drivers/staging/media/hantro/hantro.h
 > > index 7a5ad93466c8..6a21d1e95b34 100644
 > > --- a/drivers/staging/media/hantro/hantro.h
 > > +++ b/drivers/staging/media/hantro/hantro.h
 > > @@ -222,6 +222,7 @@ struct hantro_dev {
 > >   * @jpeg_enc:		JPEG-encoding context.
 > >   * @mpeg2_dec:		MPEG-2-decoding context.
 > >   * @vp8_dec:		VP8-decoding context.
 > > + * @hevc_dec:		HEVC-decoding context.
 > >   */
 > >  struct hantro_ctx {
 > >  	struct hantro_dev *dev;
 > > @@ -248,6 +249,7 @@ struct hantro_ctx {
 > >  		struct hantro_jpeg_enc_hw_ctx jpeg_enc;
 > >  		struct hantro_mpeg2_dec_hw_ctx mpeg2_dec;
 > >  		struct hantro_vp8_dec_hw_ctx vp8_dec;
 > > +		struct hantro_hevc_dec_hw_ctx hevc_dec;
 > >  	};
 > >  };
 > >
 > > diff --git a/drivers/staging/media/hantro/hantro_drv.c 
b/drivers/staging/media/hantro/hantro_drv.c
 > > index d9a3a5ef9330..33b8bd38eac1 100644
 > > --- a/drivers/staging/media/hantro/hantro_drv.c
 > > +++ b/drivers/staging/media/hantro/hantro_drv.c
 > > @@ -281,6 +281,26 @@ static int hantro_jpeg_s_ctrl(struct v4l2_ctrl 
*ctrl)
 > >  	return 0;
 > >  }
 > >
 > > +static int hantro_hevc_s_ctrl(struct v4l2_ctrl *ctrl)
 > > +{
 > > +	struct hantro_ctx *ctx;
 > > +
 > > +	ctx = container_of(ctrl->handler,
 > > +			   struct hantro_ctx, ctrl_handler);
 > > +
 > > +	vpu_debug(1, "s_ctrl: id = %d, val = %d\n", ctrl->id, ctrl->val);
 > > +
 > > +	switch (ctrl->id) {
 > > +	case V4L2_CID_HANTRO_HEVC_SLICE_HEADER_SKIP:
 > > +		ctx->hevc_dec.ctrls.hevc_hdr_skip_length = ctrl->val;
 > > +		break;
 > > +	default:
 > > +		return -EINVAL;
 > > +	}
 > > +
 > > +	return 0;
 > > +}
 > > +
 > >  static const struct v4l2_ctrl_ops hantro_ctrl_ops = {
 > >  	.try_ctrl = hantro_try_ctrl,
 > >  };
 > > @@ -289,6 +309,10 @@ static const struct v4l2_ctrl_ops 
hantro_jpeg_ctrl_ops = {
 > >  	.s_ctrl = hantro_jpeg_s_ctrl,
 > >  };
 > >
 > > +static const struct v4l2_ctrl_ops hantro_hevc_ctrl_ops = {
 > > +	.s_ctrl = hantro_hevc_s_ctrl,
 > > +};
 > > +
 > >  static const struct hantro_ctrl controls[] = {
 > >  	{
 > >  		.codec = HANTRO_JPEG_ENCODER,
 > > @@ -409,6 +433,18 @@ 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_SLICE_HEADER_SKIP,
 > > +			.name = "Hantro HEVC slice header skip bytes",
 > > +			.type = V4L2_CTRL_TYPE_INTEGER,
 > > +			.min = 0,
 > > +			.def = 0,
 > > +			.max = 0x7fffffff,

This seems an insanely high number.

 > > +			.step = 1,
 > > +			.ops = &hantro_hevc_ctrl_ops,
 > > +		},
 > >  	},
 > >  };

Regards,

	Hans





[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux