From: Hans Verkuil <hverkuil@xs4all.nl>
To: Nicolas Dufresne <nicolas.dufresne@collabora.com>,
Paul Kocialkowski <paul.kocialkowski@bootlin.com>,
linux-kernel@vger.kernel.org, linux-media@vger.kernel.org,
Sakari Ailus <sakari.ailus@iki.fi>,
Andrzej Pietrasiewicz <andrzej.p@collabora.com>,
Michael Tretter <m.tretter@pengutronix.de>
Cc: "Jernej Škrabec" <jernej.skrabec@gmail.com>,
"Chen-Yu Tsai" <wens@csie.org>,
"Samuel Holland" <samuel@sholland.org>,
"Thomas Petazzoni" <thomas.petazzoni@bootlin.com>
Subject: Re: Stateless Encoding uAPI Discussion and Proposal
Date: Wed, 26 Jul 2023 10:18:42 +0200 [thread overview]
Message-ID: <0b5717cb-8f30-c38c-f20e-e8a81d29423a@xs4all.nl> (raw)
In-Reply-To: <c46d0c53b7e5dc8dcdf7925f3d892024390a8b2b.camel@collabora.com>
On 11/07/2023 20:18, Nicolas Dufresne wrote:
> Le mardi 11 juillet 2023 à 19:12 +0200, Paul Kocialkowski a écrit :
>> Hi everyone!
>>
>> After various discussions following Andrzej's talk at EOSS, feedback from the
>> Media Summit (which I could not attend unfortunately) and various direct
>> discussions, I have compiled some thoughts and ideas about stateless encoders
>> support with various proposals. This is the result of a few years of interest
>> in the topic, after working on a PoC for the Hantro H1 using the hantro driver,
>> which turned out to have numerous design issues.
>>
>> I am now working on a H.264 encoder driver for Allwinner platforms (currently
>> focusing on the V3/V3s), which already provides some usable bitstream and will
>> be published soon.
>>
>> This is a very long email where I've tried to split things into distinct topics
>> and explain a few concepts to make sure everyone is on the same page.
>>
>> # Bitstream Headers
>>
>> Stateless encoders typically do not generate all the bitstream headers and
>> sometimes no header at all (e.g. Allwinner encoder does not even produce slice
>> headers). There's often some hardware block that makes bit-level writing to the
>> destination buffer easier (deals with alignment, etc).
>>
>> The values of the bitstream headers must be in line with how the compressed
>> data bitstream is generated and generally follow the codec specification.
>> Some encoders might allow configuring all the fields found in the headers,
>> others may only allow configuring a few or have specific constraints regarding
>> which values are allowed.
>>
>> As a result, we cannot expect that any given encoder is able to produce frames
>> for any set of headers. Reporting related constraints and limitations (beyond
>> profile/level) seems quite difficult and error-prone.
>>
>> So it seems that keeping header generation in-kernel only (close to where the
>> hardware is actually configured) is the safest approach.
>
> This seems to match with what happened with the Hantro VP8 proof of concept. The
> encoder does not produce the frame header, but also, it produces 2 encoded
> buffers which cannot be made contiguous at the hardware level. This notion of
> plane in coded data wasn't something that blended well with the rest of the API
> and we didn't want to copy in the kernel while the userspace would also be
> forced to copy to align the headers. Our conclusion was that it was best to
> generate the headers and copy both segment before delivering to userspace. I
> suspect this type of situation will be quite common.
>
>>
>> # Codec Features
>>
>> Codecs have many variable features that can be enabled or not and specific
>> configuration fields that can take various values. There is usually some
>> top-level indication of profile/level that restricts what can be used.
>>
>> This is a very similar situation to stateful encoding, where codec-specific
>> controls are used to report and set profile/level and configure these aspects.
>> A particularly nice thing about it is that we can reuse these existing controls
>> and add new ones in the future for features that are not yet covered.
>>
>> This approach feels more flexible than designing new structures with a selected
>> set of parameters (that could match the existing controls) for each codec.
>
> Though, reading more into this emails, we still have a fair amount of controls
> to design and add, probably some compound controls too ?
I expect that for stateless encoders support for read-only requests will be needed:
https://patchwork.linuxtv.org/project/linux-media/list/?series=5647
I worked on that in the past together with dynamic control arrays. The dynamic
array part was merged, but the read-only request part wasn't (there was never a
driver that actually needed it).
I don't know if that series still applies, but if there is a need for it then I
can rebase it and post an RFCv3.
Regards,
Hans
next prev parent reply other threads:[~2023-07-26 8:29 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-11 17:12 Stateless Encoding uAPI Discussion and Proposal Paul Kocialkowski
2023-07-11 18:18 ` Nicolas Dufresne
2023-07-12 14:07 ` Paul Kocialkowski
2023-07-25 3:33 ` Hsia-Jun Li
2023-07-25 12:15 ` Paul Kocialkowski
2023-07-26 2:49 ` Hsia-Jun Li
2023-07-26 19:53 ` Nicolas Dufresne
2023-07-27 2:45 ` Hsia-Jun Li
2023-07-27 17:10 ` Nicolas Dufresne
2023-07-26 8:18 ` Hans Verkuil [this message]
2023-08-09 14:43 ` Paul Kocialkowski
2023-08-09 17:24 ` Andrzej Pietrasiewicz
2023-07-21 18:19 ` Michael Grzeschik
2023-07-24 14:03 ` Nicolas Dufresne
2023-07-25 9:09 ` Paul Kocialkowski
2023-07-26 20:02 ` Nicolas Dufresne
2023-08-10 13:44 ` Paul Kocialkowski
2023-08-10 14:34 ` Nicolas Dufresne
2023-08-11 20:08 ` Paul Kocialkowski
2023-08-21 15:13 ` Nicolas Dufresne
2023-08-22 8:30 ` Hsia-Jun Li
2023-08-22 20:31 ` Nicolas Dufresne
2023-08-23 3:04 ` Hsia-Jun Li
2023-08-30 15:10 ` Nicolas Dufresne
2023-08-30 16:51 ` Randy Li
2023-08-30 15:18 ` Nicolas Dufresne
2023-08-31 9:32 ` Hsia-Jun Li
2023-08-23 8:05 ` Paul Kocialkowski
2023-11-15 13:19 ` 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=0b5717cb-8f30-c38c-f20e-e8a81d29423a@xs4all.nl \
--to=hverkuil@xs4all.nl \
--cc=andrzej.p@collabora.com \
--cc=jernej.skrabec@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=m.tretter@pengutronix.de \
--cc=nicolas.dufresne@collabora.com \
--cc=paul.kocialkowski@bootlin.com \
--cc=sakari.ailus@iki.fi \
--cc=samuel@sholland.org \
--cc=thomas.petazzoni@bootlin.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).