mbox series

[v3,0/3] Add WebP support to hantro decoder

Message ID 20241121131904.261230-1-hugues.fruchet@foss.st.com (mailing list archive)
Headers show
Series Add WebP support to hantro decoder | expand

Message

Hugues FRUCHET Nov. 21, 2024, 1:19 p.m. UTC
Add WebP image decoding support to stateless V4L2 VP8 decoder.

This have been tested on STM32MP257-EV board using GStreamer.

Simple basic test:
$> wget https://www.gstatic.com/webp/gallery/1.webp
$> gst-launch-1.0 filesrc location= 1.webp ! typefind ! v4l2slwebpdec ! imagefreeze num-buffers=20 ! waylandsink fullscreen=true

Slideshow of a set of WebP pictures and WebM video files:
$> wget https://www.gstatic.com/webp/gallery/2.webp
$> wget https://www.gstatic.com/webp/gallery/3.webp
$> wget https://www.gstatic.com/webp/gallery/4.webp
$> wget https://www.gstatic.com/webp/gallery/5.webp
$> wget https://samplemedia.linaro.org/VP8/big_buck_bunny_480p_VP8_VORBIS_25fps_1900K_short.WebM
$> gst-play-1.0 *.webp *.webm *.WebM --wait-on-eos
<hit key ">" to display next file >

Large WebP image > 16777215 (size > 2^24)
$> gst-launch-1.0 fakesrc num-buffers=1 format=4 do-timestamp=true filltype=3 sizetype=2 sizemax=25165824 blocksize=25165824 ! video/x-raw, format=I420, width=4096, height=3072, framerate=1/1 ! webpenc quality=100 ! filesink location=4096x3072_HQ_random.webp
$> ls -l 4096x3072_HQ_random.webp
[...] 16877404 Nov 20 11:40 4096x3072_HQ_random.webp
$> gst-launch-1.0 filesrc location= 4096x3072_HQ_random.webp blocksize=16876610 ! image/webp, width=1, height=1, framerate=0/1 ! v4l2slwebpdec ! imagefreeze num-buffers=20 ! waylandsink fullscreen=true

Large WebP image decoding using post-processor is untested because of lack
of hardware support on this platform, nevertheless support is provided in
this serie for further testing on another platform having post-processor
support.

===========
= history =
===========
version 3:
   - Fix remarks from Nicolas Dufresne:
    - Document constraint about key frame only for WebP
    - Fix rebase issue
   - Fix typo detected by Diederik de Haas

version 2:
   - Fix remarks from Nicolas Dufresne:
    - Use bytesperline helper to compute chroma size
    - Introduce a new explicit WEBP frame compressed format
      instead of relying on VP8 + WebP flag
    - 4K support in both decoder and post-proc

version 1:
  - Initial submission

Hugues Fruchet (3):
  media: uapi: add WebP uAPI
  media: verisilicon: add WebP decoding support
  media: verisilicon: postproc: 4K support

 .../userspace-api/media/v4l/biblio.rst          |  9 +++++++++
 .../media/v4l/pixfmt-compressed.rst             | 17 +++++++++++++++++
 drivers/media/platform/verisilicon/hantro.h     |  2 ++
 .../media/platform/verisilicon/hantro_g1_regs.h |  3 ++-
 .../platform/verisilicon/hantro_g1_vp8_dec.c    | 14 ++++++++++++++
 .../platform/verisilicon/hantro_postproc.c      |  6 +++++-
 .../media/platform/verisilicon/hantro_v4l2.c    |  2 ++
 .../platform/verisilicon/stm32mp25_vpu_hw.c     | 17 +++++++++++++++--
 drivers/media/v4l2-core/v4l2-ioctl.c            |  1 +
 include/uapi/linux/videodev2.h                  |  1 +
 10 files changed, 68 insertions(+), 4 deletions(-)

Comments

Hugues FRUCHET Nov. 21, 2024, 2:16 p.m. UTC | #1
Hi all,

The corresponding GStreamer code has been pushed here (v4l2slwebpdec):
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7939

BR,
Hugues.

On 11/21/24 14:19, Hugues Fruchet wrote:
> Add WebP image decoding support to stateless V4L2 VP8 decoder.
> 
> This have been tested on STM32MP257-EV board using GStreamer.
> 
> Simple basic test:
> $> wget https://www.gstatic.com/webp/gallery/1.webp
> $> gst-launch-1.0 filesrc location= 1.webp ! typefind ! v4l2slwebpdec ! imagefreeze num-buffers=20 ! waylandsink fullscreen=true
> 
> Slideshow of a set of WebP pictures and WebM video files:
> $> wget https://www.gstatic.com/webp/gallery/2.webp
> $> wget https://www.gstatic.com/webp/gallery/3.webp
> $> wget https://www.gstatic.com/webp/gallery/4.webp
> $> wget https://www.gstatic.com/webp/gallery/5.webp
> $> wget https://samplemedia.linaro.org/VP8/big_buck_bunny_480p_VP8_VORBIS_25fps_1900K_short.WebM
> $> gst-play-1.0 *.webp *.webm *.WebM --wait-on-eos
> <hit key ">" to display next file >
> 
> Large WebP image > 16777215 (size > 2^24)
> $> gst-launch-1.0 fakesrc num-buffers=1 format=4 do-timestamp=true filltype=3 sizetype=2 sizemax=25165824 blocksize=25165824 ! video/x-raw, format=I420, width=4096, height=3072, framerate=1/1 ! webpenc quality=100 ! filesink location=4096x3072_HQ_random.webp
> $> ls -l 4096x3072_HQ_random.webp
> [...] 16877404 Nov 20 11:40 4096x3072_HQ_random.webp
> $> gst-launch-1.0 filesrc location= 4096x3072_HQ_random.webp blocksize=16876610 ! image/webp, width=1, height=1, framerate=0/1 ! v4l2slwebpdec ! imagefreeze num-buffers=20 ! waylandsink fullscreen=true
> 
> Large WebP image decoding using post-processor is untested because of lack
> of hardware support on this platform, nevertheless support is provided in
> this serie for further testing on another platform having post-processor
> support.
> 
> ===========
> = history =
> ===========
> version 3:
>     - Fix remarks from Nicolas Dufresne:
>      - Document constraint about key frame only for WebP
>      - Fix rebase issue
>     - Fix typo detected by Diederik de Haas
> 
> version 2:
>     - Fix remarks from Nicolas Dufresne:
>      - Use bytesperline helper to compute chroma size
>      - Introduce a new explicit WEBP frame compressed format
>        instead of relying on VP8 + WebP flag
>      - 4K support in both decoder and post-proc
> 
> version 1:
>    - Initial submission
> 
> Hugues Fruchet (3):
>    media: uapi: add WebP uAPI
>    media: verisilicon: add WebP decoding support
>    media: verisilicon: postproc: 4K support
> 
>   .../userspace-api/media/v4l/biblio.rst          |  9 +++++++++
>   .../media/v4l/pixfmt-compressed.rst             | 17 +++++++++++++++++
>   drivers/media/platform/verisilicon/hantro.h     |  2 ++
>   .../media/platform/verisilicon/hantro_g1_regs.h |  3 ++-
>   .../platform/verisilicon/hantro_g1_vp8_dec.c    | 14 ++++++++++++++
>   .../platform/verisilicon/hantro_postproc.c      |  6 +++++-
>   .../media/platform/verisilicon/hantro_v4l2.c    |  2 ++
>   .../platform/verisilicon/stm32mp25_vpu_hw.c     | 17 +++++++++++++++--
>   drivers/media/v4l2-core/v4l2-ioctl.c            |  1 +
>   include/uapi/linux/videodev2.h                  |  1 +
>   10 files changed, 68 insertions(+), 4 deletions(-)
>
Adam Ford Nov. 24, 2024, 3:09 a.m. UTC | #2
On Thu, Nov 21, 2024 at 7:22 AM Hugues Fruchet
<hugues.fruchet@foss.st.com> wrote:
>
> Add WebP image decoding support to stateless V4L2 VP8 decoder.
>
> This have been tested on STM32MP257-EV board using GStreamer.

I want to test this on an i.MX8M Mini.  Is there a certain gstreamer
version or branch I should use, or is 1.24 sufficient?

adam
>
> Simple basic test:
> $> wget https://www.gstatic.com/webp/gallery/1.webp
> $> gst-launch-1.0 filesrc location= 1.webp ! typefind ! v4l2slwebpdec ! imagefreeze num-buffers=20 ! waylandsink fullscreen=true
>
> Slideshow of a set of WebP pictures and WebM video files:
> $> wget https://www.gstatic.com/webp/gallery/2.webp
> $> wget https://www.gstatic.com/webp/gallery/3.webp
> $> wget https://www.gstatic.com/webp/gallery/4.webp
> $> wget https://www.gstatic.com/webp/gallery/5.webp
> $> wget https://samplemedia.linaro.org/VP8/big_buck_bunny_480p_VP8_VORBIS_25fps_1900K_short.WebM
> $> gst-play-1.0 *.webp *.webm *.WebM --wait-on-eos
> <hit key ">" to display next file >
>
> Large WebP image > 16777215 (size > 2^24)
> $> gst-launch-1.0 fakesrc num-buffers=1 format=4 do-timestamp=true filltype=3 sizetype=2 sizemax=25165824 blocksize=25165824 ! video/x-raw, format=I420, width=4096, height=3072, framerate=1/1 ! webpenc quality=100 ! filesink location=4096x3072_HQ_random.webp
> $> ls -l 4096x3072_HQ_random.webp
> [...] 16877404 Nov 20 11:40 4096x3072_HQ_random.webp
> $> gst-launch-1.0 filesrc location= 4096x3072_HQ_random.webp blocksize=16876610 ! image/webp, width=1, height=1, framerate=0/1 ! v4l2slwebpdec ! imagefreeze num-buffers=20 ! waylandsink fullscreen=true
>
> Large WebP image decoding using post-processor is untested because of lack
> of hardware support on this platform, nevertheless support is provided in
> this serie for further testing on another platform having post-processor
> support.
>
> ===========
> = history =
> ===========
> version 3:
>    - Fix remarks from Nicolas Dufresne:
>     - Document constraint about key frame only for WebP
>     - Fix rebase issue
>    - Fix typo detected by Diederik de Haas
>
> version 2:
>    - Fix remarks from Nicolas Dufresne:
>     - Use bytesperline helper to compute chroma size
>     - Introduce a new explicit WEBP frame compressed format
>       instead of relying on VP8 + WebP flag
>     - 4K support in both decoder and post-proc
>
> version 1:
>   - Initial submission
>
> Hugues Fruchet (3):
>   media: uapi: add WebP uAPI
>   media: verisilicon: add WebP decoding support
>   media: verisilicon: postproc: 4K support
>
>  .../userspace-api/media/v4l/biblio.rst          |  9 +++++++++
>  .../media/v4l/pixfmt-compressed.rst             | 17 +++++++++++++++++
>  drivers/media/platform/verisilicon/hantro.h     |  2 ++
>  .../media/platform/verisilicon/hantro_g1_regs.h |  3 ++-
>  .../platform/verisilicon/hantro_g1_vp8_dec.c    | 14 ++++++++++++++
>  .../platform/verisilicon/hantro_postproc.c      |  6 +++++-
>  .../media/platform/verisilicon/hantro_v4l2.c    |  2 ++
>  .../platform/verisilicon/stm32mp25_vpu_hw.c     | 17 +++++++++++++++--
>  drivers/media/v4l2-core/v4l2-ioctl.c            |  1 +
>  include/uapi/linux/videodev2.h                  |  1 +
>  10 files changed, 68 insertions(+), 4 deletions(-)
>
> --
> 2.25.1
>
>
Hugues FRUCHET Nov. 25, 2024, 7:49 a.m. UTC | #3
Hi Adam,

On 11/24/24 04:09, Adam Ford wrote:
> On Thu, Nov 21, 2024 at 7:22 AM Hugues Fruchet
> <hugues.fruchet@foss.st.com> wrote:
>>
>> Add WebP image decoding support to stateless V4L2 VP8 decoder.
>>
>> This have been tested on STM32MP257-EV board using GStreamer.
> 
> I want to test this on an i.MX8M Mini.  Is there a certain gstreamer
> version or branch I should use, or is 1.24 sufficient?


The corresponding GStreamer code has been pushed here (v4l2slwebpdec):
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7939

BR,
Hugues.

> 
> adam
>>
>> Simple basic test:
>> $> wget https://www.gstatic.com/webp/gallery/1.webp
>> $> gst-launch-1.0 filesrc location= 1.webp ! typefind ! v4l2slwebpdec ! imagefreeze num-buffers=20 ! waylandsink fullscreen=true
>>
>> Slideshow of a set of WebP pictures and WebM video files:
>> $> wget https://www.gstatic.com/webp/gallery/2.webp
>> $> wget https://www.gstatic.com/webp/gallery/3.webp
>> $> wget https://www.gstatic.com/webp/gallery/4.webp
>> $> wget https://www.gstatic.com/webp/gallery/5.webp
>> $> wget https://samplemedia.linaro.org/VP8/big_buck_bunny_480p_VP8_VORBIS_25fps_1900K_short.WebM
>> $> gst-play-1.0 *.webp *.webm *.WebM --wait-on-eos
>> <hit key ">" to display next file >
>>
>> Large WebP image > 16777215 (size > 2^24)
>> $> gst-launch-1.0 fakesrc num-buffers=1 format=4 do-timestamp=true filltype=3 sizetype=2 sizemax=25165824 blocksize=25165824 ! video/x-raw, format=I420, width=4096, height=3072, framerate=1/1 ! webpenc quality=100 ! filesink location=4096x3072_HQ_random.webp
>> $> ls -l 4096x3072_HQ_random.webp
>> [...] 16877404 Nov 20 11:40 4096x3072_HQ_random.webp
>> $> gst-launch-1.0 filesrc location= 4096x3072_HQ_random.webp blocksize=16876610 ! image/webp, width=1, height=1, framerate=0/1 ! v4l2slwebpdec ! imagefreeze num-buffers=20 ! waylandsink fullscreen=true
>>
>> Large WebP image decoding using post-processor is untested because of lack
>> of hardware support on this platform, nevertheless support is provided in
>> this serie for further testing on another platform having post-processor
>> support.
>>
>> ===========
>> = history =
>> ===========
>> version 3:
>>     - Fix remarks from Nicolas Dufresne:
>>      - Document constraint about key frame only for WebP
>>      - Fix rebase issue
>>     - Fix typo detected by Diederik de Haas
>>
>> version 2:
>>     - Fix remarks from Nicolas Dufresne:
>>      - Use bytesperline helper to compute chroma size
>>      - Introduce a new explicit WEBP frame compressed format
>>        instead of relying on VP8 + WebP flag
>>      - 4K support in both decoder and post-proc
>>
>> version 1:
>>    - Initial submission
>>
>> Hugues Fruchet (3):
>>    media: uapi: add WebP uAPI
>>    media: verisilicon: add WebP decoding support
>>    media: verisilicon: postproc: 4K support
>>
>>   .../userspace-api/media/v4l/biblio.rst          |  9 +++++++++
>>   .../media/v4l/pixfmt-compressed.rst             | 17 +++++++++++++++++
>>   drivers/media/platform/verisilicon/hantro.h     |  2 ++
>>   .../media/platform/verisilicon/hantro_g1_regs.h |  3 ++-
>>   .../platform/verisilicon/hantro_g1_vp8_dec.c    | 14 ++++++++++++++
>>   .../platform/verisilicon/hantro_postproc.c      |  6 +++++-
>>   .../media/platform/verisilicon/hantro_v4l2.c    |  2 ++
>>   .../platform/verisilicon/stm32mp25_vpu_hw.c     | 17 +++++++++++++++--
>>   drivers/media/v4l2-core/v4l2-ioctl.c            |  1 +
>>   include/uapi/linux/videodev2.h                  |  1 +
>>   10 files changed, 68 insertions(+), 4 deletions(-)
>>
>> --
>> 2.25.1
>>
>>