From: Vignesh Venkatasubramanian <vigneshv-at-google.com@ffmpeg.org>
To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Subject: Re: [FFmpeg-devel] [PATCH 3/3] avformat/movenc: Add support for AVIF muxing
Date: Wed, 13 Apr 2022 14:33:00 -0700
Message-ID: <CAOJaEPK+eq+=5Ah4BQrU3_K5y1_jLQ8R6PgehdVxSvsNCbiLVA@mail.gmail.com> (raw)
In-Reply-To: <AS8PR01MB79444DA415DF2BF83DCE18BF8FEC9@AS8PR01MB7944.eurprd01.prod.exchangelabs.com>
On Wed, Apr 13, 2022 at 2:01 PM Andreas Rheinhardt
<andreas.rheinhardt@outlook.com> wrote:
>
> Vignesh Venkatasubramanian:
> > Add an AVIF muxer by re-using the existing the mov/mp4 muxer.
> >
> > AVIF Specification: https://aomediacodec.github.io/av1-avif
> >
> > Sample usage for still image:
> > ffmpeg -i image.png -c:v libaom-av1 -avif-image 1 image.avif
> >
> > Sample usage for animated AVIF image:
> > ffmpeg -i video.mp4 animated.avif
> >
> > We can re-use any of the AV1 encoding options that will make
> > sense for image encoding (like bitrate, tiles, encoding speed,
> > etc).
> >
> > The files generated by this muxer has been verified to be valid
> > AVIF files by the following:
> > 1) Displays on Chrome (both still and animated images).
> > 2) Displays on Firefox (only still images, firefox does not support
> > animated AVIF yet).
> > 3) Verified to be valid by Compliance Warden:
> > https://github.com/gpac/ComplianceWarden
> >
> > Fixes the encoder/muxer part of Trac Ticket #7621
> >
> > Signed-off-by: Vignesh Venkatasubramanian <vigneshv@google.com>
> > ---
> > configure | 1 +
> > libavformat/allformats.c | 1 +
> > libavformat/movenc.c | 337 ++++++++++++++++++++++++++++++++++++---
> > libavformat/movenc.h | 5 +
> > 4 files changed, 319 insertions(+), 25 deletions(-)
> >
> > +static int avif_write_trailer(AVFormatContext *s)
> > +{
> > + AVIOContext *pb = s->pb;
> > + MOVMuxContext *mov = s->priv_data;
> > + int64_t pos_backup, mdat_pos;
> > + uint8_t *buf;
> > + int buf_size, moov_size;
> > +
> > + if (mov->moov_written) return 0;
>
> Can it happen that moov_written is true? What happens if it is? (I
> presume the file to be invalid.)
>
This is more of a sanity check. I don't think this will ever happen
(as long as write_trailer is not called more than once). If you
prefer, i can remove it.
> > +
> > + mov->is_animated_avif = s->streams[0]->nb_frames > 1;
> > + mov_write_identification(pb, s);
> > + mov_write_meta_tag(pb, mov, s);
> > +
> > + moov_size = get_moov_size(s);
> > + mov->tracks[0].data_offset = avio_tell(pb) + moov_size + 8;
> > +
> > + if (mov->is_animated_avif) {
> > + int ret;
> > + if ((ret = mov_write_moov_tag(pb, mov, s)) < 0)
> > + return ret;
> > + }
> > +
> > + buf_size = avio_get_dyn_buf(mov->mdat_buf, &buf);
> > + avio_wb32(pb, buf_size + 8);
> > + ffio_wfourcc(pb, "mdat");
> > + mdat_pos = avio_tell(pb);
> > +
> > + if (mdat_pos != (uint32_t)mdat_pos) {
> > + av_log(s, AV_LOG_ERROR, "mdat offset does not fit in 32 bits\n");
> > + return AVERROR_INVALIDDATA;
> > + }
> > +
> > + avio_write(pb, buf, buf_size);
> > +
> > + // write extent offset.
> > + pos_backup = avio_tell(pb);
> > + avio_seek(pb, mov->avif_extent_pos, SEEK_SET);
> > + avio_wb32(pb, mdat_pos); /* rewrite offset */
> > + avio_seek(pb, pos_backup, SEEK_SET);
> > +
> > + return 0;
> > +}
> > +
>
> - Andreas
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
--
Vignesh
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
next prev parent reply other threads:[~2022-04-13 21:33 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-17 5:51 [FFmpeg-devel] [PATCH 1/3] avcodec/libaomenc: Add parameter for avif single image encoding Vignesh Venkatasubramanian
2022-02-17 5:51 ` [FFmpeg-devel] [PATCH 2/3] avformat/av1: Add a parameter to av1c to omit seq header Vignesh Venkatasubramanian
2022-03-02 22:57 ` James Almer
2022-03-02 23:22 ` Vignesh Venkatasubramanian
2022-03-02 23:23 ` Vignesh Venkatasubramanian
2022-03-02 23:27 ` James Almer
2022-03-28 20:48 ` Vignesh Venkatasubramanian
2022-04-13 20:40 ` Vignesh Venkatasubramanian
2022-05-02 21:36 ` Vignesh Venkatasubramanian
2022-02-17 5:51 ` [FFmpeg-devel] [PATCH 3/3] avformat/movenc: Add support for AVIF muxing Vignesh Venkatasubramanian
2022-02-22 18:40 ` Vignesh Venkatasubramanian
2022-02-22 20:03 ` James Almer
2022-02-22 21:37 ` Vignesh Venkatasubramanian
2022-02-22 21:38 ` Vignesh Venkatasubramanian
2022-02-22 21:43 ` Vignesh Venkatasubramanian
2022-02-24 17:34 ` Vignesh Venkatasubramanian
2022-03-01 16:49 ` Vignesh Venkatasubramanian
2022-03-03 15:36 ` James Almer
2022-03-03 19:16 ` Vignesh Venkatasubramanian
2022-03-04 11:24 ` James Almer
2022-03-04 17:52 ` Vignesh Venkatasubramanian
2022-03-04 17:54 ` Vignesh Venkatasubramanian
2022-03-09 19:34 ` Vignesh Venkatasubramanian
2022-03-10 16:01 ` Andreas Rheinhardt
2022-03-10 18:12 ` Vignesh Venkatasubramanian
2022-03-21 20:46 ` Andreas Rheinhardt
2022-03-22 16:45 ` Vignesh Venkatasubramanian
2022-03-22 16:46 ` Vignesh Venkatasubramanian
2022-03-28 17:06 ` Vignesh Venkatasubramanian
2022-03-28 20:49 ` Vignesh Venkatasubramanian
2022-04-07 18:25 ` Vignesh Venkatasubramanian
2022-04-13 17:21 ` James Zern
2022-04-13 20:40 ` Vignesh Venkatasubramanian
2022-04-13 21:01 ` Andreas Rheinhardt
2022-04-13 21:33 ` Vignesh Venkatasubramanian [this message]
2022-05-02 17:28 ` James Zern
2022-05-02 21:34 ` Vignesh Venkatasubramanian
2022-05-02 21:35 ` Vignesh Venkatasubramanian
2022-05-03 23:39 ` James Zern
2022-05-04 2:46 ` "zhilizhao(赵志立)"
2022-05-04 16:45 ` Vignesh Venkatasubramanian
2022-05-04 16:48 ` Vignesh Venkatasubramanian
2022-05-04 17:10 ` "zhilizhao(赵志立)"
2022-05-04 17:14 ` Vignesh Venkatasubramanian
2022-05-04 17:15 ` Vignesh Venkatasubramanian
2022-05-11 16:54 ` Vignesh Venkatasubramanian
2022-05-11 17:25 ` Gyan Doshi
2022-05-12 10:26 ` Gyan Doshi
2022-05-12 16:23 ` Vignesh Venkatasubramanian
2022-05-12 16:23 ` Vignesh Venkatasubramanian
2022-05-13 7:22 ` Gyan Doshi
2022-04-13 20:41 ` Vignesh Venkatasubramanian
2022-04-13 21:04 ` Andreas Rheinhardt
2022-04-13 21:35 ` Vignesh Venkatasubramanian
2022-04-21 16:38 ` Vignesh Venkatasubramanian
2022-04-29 16:03 ` Vignesh Venkatasubramanian
2022-03-10 18:14 ` Vignesh Venkatasubramanian
2022-03-15 15:59 ` Vignesh Venkatasubramanian
2022-03-21 17:07 ` Vignesh Venkatasubramanian
2022-03-03 19:20 ` Vignesh Venkatasubramanian
2022-03-03 19:46 ` James Almer
2022-03-03 19:57 ` Vignesh Venkatasubramanian
2022-02-17 18:09 ` [FFmpeg-devel] [PATCH 1/3] avcodec/libaomenc: Add parameter for avif single image encoding James Zern
2022-02-17 19:33 ` Vignesh Venkatasubramanian
2022-02-17 20:59 ` James Almer
2022-02-17 21:18 ` [FFmpeg-devel] [PATCH] " Vignesh Venkatasubramanian
2022-02-17 21:20 ` [FFmpeg-devel] [PATCH 1/3] " Vignesh Venkatasubramanian
2022-02-22 21:36 ` Vignesh Venkatasubramanian
2022-03-28 20:47 ` Vignesh Venkatasubramanian
2022-04-13 20:39 ` Vignesh Venkatasubramanian
2022-05-02 21:37 ` Vignesh Venkatasubramanian
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='CAOJaEPK+eq+=5Ah4BQrU3_K5y1_jLQ8R6PgehdVxSvsNCbiLVA@mail.gmail.com' \
--to=vigneshv-at-google.com@ffmpeg.org \
--cc=ffmpeg-devel@ffmpeg.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
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
This inbox may be cloned and mirrored by anyone:
git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
ffmpegdev@gitmailbox.com
public-inbox-index ffmpegdev
Example config snippet for mirrors.
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git