Hi Andrzej,

Thank you for working on this!

On 21/04/2021 12:00, Andrzej Pietrasiewicz wrote:
> Dear All,
> 
> This is an RFC on stateless uapi for vp9 decoding with v4l2. This work is 
> based on https://lkml.org/lkml/2020/11/2/1043, but has been substantially 
> reworked. The important change is that the v4l2 control used to pass boolean 
> decoder probabilities has been made unidirectional, and is now called 
> V4L2_CID_STATELESS_VP9_COMPRESSED_HDR_PROBS.
> 
> In the previous proposal, to queue a frame the userspace must fully dequeue 
> the previous one, which effectively results in a forced lockstep behavior and 
> defeats vb2's capability to enqueue multiple buffers. Such a design was a 
> consequence of backward probability updates being performed by the kernel 
> driver (which has direct access to appropriate counter values) but forward 
> probability updates being coupled with compressed header parsing performed by 
> the userspace.
> 
> In vp9 the boolean decoder used to decode the bitstream needs certain 
> parameters to work. Those are probabilities, which change with each frame. 
> After each frame is decoded it is known how many times a given symbol occured 
> in the frame, so the probabilities can be adapted. This process is known as 
> backward probabilities update. A next frame header can also contain 
> information which modifies probabilities resulting from backward update. The 
> said modification is called forward probabilities update. The data for 
> backward update is generated by the decoder hardware, while the data for 
> forward update is prepared by reading the compressed frame header. The 
> natural place to parse something is userspace, while the natural place to 
> access hardware-provided counters is the kernel. Such responsibilties 
> assignment was used in the original work.
> 
> To overcome the lockstep, we moved forward probability updates to the kernel, 
> while leaving parsing them in userspace. This way the v4l2 control which is 
> used to pass the probs becomes unidirectional (user->kernel) and the 
> userspace can keep parsing and enqueueing succeeding frames.
> 
> If a particular driver parses the compressed header and does backward 
> probability updates on its own then 
> V4L2_CID_STATELESS_VP9_COMPRESSED_HDR_PROBS does not need to be used.
> 
> This series adds vp9 uapi in proper locations, which means it is a proper, 
> "official" uapi, as opposed to staging uapi which was proposed in the above 
> mentioned lkml thread.

Why? I rather liked the way that the other codec APIs started life in a private 
header
(like include/media/vp8-ctrls.h) and were given time to mature before moving 
them to
the uAPI. Is there a reason why you think that VP9 doesn't need that?

> 
> The series adds vp9 support to rkvdec driver.
> 
> Rebased onto media_tree.
> 
> I kindly ask for your comments.
> 
> TODO:
> 
> - potentially fine-tune the uAPI (add/remove fields, move between structs)
> - write another driver (intended g2 @ iMX8)
> - verify the added documentation
> 
> Regards,
> 
> Andrzej
> 
> Andrzej Pietrasiewicz (1):
>   media: uapi: Add VP9 stateless decoder controls
> 
> Boris Brezillon (1):
>   media: rkvdec: Add the VP9 backend
> 
> Ezequiel Garcia (1):
>   media: rkvdec: Fix .buf_prepare

Isn't this just a bug fix? Should it be part of this series at all?

If it is just a bug fix, then please post it separately and let me know if it is
a fix that should go to 5.13 (i.e. the current mainline) or if 5.14 is fine.

Regards,

        Hans

> 
>  .../userspace-api/media/v4l/biblio.rst        |   10 +
>  .../media/v4l/ext-ctrls-codec-stateless.rst   |  523 +++
>  .../media/v4l/pixfmt-compressed.rst           |   15 +
>  .../media/v4l/vidioc-g-ext-ctrls.rst          |    8 +
>  .../media/v4l/vidioc-queryctrl.rst            |   12 +
>  .../media/videodev2.h.rst.exceptions          |    2 +
>  drivers/media/v4l2-core/v4l2-ctrls.c          |  244 ++
>  drivers/media/v4l2-core/v4l2-ioctl.c          |    1 +
>  drivers/staging/media/rkvdec/Makefile         |    2 +-
>  drivers/staging/media/rkvdec/rkvdec-vp9.c     | 2846 +++++++++++++++++
>  drivers/staging/media/rkvdec/rkvdec.c         |   62 +-
>  drivers/staging/media/rkvdec/rkvdec.h         |    6 +
>  include/media/v4l2-ctrls.h                    |    4 +
>  include/uapi/linux/v4l2-controls.h            |  455 +++
>  include/uapi/linux/videodev2.h                |    6 +
>  15 files changed, 4190 insertions(+), 6 deletions(-)
>  create mode 100644 drivers/staging/media/rkvdec/rkvdec-vp9.c
> 

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to