Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp7205715pxb; Thu, 18 Feb 2021 04:29:23 -0800 (PST) X-Google-Smtp-Source: ABdhPJxtw7qczxuBZYQz2oJnc2u4bjAPRLKTtWnbSn8+kOkTl/ioaIyugVN75EBH/kdQWe02tXv0 X-Received: by 2002:a17:906:858b:: with SMTP id v11mr3806390ejx.179.1613651362973; Thu, 18 Feb 2021 04:29:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1613651362; cv=none; d=google.com; s=arc-20160816; b=W8NdqUNNQ4jqatxquaixoTt6wycoqQ8beuleWXU+y/jqSnKlgp3sUC+eeuY7zavyJp 4Er6m5wj6ugTe5p64R49evSwiMr76PZFsXb+KiFe9MbdYCaMvHuTrgNDIQgFZglgsif5 6G1gXTE3UcuWbXhXu8OMLBPTZ6nZnz6MXX2S2eIpjQbT/rKxrhCZtc/1mXF+g6yLolUx TfjT/zNWLIkoRW4XQgl/uV09JBeFnw17UQr8Pk8Y+E0pFOxCw+s0JTEBC3YJ2Te/noBx NcLIVy31EMnhtrXnOcR6Y8pERKYTipZkp6hiMABcTkHl9z6PEYKAVVBFBfATPR8wHl1u sg3Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-language:content-transfer-encoding :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject; bh=MMxFIGFfL6k5dsimQ2omc62RhD30KYwAqfJajE62J84=; b=AoaDOJ5XfBNnfOiXb03yBsPK9dV8QHYkODiD6b8lJd2R3aAuw3DXNgB7V+w/SHXtmJ H7kif4w2M49k4v6oBqyFH9SciUxZ1C303ZrQ4xgRR7gxjSX0m4e6FgaebrWrDXCQjjLE v6WMa2dYTuzLD4qPIb6Xs5jo0fdglXyViHtwv9CZveY1o4dffRHT9kyVcYMGG3YSQQgd Bu3uuvo3dD6vJnBJvUkqpYvfl6okxW5i7VxRGntRbpfDGsCroKZ9Fa8NdVeTVC66fgFI IShtUWDz+G4vBexhlPRdHN9Skw5RQ2aq69TZk0VDbe/YsFglUPcjFcWy0yYxQRQDgeku xe3A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id d5si3516970edo.481.2021.02.18.04.28.58; Thu, 18 Feb 2021 04:29:22 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230133AbhBRM1I (ORCPT + 99 others); Thu, 18 Feb 2021 07:27:08 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54364 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231773AbhBRKpl (ORCPT ); Thu, 18 Feb 2021 05:45:41 -0500 Received: from bhuna.collabora.co.uk (bhuna.collabora.co.uk [IPv6:2a00:1098:0:82:1000:25:2eeb:e3e3]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B955AC061574; Thu, 18 Feb 2021 02:43:49 -0800 (PST) Received: from [IPv6:2a01:e0a:4cb:a870:fd6e:12cd:95d7:3350] (unknown [IPv6:2a01:e0a:4cb:a870:fd6e:12cd:95d7:3350]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: benjamin.gaignard) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id F21B81F45A1F; Thu, 18 Feb 2021 10:43:45 +0000 (GMT) Subject: Re: [PATCH v1 13/18] media: hantro: Introduce G2/HEVC decoder To: Ezequiel Garcia , 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 References: <20210217080306.157876-1-benjamin.gaignard@collabora.com> <20210217080306.157876-14-benjamin.gaignard@collabora.com> From: Benjamin Gaignard Message-ID: <1fab0734-f1db-21ee-152c-4b289be31e4a@collabora.com> Date: Thu, 18 Feb 2021 11:43:43 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 >> Signed-off-by: Ezequiel Garcia >> Signed-off-by: Adrian Ratiu >> --- >>  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 > >