From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 2B0EC42101 for ; Tue, 22 Feb 2022 20:03:24 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DA88768B125; Tue, 22 Feb 2022 22:03:21 +0200 (EET) Received: from mail-oi1-f180.google.com (mail-oi1-f180.google.com [209.85.167.180]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BD5ED68AF33 for ; Tue, 22 Feb 2022 22:03:15 +0200 (EET) Received: by mail-oi1-f180.google.com with SMTP id y7so15818379oih.5 for ; Tue, 22 Feb 2022 12:03:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=message-id:date:mime-version:user-agent:subject:content-language:to :references:from:in-reply-to:content-transfer-encoding; bh=UxtQBAZhvtYX/FbbUaphmYejzZpz+KKST4GftSr7gdw=; b=gPizx4IW0qG7ji/q6+L6/jAxjjv9b8SFg8mdcN3lgNpX6A54cyKxtPHJrHOZHS/q39 9wC5guSOITvd0Uv+55MBpyq+jbGn9BnI52FOvYph6U0aGrnpWv/EnSIWIKhqwApGTVQ6 9ZBDNbOaV+++9+LRbns4Zy0gbN/b9okgqGHg8BDlv+LHy1PffN6PM775+hpmyHjJLGVq AcMZxVAwR75pd8G//It7a14N/5ELWI963E21w3th6rvLksfpK8rlE7E8xLn0coIYwZEr MLF5+qQ84c2wjGr6+P3/u4/j73gRdeiJ2EV71hxZgZgL7uyYvh+/nZtQUdUUZAVEbl64 B2qg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:to:references:from:in-reply-to :content-transfer-encoding; bh=UxtQBAZhvtYX/FbbUaphmYejzZpz+KKST4GftSr7gdw=; b=6IRI9C8b6sjvHRHBd296LdORNRMRsvtsTpYXiHNaNYrjOJ8HQLGcsJrGcelAWhmjxM 5CPB06f4J2BiYe0UwgeIZ42uJdFuXNDDi/JuYjSawdeD5rwJbOLMm1MVl1dAKZDyruaz 0lOSreWx6G+9PhVcI5R2EIe1jApWUDjWscl17yk+7SoqQlcdFr5ovbH43gQ6YB2LG2Gs qkklSCBbjVyv/ClFor0FFLadiW/xKoIyhuhGonyn8EL1rVxjqA+dwL7C4KSsJoYiXyia rqp2C9hx7RsjDJPIhO5ube5eqU1SKUvbXAN4fwxCxDZZrK+vgZ66OgHVhJqYOC2/P2A3 sGQA== X-Gm-Message-State: AOAM532Xkx4Y4+DiouyzCt+Dn/NQUGlmQ3bxkwzhe9e1TY+TizO03Pmx NAK5dupdi9JUoftKQtxTHA507Aff6yDkIw== X-Google-Smtp-Source: ABdhPJzOSPZHZmsSpMClgihNun3vOzp9Xw5Y5J+kGl/5g0JyE5xY0BdOSaKN+s/MXo6yvHWoRdJyQg== X-Received: by 2002:a05:6808:15a7:b0:2d4:6851:d1c9 with SMTP id t39-20020a05680815a700b002d46851d1c9mr2922186oiw.115.1645560192419; Tue, 22 Feb 2022 12:03:12 -0800 (PST) Received: from [192.168.0.10] ([186.136.131.95]) by smtp.gmail.com with ESMTPSA id t17sm3591558ots.38.2022.02.22.12.03.10 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 22 Feb 2022 12:03:11 -0800 (PST) Message-ID: <08d6d16b-1528-6f2d-c96c-c443b9577a2a@gmail.com> Date: Tue, 22 Feb 2022 17:03:07 -0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.6.1 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20220217055117.3233501-3-vigneshv@google.com> <20220222184018.2980829-1-vigneshv@google.com> From: James Almer In-Reply-To: <20220222184018.2980829-1-vigneshv@google.com> Subject: Re: [FFmpeg-devel] [PATCH 3/3] avformat/movenc: Add support for AVIF muxing X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: On 2/22/2022 3:40 PM, Vignesh Venkatasubramanian wrote: > Add an AVIF muxer by re-using the existing the mov/mp4 muxer. > > AVIF Specifiation: 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) Verfied 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 > --- > configure | 1 + > libavformat/allformats.c | 1 + > libavformat/movenc.c | 300 +++++++++++++++++++++++++++++++++++---- > libavformat/movenc.h | 5 + > 4 files changed, 283 insertions(+), 24 deletions(-) > > diff --git a/configure b/configure > index 1535dc3c5b..87b380fe3a 100755 > --- a/configure > +++ b/configure > @@ -3393,6 +3393,7 @@ asf_stream_muxer_select="asf_muxer" > av1_demuxer_select="av1_frame_merge_bsf av1_parser" > avi_demuxer_select="riffdec exif" > avi_muxer_select="riffenc" > +avif_muxer_select="mov_muxer" > caf_demuxer_select="iso_media" > caf_muxer_select="iso_media" > dash_muxer_select="mp4_muxer" > diff --git a/libavformat/allformats.c b/libavformat/allformats.c > index d066a7745b..400c17afbd 100644 > --- a/libavformat/allformats.c > +++ b/libavformat/allformats.c > @@ -81,6 +81,7 @@ extern const AVOutputFormat ff_au_muxer; > extern const AVInputFormat ff_av1_demuxer; > extern const AVInputFormat ff_avi_demuxer; > extern const AVOutputFormat ff_avi_muxer; > +extern const AVOutputFormat ff_avif_muxer; > extern const AVInputFormat ff_avisynth_demuxer; > extern const AVOutputFormat ff_avm2_muxer; > extern const AVInputFormat ff_avr_demuxer; > diff --git a/libavformat/movenc.c b/libavformat/movenc.c > index 1a746a67fd..05537d1e78 100644 > --- a/libavformat/movenc.c > +++ b/libavformat/movenc.c > @@ -1303,7 +1303,7 @@ static int mov_write_av1c_tag(AVIOContext *pb, MOVTrack *track) > > avio_wb32(pb, 0); > ffio_wfourcc(pb, "av1C"); > - ff_isom_write_av1c(pb, track->vos_data, track->vos_len, 1); > + ff_isom_write_av1c(pb, track->vos_data, track->vos_len, track->mode != MODE_AVIF); > return update_size(pb, pos); > } > > @@ -2004,12 +2004,13 @@ static int mov_write_colr_tag(AVIOContext *pb, MOVTrack *track, int prefer_icc) > } > } > > - /* We should only ever be called by MOV or MP4. */ > - av_assert0(track->mode == MODE_MOV || track->mode == MODE_MP4); > + /* We should only ever be called for MOV, MP4 and AVIF. */ > + av_assert0(track->mode == MODE_MOV || track->mode == MODE_MP4 || > + track->mode == MODE_AVIF); > > avio_wb32(pb, 0); /* size */ > ffio_wfourcc(pb, "colr"); > - if (track->mode == MODE_MP4) > + if (track->mode == MODE_MP4 || track->mode == MODE_AVIF) > ffio_wfourcc(pb, "nclx"); > else > ffio_wfourcc(pb, "nclc"); > @@ -2019,7 +2020,7 @@ static int mov_write_colr_tag(AVIOContext *pb, MOVTrack *track, int prefer_icc) > avio_wb16(pb, track->par->color_primaries); > avio_wb16(pb, track->par->color_trc); > avio_wb16(pb, track->par->color_space); > - if (track->mode == MODE_MP4) { > + if (track->mode == MODE_MP4 || track->mode == MODE_AVIF) { > int full_range = track->par->color_range == AVCOL_RANGE_JPEG; > avio_w8(pb, full_range << 7); > } > @@ -2103,6 +2104,8 @@ static void find_compressor(char * compressor_name, int len, MOVTrack *track) > av_strlcatf(compressor_name, len, " %d%c", track->par->height, interlaced ? 'i' : 'p'); > > av_strlcatf(compressor_name, len, "%d", rate * (interlaced + 1)); > + } else if (track->par->codec_id == AV_CODEC_ID_AV1 && track->mode == MODE_AVIF) { > + av_strlcatf(compressor_name, len, "libaom Encoder"); libaom is not the only AV1 encoder supported by libavcodec, a libavformat user could even not use a libavcodec based encoder to begin with, and then there's also the codec copy scenario where no encoder is used at all. This should probably use the same path as MODE_MOV above if there's a key "encoder" in track->st->metadata, and write it. _______________________________________________ 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".