Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp389415imm; Wed, 22 Aug 2018 06:05:30 -0700 (PDT) X-Google-Smtp-Source: AA+uWPw1fNjW/G7bwEmH+M65QJ0qsD73QEAtQ/zS2aCW6h1BB2Z6Hf6cEeMFSzRbxXP4YZNGmfse X-Received: by 2002:a63:1866:: with SMTP id 38-v6mr18450421pgy.313.1534943130128; Wed, 22 Aug 2018 06:05:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1534943130; cv=none; d=google.com; s=arc-20160816; b=Bnrm36yJLZXez5BW+DKTo3kURFyZ1eUMRJZd4R66+xDA6CXg+qKCShR9qv/zBy6tkp VnuS5t/WkUWiXPuFwiwFGP0e2R/gqD7FF5h/mMcIKhfc+1WEL47FEI5XKl2Rxs552UfU o3Q+FSefhmVMQBJhQwphpP9Zn/DXaQQY4ga3asRBZfHoGMTy9a6CwxCr0nEAV88EifZz y9XAZIuUopeNo132CS5f0BKLGnyjIihV44L7A2jgE/j8Z8Mej06YEC6V4yl9Bafm2xzL WZsLHfubnWBs8ybEao3zWfLbUV79JIkTTImKsYntJYQm2MkO77rfDlaR2sS0lnFBgyyg kTvw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:organization:references :in-reply-to:date:cc:to:from:subject:message-id :arc-authentication-results; bh=oRxXPpgSnbTflPugw33GgLH56mUU/x6hpicr5/Opq6s=; b=nfpSbGH2n7r4WKCsgvla+xKp0nWh01yth02/ZkbYO844PJZcbZr+SwykoRGTMwtjOT R4hoGcoMh6AI/9yeUZrAamCfxWYspw8fE6ab9NkToWF68FXmwny5Fd5cfoe2RrLli7Tp HpGvVFuVPFQrO1DbD8r7D8jGGuG4kz8CyWDsrzXlbyFd97Ql782nL2W0v7KM9/bqTTpD dfxS4lPMy0+lI2x74MLQtg4h6U2rKbKLq2yHvwsFmtMNaE/BdxZymAUXqjkRobVu/V04 0dldQqKaQE1A6smjCFVAiScEQNyFMu9h6kvlju15NAJRTfHEx7EkWAcW1ctXKVLR5oIU cTzw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 87-v6si1899361pfi.60.2018.08.22.06.05.11; Wed, 22 Aug 2018 06:05:30 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728914AbeHVQ2E (ORCPT + 99 others); Wed, 22 Aug 2018 12:28:04 -0400 Received: from mail.bootlin.com ([62.4.15.54]:40260 "EHLO mail.bootlin.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728012AbeHVQ2D (ORCPT ); Wed, 22 Aug 2018 12:28:03 -0400 Received: by mail.bootlin.com (Postfix, from userid 110) id 8EE51207F3; Wed, 22 Aug 2018 15:03:10 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on mail.bootlin.com X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED,SHORTCIRCUIT, URIBL_BLOCKED shortcircuit=ham autolearn=disabled version=3.4.0 Received: from aptenodytes (AAubervilliers-681-1-85-9.w90-88.abo.wanadoo.fr [90.88.27.9]) by mail.bootlin.com (Postfix) with ESMTPSA id 2616B20720; Wed, 22 Aug 2018 15:03:00 +0200 (CEST) Message-ID: Subject: Re: [PATCH 1/9] CHROMIUM: v4l: Add H264 low-level decoder API compound controls. From: Paul Kocialkowski To: Tomasz Figa , Maxime Ripard Cc: Ezequiel Garcia , Pawel Osciak , Hans Verkuil , Alexandre Courbot , Sakari Ailus , Laurent Pinchart , Chen-Yu Tsai , Linux Kernel Mailing List , "list@263.net:IOMMU DRIVERS , Joerg " "Roedel ," , Linux Media Mailing List , Nicolas Dufresne , jenskuske@gmail.com, linux-sunxi@googlegroups.com, thomas.petazzoni@bootlin.com, groeck@chromium.org Date: Wed, 22 Aug 2018 15:03:00 +0200 In-Reply-To: References: <20180613140714.1686-1-maxime.ripard@bootlin.com> <20180613140714.1686-2-maxime.ripard@bootlin.com> <80e1d9cb49c6df06843e49332685f2b401023292.camel@collabora.com> <20180822091557.gtnlgoebyv6yttzf@flea> Organization: Bootlin Content-Type: multipart/signed; micalg="pgp-sha256"; protocol="application/pgp-signature"; boundary="=-5Ntf9UxAehgezPWvBr41" X-Mailer: Evolution 3.28.4 Mime-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --=-5Ntf9UxAehgezPWvBr41 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, On Wed, 2018-08-22 at 18:54 +0900, Tomasz Figa wrote: > On Wed, Aug 22, 2018 at 6:16 PM Maxime Ripard = wrote: > >=20 > > Hi, > >=20 > > On Tue, Aug 21, 2018 at 01:58:38PM -0300, Ezequiel Garcia wrote: > > > On Wed, 2018-06-13 at 16:07 +0200, Maxime Ripard wrote: > > > > From: Pawel Osciak > > > >=20 > > > > Signed-off-by: Pawel Osciak > > > > Reviewed-by: Wu-cheng Li > > > > Tested-by: Tomasz Figa > > > > [rebase44(groeck): include linux/types.h in v4l2-controls.h] > > > > Signed-off-by: Guenter Roeck > > > > Signed-off-by: Maxime Ripard > > > > --- > > > >=20 > > >=20 > > > [..] > > > > diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/vi= deodev2.h > > > > index 242a6bfa1440..4b4a1b25a0db 100644 > > > > --- a/include/uapi/linux/videodev2.h > > > > +++ b/include/uapi/linux/videodev2.h > > > > @@ -626,6 +626,7 @@ struct v4l2_pix_format { > > > > #define V4L2_PIX_FMT_H264 v4l2_fourcc('H', '2', '6', '4') /* H= 264 with start codes */ > > > > #define V4L2_PIX_FMT_H264_NO_SC v4l2_fourcc('A', 'V', 'C', '1') /*= H264 without start codes */ > > > > #define V4L2_PIX_FMT_H264_MVC v4l2_fourcc('M', '2', '6', '4') /* H= 264 MVC */ > > > > +#define V4L2_PIX_FMT_H264_SLICE v4l2_fourcc('S', '2', '6', '4') /*= H264 parsed slices */ > > >=20 > > > As pointed out by Tomasz, the Rockchip VPU driver expects start codes= [1], so the userspace > > > should be aware of it. Perhaps we could document this pixel format be= tter as: > > >=20 > > > #define V4L2_PIX_FMT_H264_SLICE v4l2_fourcc('S', '2', '6', '4') /* H2= 64 parsed slices with start codes */ > >=20 > > I'm not sure this is something we want to do at that point. libva > > doesn't give the start code, so this is only going to make the life of > > the sane controllers more difficult. And if you need to have the start > > code and parse it, then you're not so stateless anymore. >=20 > I might not remember correctly, but Rockchip decoder does some slice > parsing on its own (despite not doing any higher level parsing). > Probably that's why it needs those start codes. The VPU found on Allwinner platforms also provides a mechanism to parse the bitstream data via a dedicated interface through the VPU registers. It is used in libvdpau-sunxi but not in our driver, because we don't want to be doing bitstream parsing in the kernel. It would be good to know if this is just a feature of the Rockchip VPU hardware that can be skipped (like on Allwinner) or if it's a hard requirement in its decoding pipeline. Also, maybe it only concerns the slice header? It is already part of the slice data (provided by VAAPI) for H.264/H.265 and an offset is provided to the beginning of the coded video data. > I wonder if libva is the best reference here. It's been designed > almost entirely by Intel for Intel video hardware. We want something > that could work with a wide range of devices and avoid something like > a need to create a semi-stateless API few months later. In fact, > hardware from another vendor, we're working with, also does parsing of > slice headers internally. Moreover, we have some weird > kind-of-stateful decoders, which cannot fully deal with bitstream on > its own, e.g. cannot parse formats, cannot handle resolution changes, > need H264 bitstream NALUs split into separate buffers, etc. >=20 > As I suggested some time ago, having the full bitstream in the buffer, > with offsets of particular units included in respective controls, > would be the most scalable thing. If really needed, we could add flags > telling the driver that particular units are present, so one's > implementation of libva could put only raw slice data in the buffers. > But perhaps it's libva which needs some amendment? If the raw bitstream is needed, I think it would make more sense to use the already-existing formats for stateful VPUs along with the controls for stateless ones instead of having the full bitstream in the V4L2_PIX_FMT_*_SLICE formats. I would also be tempted to say that reconstructing the needed parts of the bitstream in-driver for these half-way VPUs would be a better approach than blurrying the line between how (and what) data should be passed for stateful and stateless VPUs at the API level. Stateless should only cover what's in the slice NAL unit RBSP, which excludes the start code detection bytes. It is no longer parsed data otherwise. Cheers, Paul --=20 Paul Kocialkowski, Bootlin (formerly Free Electrons) Embedded Linux and kernel engineering https://bootlin.com --=-5Ntf9UxAehgezPWvBr41 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- iQEzBAABCAAdFiEEJZpWjZeIetVBefti3cLmz3+fv9EFAlt9XwQACgkQ3cLmz3+f v9ETmAf/RAEqpd8KEta6a87yUq4T6ONHgfrWLC/OeBYEV6TcuAyXKszJ3PQER1LA giSYj3OykDypAsJhbBzgrtJxXal++8If6iWRKGs2seVMtIfvl15vaGGKHaBkKWeK qjbDN6tFaBnrvSHYDyPa3SfppaxYqIvJ2o0+IYsTuwyMTnZc9LiHAQnNASlEaYJG qtx+Eaho9vruBQzXafMW0XaAuc+6ddpFPxDyyELOoTvbkaecfPYG3Fsb3CZhWI8x UY/Mdy8cSHAfW3QgF5235J4YBKzO1pAGd7h1+0fmItB8FfX/rxckPpasmaRAtHBE /cAASPu8KQaUO5w2MBHfbSKqOF2i+Q== =CkwI -----END PGP SIGNATURE----- --=-5Ntf9UxAehgezPWvBr41--