Received: by 2002:a25:683:0:0:0:0:0 with SMTP id 125csp626485ybg; Tue, 9 Jun 2020 08:51:39 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzufB13L4x03nm6WjcG20W/9QjsEX0pOa+MAk+WXdFvKiTctBk8UFGtbapXmku3u70dd53v X-Received: by 2002:a05:6402:22ca:: with SMTP id dm10mr23525242edb.115.1591717899579; Tue, 09 Jun 2020 08:51:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1591717899; cv=none; d=google.com; s=arc-20160816; b=Enm+so7gLokyM7gv/J4AFvB+LUjihkiOvGIYkL0uq2SgUzEiDbfptE9j2N/ZHfCrVr hJSv16VNO+4STzgszV3Dhfw9m5tvysgoQhHlYVWPxKp6ERlIHK8cRx3toGIns8HOT4Ue t7XoAH8VNU1iJCTaGLLKQvMKtbfGbk7iAOOPNX/rw13yJjNI3KwMR6eeQvsTAeiopdpp YlCHImHXEIlFStbIO933YiKQk/ZMlWJ0lN67800o/btXY9wrDk3x0pz2Huk40ld+0viT Akffg57sWZHL2UXjV1etj+O3331T30eKN6C57iiDyYSJOd4p6tg0HQ6fWdGW9qQkqF5j xrBg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:date:cc:to:from:subject :message-id:dkim-signature; bh=Bh+YealWwxZJnbcfdPR1PFHaHzWJZRc7njZoU5SFKVg=; b=GOUMoJ07F0/DUuiA2t8vjiscxQVdFUrz7gLf2WZ67wAfxjgJ/9t3cxCzuXeaRA/yz/ h/XeOPSkoDSaJM1DjEsHf2EZNhZb5uaq491tP2vlkVxFjKt8ePHa1/PzQT9WSoANdh4/ 6dBxrJHkd3ZDuaco9FcA6h8CnqLJTu1UrCUH+kPCPyWq2X+hZjKwo6XOPkkw8iwSQ9jb 7BuyyFESgFphSbhhCAdk3IQht+/Olm7ubtT6LHjBLOQtIo39TriggFAz3jI3AczD2hwK V0437B1CncOTX/pkC74Nc1OCKSJbRVj9fYiFzDiiWhmJVi0BWzeBKWgaP98LlkYlAI2X 98VQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ndufresne-ca.20150623.gappssmtp.com header.s=20150623 header.b=WJLZIt46; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id l22si10771904ejb.500.2020.06.09.08.51.14; Tue, 09 Jun 2020 08:51:39 -0700 (PDT) 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; dkim=pass header.i=@ndufresne-ca.20150623.gappssmtp.com header.s=20150623 header.b=WJLZIt46; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730941AbgFIPpE (ORCPT + 99 others); Tue, 9 Jun 2020 11:45:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50290 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728888AbgFIPpD (ORCPT ); Tue, 9 Jun 2020 11:45:03 -0400 Received: from mail-qv1-xf41.google.com (mail-qv1-xf41.google.com [IPv6:2607:f8b0:4864:20::f41]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 66C11C05BD1E for ; Tue, 9 Jun 2020 08:45:01 -0700 (PDT) Received: by mail-qv1-xf41.google.com with SMTP id dp10so10276881qvb.10 for ; Tue, 09 Jun 2020 08:45:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ndufresne-ca.20150623.gappssmtp.com; s=20150623; h=message-id:subject:from:to:cc:date:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=Bh+YealWwxZJnbcfdPR1PFHaHzWJZRc7njZoU5SFKVg=; b=WJLZIt46oqvS0F1DmYUm0IdNNNQ4/DV49oPzeH7fSJHb751fH86VnBdLPrwEcUjvkK Zd8OZ+eJVM2Ka4nwUfZXQ6mSnRbOo8CzA4OBipaymuEtLDh+7TWUZT3d74baRLlh8X5J rcvICo3ktqtjdzjunktFpWePOGQOl/HDociqiOYgHNiA+E+03Fi7GR/VpCZFd0y6b/tH usYe8YztWy8MzIqPWUDUT8sIAOz0YdZ7L9lHsSu8DzbysWvHXmlWVYGZci4wn40mVPzT oWRvxAuB+L6VdBuAIPNogdJRjN2f4x9wyIWFbngfQaa7ieROT0Khb42P85nCgwd5+v1n RZJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:subject:from:to:cc:date:in-reply-to :references:user-agent:mime-version:content-transfer-encoding; bh=Bh+YealWwxZJnbcfdPR1PFHaHzWJZRc7njZoU5SFKVg=; b=fxdbItY+r/tkMueTskEgFBASSJ6uRK56CCIgbcJJN4zkN3R+E0wzsK92RpY9B3BTwN I4Y4HG48BIYdKVL/XkkGRh/t4XnN7Z+FkMNLEJswT0jPbYCtkGN4Tx/Lo2pm58F6j/zb 7K/D1vHq3nwQTvmPVyJO81MLzDaX6z+PK4wVC0ZF4n6W4U+HBlMURHx/i9nioPBBRMCF YW+tGmim3IJKgfjsnn3urIF6cLV7sZMVKxBo3X2psFNkpjdQOqyodWUMX/dK4LiAGIJL 3IHgtKlSsu9v2emwhCUIwqVxTVexxk3MYYgzmgN310H/vwivzWQjGLlPh0ixILOuEg8b fwVg== X-Gm-Message-State: AOAM531HDcVbsKUkDG5zEmLmK3AthC8mlB21IwaeAPOz91qOT8Vnz7lF 728h4AQFZJRXN6ij3Xwqz5EotA== X-Received: by 2002:a0c:f78a:: with SMTP id s10mr4707997qvn.32.1591717500384; Tue, 09 Jun 2020 08:45:00 -0700 (PDT) Received: from skullcanyon ([192.222.193.21]) by smtp.gmail.com with ESMTPSA id p22sm11214186qtc.7.2020.06.09.08.44.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2020 08:44:59 -0700 (PDT) Message-ID: Subject: Re: [PATCH 1/5] media: videodev2: add Compressed Framebuffer pixel formats From: Nicolas Dufresne To: Ezequiel Garcia , Neil Armstrong Cc: Hans Verkuil , linux-media , linux-amlogic@lists.infradead.org, Linux Kernel Mailing List , linux-arm-kernel , Maxime Jourdan , Tomasz Figa , Helen Koike Date: Tue, 09 Jun 2020 11:44:58 -0400 In-Reply-To: References: <20200604135317.9235-1-narmstrong@baylibre.com> <20200604135317.9235-2-narmstrong@baylibre.com> <02aa06fd8397b77c9a75d3a8399cb55d3b4d39c1.camel@ndufresne.ca> <4d22ff40-11ac-c77a-564d-af9a678f23af@baylibre.com> <2a0db0a4-9d04-f20c-39d8-ff25e07e64b7@xs4all.nl> <3ffe901f-73e4-bdf7-84a6-a5372186b55c@baylibre.com> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.36.2 (3.36.2-1.fc32) MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Le mardi 09 juin 2020 à 07:28 -0300, Ezequiel Garcia a écrit : > Adding Helen to the discussion. > > On Tue, 9 Jun 2020 at 04:43, Neil Armstrong wrote: > > Hi Nicolas, > > > > On 08/06/2020 20:59, Nicolas Dufresne wrote: > > > Le lundi 08 juin 2020 à 16:43 +0200, Hans Verkuil a écrit : > > > > On 08/06/2020 16:14, Neil Armstrong wrote: > > > > > On 08/06/2020 11:26, Hans Verkuil wrote: > > > > > > On 08/06/2020 10:16, Neil Armstrong wrote: > > > > > > > Hi Nicolas, > > > > > > > > > > > > > > On 05/06/2020 17:35, Nicolas Dufresne wrote: > > > > > > > > Le jeudi 04 juin 2020 à 15:53 +0200, Neil Armstrong a écrit : > > > > > > > > > From: Maxime Jourdan > > > > > > > > > > > > > > > > > > Add two generic Compressed Framebuffer pixel formats to be used > > > > > > > > > with a modifier when imported back in another subsystem like DRM/KMS. > > > > > > > > > > > > > > > > > > These pixel formats represents generic 8bits and 10bits compressed buffers > > > > > > > > > with a vendor specific layout. > > > > > > > > > > > > > > > > > > These are aligned with the DRM_FORMAT_YUV420_8BIT and DRM_FORMAT_YUV420_10BIT > > > > > > > > > used to describe the underlying compressed buffers used for ARM Framebuffer > > > > > > > > > Compression. In the Amlogic case, the compression is different but the > > > > > > > > > underlying buffer components is the same. > > > > > > > > > > > > > > > > > > Signed-off-by: Maxime Jourdan > > > > > > > > > Signed-off-by: Neil Armstrong > > > > > > > > > --- > > > > > > > > > drivers/media/v4l2-core/v4l2-ioctl.c | 2 ++ > > > > > > > > > include/uapi/linux/videodev2.h | 9 +++++++++ > > > > > > > > > 2 files changed, 11 insertions(+) > > > > > > > > > > > > > > > > > > diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c > > > > > > > > > index 2322f08a98be..8f14adfd5bc5 100644 > > > > > > > > > --- a/drivers/media/v4l2-core/v4l2-ioctl.c > > > > > > > > > +++ b/drivers/media/v4l2-core/v4l2-ioctl.c > > > > > > > > > @@ -1447,6 +1447,8 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt) > > > > > > > > > case V4L2_PIX_FMT_S5C_UYVY_JPG: descr = "S5C73MX interleaved UYVY/JPEG"; break; > > > > > > > > > case V4L2_PIX_FMT_MT21C: descr = "Mediatek Compressed Format"; break; > > > > > > > > > case V4L2_PIX_FMT_SUNXI_TILED_NV12: descr = "Sunxi Tiled NV12 Format"; break; > > > > > > > > > + case V4L2_PIX_FMT_YUV420_8BIT: descr = "Compressed YUV 4:2:0 8-bit Format"; break; > > > > > > > > > + case V4L2_PIX_FMT_YUV420_10BIT: descr = "Compressed YUV 4:2:0 10-bit Format"; break; > > > > > > > > > > [..] > > > > > > > > > > > > > I'll remind that the modifier implementation has great value and is > > > > > > > > much more scalable then the current V4L2 approach. There has been some > > > > > > > > early proposal for this, maybe it's time to prioritize because this > > > > > > > > list will starts growing with hundred or even thousands or format, > > > > > > > > which is clearly indicated by the increase of modifier generator macro > > > > > > > > on the DRM side. > > > > > > > > > > > > > > Yes, but until the migration of drm_fourcc and v4l2 fourcc into a common one > > > > > > > is decided, I'm stuck and this is the only intermediate solution I found. > > > > > > > > > > > > We can safely assume that drm fourcc and v4l2 fourcc won't be merged. > > > > > > > > > > > > There is too much divergence and not enough interest in creating common > > > > > > fourccs. > > > > > > > > > > > > But we *do* want to share the modifiers. > > > > > > > > > > > > > We have a working solution with Boris's patchset with ext_fmt passing the > > > > > > > modifier to user-space. > > > > > > > > > > > > > > but anyway, since the goal is to merge the fourcc between DRM & V4L2, these YUV420_*BIT > > > > > > > will still be needed if we pass the modifier with an extended format struct. > > > > > > > > > > > > We tried merging fourccs but that ran into resistance. Frankly, I wouldn't > > > > > > bother with this, it is much easier to just create a conversion table in the > > > > > > kernel docs. > > > > > > > > > > > > So don't block on this, I would really prefer if the ext_fmt series is picked > > > > > > up again and rebased and reposted and then worked on. The stateless codec support > > > > > > is taking less time (it's shaping up well) so there is more time to work on this. > > > > > > > > > > Ok, I already starting discussing with Helen Koike about the ext_fnt re-spin. > > > > > > > > > > Should I re-introduce different v4l2 pixfmt for these DRM YUV420_*BIT or I can keep this > > > > > patch along the new ext_fmt and shared modifiers ? > > > > > > > > So to be clear the DRM_FORMAT_YUV420_8BIT/10BIT fourccs define that this is a > > > > buffer containing compressed YUV420 in 8 or 10 bit and the modifier tells userspace > > > > which compression is used, right? > > > > > > > > And we would add V4L2_PIX_FMT_YUV420_8BIT/_10BIT that, I assume, use the same > > > > fourcc values as the DRM variants? > > > > > > > > Since these fourccs are basically useless without V4L2 modifier support it would > > > > only make sense in combination with the ext_fmt series. > > > > > > I personally still think that adding these fourcc will just create a > > > source of confusion and that fourcc should not be tried to be matched > > > at the cost of tripling the already duplicated pixel formats. Userspace > > > already need to implement translation anyway. > > > > By using the same fourcc + modifiers, the translation table would only be needed > > for v4l2-specific fourcc, by reusing the same it's not necessary anymore. > > We have a really simple ffmpeg implementation using ext_fmt, and it makes it > > generic. But it's not overall generic because "generic" userspace still need to handle legacy, like the Samsung NV12 tiled format. There is no way to avoid translation while supporting multiple HW (even with modifiers). And adding a subset of generic fourcc that duplicates some existing pixel format seems like the wrong way. Quickly this will grow fourcc collision between DRM and V4L2. > > > > > On DRM side, new fourcc was not create for NV12+modifier, I don't see > > > why planar YUV420 has to be different, with or without ext_fmt. > > > > These V4L2_PIX_FMT_YUV420_8BIT/_10BIT were added because of the compressed nature > > of buffers. It's not because of the modifiers, modifiers can be used we any fourcc > > to define vendor specific layout requirements or changes, but for compressed the > > underlying YUV buffer cannot be physically described by any YUV420 fourcc, so > > ARM introduced these fourcc to describe a virtual YUV420 8 or 10bit buffer which > > physical layout is defined by the modifier. > > They could have re-used DRM_FORMAT_YUV420, but it's a 2 plane fourcc, and the other > > describe a true single or multiple plane layout which are simply not true with > > ARM AFBC or Amlogic FBC. As far as I'm concern, this argument does not hold, as NV12 is still used with compressed modifiers on other plaforms (even if NV12 is not by "nature" compressed) and only 1 out of the two NV12 formats we got in V4L2 matches the DRM fourcc. So it might be "generic" to your specific SoC, but that's not real. In any case, I still believe the naming is completely misleading if this is to indicate a buffer format which is compressed, and not supposed to be used for linear YUV420p (which already have two fourcc in V4L2 for). > > > > Neil > > > > > Nicolas > > > > > > > Regards, > > > > > > > > Hans > > > > > > > > > Neil > > > > > > > > > > > I believe we really need this since v4l2_buffer and v4l2_format are a real mess. > > > > > > > > > > > > Regards, > > > > > > > > > > > > Hans > > > > > > > > > > > > > > > default: > > > > > > > > > if (fmt->description[0]) > > > > > > > > > return; > > > > > > > > > diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h > > > > > > > > > index c3a1cf1c507f..90b9949acb8a 100644 > > > > > > > > > --- a/include/uapi/linux/videodev2.h > > > > > > > > > +++ b/include/uapi/linux/videodev2.h > > > > > > > > > @@ -705,6 +705,15 @@ struct v4l2_pix_format { > > > > > > > > > #define V4L2_PIX_FMT_FWHT v4l2_fourcc('F', 'W', 'H', 'T') /* Fast Walsh Hadamard Transform (vicodec) */ > > > > > > > > > #define V4L2_PIX_FMT_FWHT_STATELESS v4l2_fourcc('S', 'F', 'W', 'H') /* Stateless FWHT (vicodec) */ > > > > > > > > > > > > > > > > > > +/* > > > > > > > > > + * Compressed Luminance+Chrominance meta-formats > > > > > > > > > + * In these formats, the component ordering is specified (Y, followed by U > > > > > > > > > + * then V), but the exact Linear layout is undefined. > > > > > > > > > + * These formats can only be used with a non-Linear modifier. > > > > > > > > > + */ > > > > > > > > > +#define V4L2_PIX_FMT_YUV420_8BIT v4l2_fourcc('Y', 'U', '0', '8') /* 1-plane YUV 4:2:0 8-bit */ > > > > > > > > > +#define V4L2_PIX_FMT_YUV420_10BIT v4l2_fourcc('Y', 'U', '1', '0') /* 1-plane YUV 4:2:0 10-bit */ > > > > > > > > > + > > > > > > > > > /* Vendor-specific formats */ > > > > > > > > > #define V4L2_PIX_FMT_CPIA1 v4l2_fourcc('C', 'P', 'I', 'A') /* cpia1 YUV */ > > > > > > > > > #define V4L2_PIX_FMT_WNVA v4l2_fourcc('W', 'N', 'V', 'A') /* Winnov hw compress */ > > > > > > > > > > > > > > [1] https://patchwork.freedesktop.org/series/73722/#rev7 > > > > > > >