Josef Zlomek:
> Adds the demuxer of animated WebP files.
> It supports non-animated, animated, truncated, and concatenated files.
> Reading from a pipe (and other non-seekable inputs) is also supported.
> 
> The WebP demuxer splits the input stream into packets containing one frame.
> It also sets the timing information and marks the key frames properly.
> The loop count is ignored by default (same behaviour as animated PNG and GIF),
> it may be enabled by the option '-ignore_loop 0'.
> 
> Signed-off-by: Josef Zlomek <jo...@pex.com>
> ---
>  Changelog                                   |   1 +
>  doc/demuxers.texi                           |  28 +
>  libavformat/Makefile                        |   1 +
>  libavformat/allformats.c                    |   1 +
>  libavformat/webpdec.c                       | 732 ++++++++++++++++++++
>  tests/ref/fate/exif-image-webp              |   8 +-
>  tests/ref/fate/webp-rgb-lena-lossless       |   2 +-
>  tests/ref/fate/webp-rgb-lena-lossless-rgb24 |   2 +-
>  tests/ref/fate/webp-rgb-lossless            |   2 +-
>  tests/ref/fate/webp-rgb-lossy-q80           |   2 +-
>  tests/ref/fate/webp-rgba-lossless           |   2 +-
>  tests/ref/fate/webp-rgba-lossy-q80          |   2 +-

Great that you also add so many tests for the new demuxer.

>  12 files changed, 773 insertions(+), 10 deletions(-)
>  create mode 100644 libavformat/webpdec.c
> 
> +    if (headers && headers->data) {
> +        uint8_t *side_data = av_memdup(headers->data, headers->size);
> +        if (!side_data)
> +            return AVERROR(ENOMEM);
> +
> +        ret = av_packet_add_side_data(pkt, AV_PKT_DATA_NEW_EXTRADATA,
> +                                      side_data, headers->size);

It is better to use av_packet_new_side_data() here: It takes care of the
case when the buffer could be allocated, but reallocating the side-data
array fails; and it also adds padding to the allocated buffer. Side data
of type AV_PKT_DATA_NEW_EXTRADATA should have it.

> +        if (ret < 0) {
> +            av_free(side_data);
> +            return ret;
> +        }
> +
> +        s->streams[0]->internal->need_context_update = 1;
> +        s->streams[0]->codecpar->width  = headers->canvas_width;
> +        s->streams[0]->codecpar->height = headers->canvas_height;
> +
> +        // copy the fields needed for the key frame detection
> +        wdc->canvas_width  = headers->canvas_width;
> +        wdc->canvas_height = headers->canvas_height;
> +    }
> +
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to