[FFmpeg-devel] [PATCH] avformat/mov: Only read the primary item for AVIF

Vignesh Venkatasubramanian vigneshv at google.com
Fri Jun 10 20:37:23 EEST 2022


On Fri, Jun 10, 2022 at 10:33 AM Andreas Rheinhardt
<andreas.rheinhardt at outlook.com> wrote:
>
> Vignesh Venkatasubramanian:
> > Update the still AVIF parser to only read the primary item. With this
> > patch, AVIF still images with exif/icc/alpha channel will no longer
> > fail to parse.
> >
> > For example, this patch enables parsing of files in:
> > https://github.com/AOMediaCodec/av1-avif/tree/master/testFiles/Microsoft
> >
> > Adding two fate tests:
> > 1) demuxing of still image with 1 item - this test will pass regardlesss
> >    of this patch.
> > 2) demuxing of still image with 2 items - this test will fail without
> >    this patch and will pass with patch applied.
> >
> > Partially fixes trac ticket #7621
> >
> > Signed-off-by: Vignesh Venkatasubramanian <vigneshv at google.com>
> > ---
> >  libavformat/isom.h                            |  1 +
> >  libavformat/mov.c                             | 41 ++++++++++---------
> >  tests/fate/mov.mak                            |  9 ++++
> >  .../fate/mov-avif-demux-still-image-1-item    | 11 +++++
> >  .../mov-avif-demux-still-image-multiple-items | 11 +++++
> >  5 files changed, 53 insertions(+), 20 deletions(-)
> >  create mode 100644 tests/ref/fate/mov-avif-demux-still-image-1-item
> >  create mode 100644 tests/ref/fate/mov-avif-demux-still-image-multiple-items
> >
> > diff --git a/tests/fate/mov.mak b/tests/fate/mov.mak
> > index 2fae054423..842c7f9aa1 100644
> > --- a/tests/fate/mov.mak
> > +++ b/tests/fate/mov.mak
> > @@ -17,6 +17,8 @@ FATE_MOV = fate-mov-3elist \
> >             fate-mov-bbi-elst-starts-b \
> >             fate-mov-neg-firstpts-discard-frames \
> >             fate-mov-stream-shorter-than-movie \
> > +           fate-mov-avif-demux-still-image-1-item \
> > +           fate-mov-avif-demux-still-image-multiple-items \
> >
> >  FATE_MOV_FFPROBE = fate-mov-neg-firstpts-discard \
> >                     fate-mov-neg-firstpts-discard-vorbis \
> > @@ -138,6 +140,13 @@ FATE_MOV_FFMPEG_FFPROBE-$(call TRANSCODE, TTML SUBRIP, MP4 MOV, SRT_DEMUXER TTML
> >  fate-mov-mp4-ttml-stpp: CMD = transcode srt $(TARGET_SAMPLES)/sub/SubRip_capability_tester.srt mp4 "-map 0:s -c:s ttml -time_base:s 1:1000" "-map 0 -c copy" "-of json -show_entries packet:stream=index,codec_type,codec_tag_string,codec_tag,codec_name,time_base,start_time,duration_ts,duration,nb_frames,nb_read_packets:stream_tags"
> >  fate-mov-mp4-ttml-dfxp: CMD = transcode srt $(TARGET_SAMPLES)/sub/SubRip_capability_tester.srt mp4 "-map 0:s -c:s ttml -time_base:s 1:1000 -tag:s dfxp -strict unofficial" "-map 0 -c copy" "-of json -show_entries packet:stream=index,codec_type,codec_tag_string,codec_tag,codec_name,time_base,start_time,duration_ts,duration,nb_frames,nb_read_packets:stream_tags"
> >
> > +# avif demuxing - still image with 1 item.
> > +fate-mov-avif-demux-still-image-1-item: CMD = framemd5 -i $(TARGET_SAMPLES)/avif/still_image.avif -c:v copy
> > +
> > +# avif demuxing - still image with multiple items. only the primary item will be
> > +# parsed.
> > +fate-mov-avif-demux-still-image-multiple-items: CMD = framemd5 -i $(TARGET_SAMPLES)/avif/still_image_exif.avif -c:v copy
>
> Can we create such files with our muxer? In this case one could use a
> remux test, i.e. a test that creates the file and the demuxes the just
> created file.
>

Unfortunately, the file with exif cannot be created using the ffmpeg's
muxer as of now. So we will have to get that externally (i made that
with MP4Box).

The other still image file however can be creating using our muxer. I
will add another test that does remuxing for the 1-item case in a
separate patch if that's alright (since it's not directly related to
what this patch is doing). I was also going to add some fate tests for
animated AVIF muxing/parsing, so i will include that in the other
patch as well.

> > +
> >  # Resulting remux should have:
> >  # 1. first audio stream with AV_DISPOSITION_HEARING_IMPAIRED
> >  # 2. second audio stream with AV_DISPOSITION_VISUAL_IMPAIRED | DESCRIPTIONS
> > diff --git a/tests/ref/fate/mov-avif-demux-still-image-1-item b/tests/ref/fate/mov-avif-demux-still-image-1-item
> > new file mode 100644
> > index 0000000000..93773afd4e
> > --- /dev/null
> > +++ b/tests/ref/fate/mov-avif-demux-still-image-1-item
> > @@ -0,0 +1,11 @@
> > +#format: frame checksums
> > +#version: 2
> > +#hash: MD5
> > +#extradata 0,                              13, b52ae298d37128862ef1918cf916239c
> > +#tb 0: 1/1
> > +#media_type 0: video
> > +#codec_id 0: av1
> > +#dimensions 0: 352x288
> > +#sar 0: 1/1
> > +#stream#, dts,        pts, duration,     size, hash
> > +0,          0,          0,        1,    36265, 235b0c6e389c4084845981e08d60db04
> > diff --git a/tests/ref/fate/mov-avif-demux-still-image-multiple-items b/tests/ref/fate/mov-avif-demux-still-image-multiple-items
> > new file mode 100644
> > index 0000000000..93773afd4e
> > --- /dev/null
> > +++ b/tests/ref/fate/mov-avif-demux-still-image-multiple-items
> > @@ -0,0 +1,11 @@
> > +#format: frame checksums
> > +#version: 2
> > +#hash: MD5
> > +#extradata 0,                              13, b52ae298d37128862ef1918cf916239c
> > +#tb 0: 1/1
> > +#media_type 0: video
> > +#codec_id 0: av1
> > +#dimensions 0: 352x288
> > +#sar 0: 1/1
> > +#stream#, dts,        pts, duration,     size, hash
> > +0,          0,          0,        1,    36265, 235b0c6e389c4084845981e08d60db04
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".



-- 
Vignesh


More information about the ffmpeg-devel mailing list