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 4A32E41035 for ; Wed, 13 Apr 2022 21:01:39 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 391C268B449; Thu, 14 Apr 2022 00:01:37 +0300 (EEST) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2028.outbound.protection.outlook.com [40.92.90.28]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id F180168B211 for ; Thu, 14 Apr 2022 00:01:29 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QzWTBm8pMrVuDp/2yE17IyEsjMfHEBYjQUNoqA5+Er4A08kYGAHggGkhkWaV0FZW0JbLyr9GMbd9YcwMnbL5nHz3MYcPSohpSq6Z6LPIOB1KVxiOf3vxno153JthGbVpxhi9oFOiAThoCJ5+FBorfgyDlVOiplIH5YZ2CohzcRV6hCIBhxv+l6oN/t0+8Y6MaatkZlcoqwnNJq1wWcS0e1/H42aoJ5HfYRu6JCMzFwPxUr5tEeVnAKKZylao5n7b4/Cr99WYaucL4xBFEDyTh5Ykn7BS73Ej47ar57Ivtpw9PHPKzPSUYcNwQgVKD5GlO96o1LY5h0jqStZqRdAu8w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=hBwEjHWT+IL4pBa+fOKZyfHwk+XqpkNY1EcYnNtEB8U=; b=akIMvWu7Z+RPPbcAU/qZsIEoEJbnE3qRS+AIg/s/9zTxRwUqEsFbavILxQz1r901TVC07IVaF5JDFqFGNwixnQ4tV5SN79exyXcMNflYaCzoqN4MqMM2X77a5QD+jLLxhBLeJK7yVGWQRXz6M73eHG3HWFhC5Uzncaf2eF6Qh8uK5i2RViVWxH0WT8uNbMVHY1us/ZZPFh4ZgMDuCIIcTRqDIquNFS/aO/O+w0alzEFzPSzxUTbfS017rPt641hShl5St2ZJnhKrCGYWHBBz6yiUMQSikl0OAuEujVjzot9XeZVd7cOrGRWdNmw0ObvZNAUfU1XYOi0R2sh8GiZeWg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hBwEjHWT+IL4pBa+fOKZyfHwk+XqpkNY1EcYnNtEB8U=; b=ZH7PdaEqPNU/Tsk2PdHCn4JnijrVkGPdwhHFLfsOp1eDoZPtw4DMevJ0lUVxfibvJxTNv4EoAWElBnQFbcS4zuSVrPARInWUXhjv/pLzH48mrMXkVaZcZY78H6vnYuYN2myBhYnjwIuWk3+1qYZRh5dC4DI9ykuGRuGhwQb0/z9aE9ijpF8USyQGcu2ZiYtsveQGQODcphmkihKV2fsoa06gvAS71mg1HgMBLC5ajhBKLnGYUdvMf11u0WvuwrJHnmKuslFqw+O5rE1gSXr305+q+z3uDYQgNx0vIBdcd8YAZkP0JbGneDfw2VRnCnVJJgxO/QVQOqPIB4dwsw/z+w== Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) by DB9PR01MB9437.eurprd01.prod.exchangelabs.com (2603:10a6:10:363::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5123.25; Wed, 13 Apr 2022 21:01:28 +0000 Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::fcc3:1285:374c:9b2]) by AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::fcc3:1285:374c:9b2%5]) with mapi id 15.20.5164.020; Wed, 13 Apr 2022 21:01:28 +0000 Message-ID: Date: Wed, 13 Apr 2022 23:01:26 +0200 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20220413204028.3696947-1-vigneshv@google.com> From: Andreas Rheinhardt In-Reply-To: <20220413204028.3696947-1-vigneshv@google.com> X-TMN: [pQcXvgBvvZlldP86pcPYu+8Fu515oVpJ] X-ClientProxiedBy: ZR0P278CA0092.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:23::7) To AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ddd89f60-d002-4876-5f7e-08da1d90c6f2 X-MS-TrafficTypeDiagnostic: DB9PR01MB9437:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 7ynEL8jcVHLhdb+Q9x6w5tcaYuaGkY2/dVg4g7DwhGmADZv/UsKqv9kgjpiPNi0LzndA28WlKuQpMCpU2/MVGHO+I0wGQoeZf/5wooAEb3yXRZmfk4eA0ix5B0gTRPac0v5me1P/xdT++9A9+QgXINRRTV4Dhc9lwzymV2hcjrqq9WC9BD3fNXzvlcVR66/nbMigi2ghyrof6cSZRJ2PJS2EjTjpG4xsl3Pv2/8BNSilooKEw/y5GJ7JWvhfYCwCWVILzUL8VJAmNFRkNi8l30Mp5ngDSw6aAT6o7Xp0H4YqDjoARj6lZ4e/LoOUVxIn6GtVGncNzEG6zzpY7PY8cR36JIuoQKVf7hghhPLgOPutSbteS5LkZAIcCS/ZhjigvZimXIZnycfD96/F7BJ022FWhv2Uqhu4/08eROBomHkzZndiNXpbkphaYGN6oaba9wxeM2WeMa3FfBnia6vIIOjCIzQb9rFNbwT4ftQZLadFvLD3hq1MKFi5Ebu80LbbOjkQioj58dgMJwhuQfy++Kutf+2BmN8bXGWajEbQflz7GA4vz3v6oRY+qpwULU/RyNcbvue8L3jDjmzjmJEVlDAoPIWm53AkdnQheeQMuXUpNVZXTe75aVnNIeDi+qnskWHWL+SDwxG2CoQ2RM0hPr/qAx20QA1FUFGZ4oPPr78= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?a2JpMXVpQnIvTFZ5UlllWmFhZmp2QVRZTmNaT2NNeS9qYzhlcmdmT0lod3ZZ?= =?utf-8?B?R1EraW1qUm1sN2dCWm9kTno3cHRFY1lUc25zTmFuZkt5ZUR4RFp6QTBDcmVn?= =?utf-8?B?U2dDWmgwY0VOZlo5L3N2RlhSbDNRRktRbTNHNjBpYktMUmQ4aVhzOU8wOHUy?= =?utf-8?B?d0c3N1BZN08xL3hqeUo0QkNDU0d6SlBwNzkrbi9wY1RINjhjU1NhVXhGL25j?= =?utf-8?B?VEtaWDdGOWY2TzdPbXJyQkUzMTRMTVpmRkMraEk2cnFwL1d2dzc3dlc5V0lJ?= =?utf-8?B?OEIxbkJhbCt1bjY5Snc3QmJiU0xoTForL051Vk1XMkgwZ0NIMkZwMHNaSGYx?= =?utf-8?B?bUQvdDgwRFFwTGlDQzBUZjdZWDlta1dvakN5bnZ5Tm1uQjhGWGtpVHluK0Ra?= =?utf-8?B?NzNIVjQ5UVZOeWRyVjRoMkNhSTlIYzE3NmJwS0ovYll0cEZEcFkzTkxFb3ZK?= =?utf-8?B?dWRaM1FyNkVTYjFaMTJYbGo0UjZBbm8vL0U1bFBsSUkzNmxiSVpORW9EREN3?= =?utf-8?B?SzhvclVRZU1Tb3RlN3lTS3dPNkxiUlhYRWJtcTBUU0ZOemI5VTJQdHRrWTZB?= =?utf-8?B?a0F2MUVpYzlEL2ZubkhGN1E3VStYam5rUCt0ZGZSWEllazR6TmZENXAyNGlz?= =?utf-8?B?SVJxckFNdUhTNHBRZWhqYlZpcjdHQTQ5cXhzZ3NQN1NKQ3ZwYy9kdlFFMXU4?= =?utf-8?B?V1hMNG1FeTBqc2VNYWZUYThqMGpEQTNwdDRWL0tiWG1WVFVXbHhPSWx6UkQ0?= =?utf-8?B?UEpPVldQK2txMXJ4L1FEcWl4ZjkvaXZydXBOM2hsem9jb0k2bVNudnp0T2du?= =?utf-8?B?NVk0V3RGQ2dvdDhFL2dRZEJiY0dHUDJUVjIwTTgxUStjMzJIa0lIVTZDdmkz?= =?utf-8?B?cTFMSEFZK2hDVjFhUVFaQ3hhSnhWN0pJc2o5WndRMzk3c3krbXk0UVFUSGNB?= =?utf-8?B?bUtQaGJPUDIzQlBHNmpRa3hPWXhWdXI4bWdjVmppRStqaHI1UFlCN01qNi9V?= =?utf-8?B?ZWVHUXM5REpjN2ZMN1Z6NlIvYjZFc3BwT0lBekpiMHlXUTdkeGpIbjh0REc4?= =?utf-8?B?blNjZWZwSUVQMWJtVmo0Q1hPMHVDRnVnendyNndqYndvUFNlYWRWQVpiNWt1?= =?utf-8?B?SU8zL2V4NVdGUmdWbkNSM25SdEZxMjJUKzNON3JDNVZFTW1BTmxUenNDMGtC?= =?utf-8?B?NVhmRlZSamZGSWxJdkwwK2hnS0xUYWNmUGpzNktJc3NsMDJ5RTY4WHB3dnJp?= =?utf-8?B?ZjNwVHhuaW9abktQMUJZZXBwRHNacUhnWW43WitBb2kyYldhQmlPQVRkSjE1?= =?utf-8?B?bW1oSkt1REpFRlNCc0ovSitaZjhGZ25MdWtGUGUyZm51VDRUYlA4VU5Ed2dy?= =?utf-8?B?bFR6bjFOd0tTVDVBQTNibElyVUw0NTRCaU1uNm5oOXlyUUpaaklucHB3V0Fu?= =?utf-8?B?ajdzbHNmME16SGF6VjF3VW91ZXlSK2RmNXBsenpqdWVROTdYUjk3TC9LV1BE?= =?utf-8?B?d1pWc3NlUFZicVFPbWEvQkpNZEVNeHVibGxWcVpCUWZhYmxETGVQa0dvYnZC?= =?utf-8?B?d2ozRDY4Y2NMVEsvYlVwL2R4YjJiaEVTZ3NIYUZuWHZOLzJaRHJiVU5JOFJ3?= =?utf-8?B?OUNVRTJUZjhaQ0V5TWlQQW5XMHVJcTd4bFdzcUZEdGRsKzdISGF1eGw1SDlG?= =?utf-8?B?dVJSUVNmejFTbnhKQmdtZVkrK0pxblBWMndLRVlmT21OelRVVXFPYVN3b0Uv?= =?utf-8?B?ODZPdVliaU5XdC8yZXF1Q3hWWiszYzFGS1hTbXFTQUtoaU1BVGpreGJSeGFL?= =?utf-8?B?MGE5VURGbWlHZG92RkpIZkNkZ1lkbVBFbFh0UmZ0VlFoZm56THNOOFk0dDF1?= =?utf-8?B?ZENmOVh6d3oxTzVXNE9ib0FSVWpvSjJaaHZwTmUwTkVkMXZ5YWdmeE9ZWTMx?= =?utf-8?Q?6FtUlvKqf+sQEUC6FjR7uyt+WZoDGxsn?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ddd89f60-d002-4876-5f7e-08da1d90c6f2 X-MS-Exchange-CrossTenant-AuthSource: AS8PR01MB7944.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Apr 2022 21:01:28.0052 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR01MB9437 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-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: 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 > --- > 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.) > + > + 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".