From patchwork Mon Jul 4 15:25:19 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 36656 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b27:b0:88:1bbf:7fd2 with SMTP id l39csp2900838pzh; Mon, 4 Jul 2022 08:25:56 -0700 (PDT) X-Google-Smtp-Source: AGRyM1vSEEkgx3lbnHGK+Cizz62RuylLYRo7xrHXxiOzpTacMALIYwGDHcZ5dFi4aBnv3E4Aed3e X-Received: by 2002:a17:907:971b:b0:72a:b002:7c87 with SMTP id jg27-20020a170907971b00b0072ab0027c87mr11041836ejc.393.1656948356725; Mon, 04 Jul 2022 08:25:56 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id m1-20020a170906848100b007120eea6a89si16889561ejx.12.2022.07.04.08.25.55; Mon, 04 Jul 2022 08:25:56 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@outlook.com header.s=selector1 header.b=c9bDmyzI; arc=fail (body hash mismatch); spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9E9CD68B956; Mon, 4 Jul 2022 18:25:47 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2061.outbound.protection.outlook.com [40.92.90.61]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E558F68B920 for ; Mon, 4 Jul 2022 18:25:40 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=K92jtK/uu+M6RTzjTc2xi+2W/5cEiI0wTaKpITPM602ttaHL54HQuiRW4Cvxzy0k7L9rR30wGonll6YaPDfUkj5krOBfA2bonDw4kYQ5vcgIUqAAbQD6toFbWhdjZQZvMUwW6oMnI4vC+Tt1MmAxYfof5p74bR5UKjwqpu3GgVNLenH9jkZ9upsfhSMV6TZB8hvcsGSPMXgEwyo8X7ZlwpyUP5PQKUqUh/GkDHcxQODganYU5J/V6byIH0raoQ8nWIwqtUs8nV25ZbJIO5/Tz5NLwNzIzvvEL2N85cUUzuLH8nprCBOWL8i3Pos+RTdTDPr7OGuKqTWaQv7y2gQHKA== 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=/8Oi05TJIYy53kL2Sqai+prG70RHwO0OpycOSX8149I=; b=mcEz5dfA/GRFEZCYqiWJctSQkrKukUQtyyi899+m00gawQ6IlNhPBS5T7BInTtBy0I7jY7a8uNfbe8e9vMsJxZHwEzga2fz9EFtWtKk0DuZpwgOCYAqt7zWnJwp61iTyAtnRHc0ifMFzGCmJXDJIu1ukv1L6Mu6dyhv71z7s96wBcEld09Sd0Zjd7lV5vWdcgtBr26oUmsR2VusVMNwZx36HUjcQWplNtzgaR6fECOS2eJVIeEbrHkXLrxlo1RK2qiiYAzilTt1pYI5O3T7Sx6bZ9UniWftQmSslLSSzqJwEVUaEeKW23WM712QqJhbSQkBJ1l7xzQ+FJQ/2FryMDg== 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=/8Oi05TJIYy53kL2Sqai+prG70RHwO0OpycOSX8149I=; b=c9bDmyzI1y+MUL+IGnRP7vdEAV7ZDnCM7gEadQrtfUbDpNG610QjgkAgHLVHalcf9Gx/BJdSUxWgcnMcHoUgY6m2a+Xn6gVyfpKjOALosx9jgYK7rgYYptDIbnYR2JsBxK0ncqUol2la4MydBjE1Bx7xDpd5Cg6oCtOzHXTT71Inz4bLyp2kfXmWqRvCkLjwLzhQNrijuKV/TfFkPtpBiWuFL4e2OzEKN1UInKZDwy0A1G7pyolXQk5oXGN1MkqYKXSRR05pEt4eLJwzTxLMzewWqRkyn8QUoEjlWjFkH/aZCV9i7sE4147n9AT7gKgkCQvDULdXcsXWR/U9eaohAA== Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) by PAXPR01MB8566.eurprd01.prod.exchangelabs.com (2603:10a6:102:22d::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.15; Mon, 4 Jul 2022 15:25:31 +0000 Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com ([fe80::60b9:9f29:40cc:f01c]) by DB6PR0101MB2214.eurprd01.prod.exchangelabs.com ([fe80::60b9:9f29:40cc:f01c%10]) with mapi id 15.20.5395.020; Mon, 4 Jul 2022 15:25:31 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 4 Jul 2022 17:25:19 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [Qtpyy3UfxXrmlgNxYSO7Qh9jZZFycZU8] X-ClientProxiedBy: AS9P251CA0017.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:50f::22) To DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) X-Microsoft-Original-Message-ID: <20220704152520.1106645-3-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 6bb8e9a0-e019-4b16-89e2-08da5dd16e6e X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiSUs0MpKjnPJCEF4AMFZodniWfFV3uiF1f6r7XkDB143Zf0JOon+PYQXhKOgQOnWNEEoFaHEAxFb9UUz/5yAIpbOJLBuBHPzMhHaFBrIUs/TX9B/kM6uQpCZQbNi/yAVq9dgxIFIRI65+G687NMNdrpVK0k9m8bsNSnPL7tZOBbbiHenpQdH9sq/ytAK+HFgwW2PsNydmUUaFfLRzgKTgDvKuW1+RsLv/9tO7HEUGpdCkssFG6ac+dbqSPJFt6B+cyUJpz7h0lEPHQgClkVK8ihnMQzXgZn41TdYcyTI6IUnZjYabGBBUDtXBeQbmMGu+sygwg+FuXxvX29WJDzPvDnuyBVIctlG7StxaslNTouFF0ixQMRyVqWD02hsMnKcJrAHirQ7oEF4dnTIYAkwHcRCkzfHElVlDXJhwhO0ciWfGk0GPOmtaI1HPObMXYRA4+YBZTHcUjFAVzGdr6tEPlnM2dG5Uis/s9PKT2IFaMiBb9Ow70HLhL9srjC4twdxmXSfCUc+OM2zWOKEPwyXxd7YK1JvD2N2tV9Xci5AeJ/tk0Go14CLhm07r7c/Oi25PB3p3oc4hkKTH6XNbDrwjRcZBab8Vwkk3czJsD5R/NPmL4so3+SxKvCw25TgKLdlZPdU+rm5Egngo9p2vMUc7lbEUnUR+FLXcVMiPn51Ws9/aXY/YS6ktnLEt3abNGa08Ejw5M6QrSsDHodNYIZAx+pZ3YJzTlhjGcE1Ciup6+xPqSNUFNHBCO/QRdmL2ZAmow= X-MS-TrafficTypeDiagnostic: PAXPR01MB8566:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: /nD7X97Tfj+gqXz4/VsRuVYiWzrnHwIaKjDJWR2kyJmSCIlCOIDEquKJYRoipSRgzgmUXrI7wF9Qi7vWqjCNvdpekF2oJ1gLXjMrZGSDJUCR/Ii+gufOc+1EJIJRrP21rSLhgRJo8GdQvNEbhh9c0LklWVshlO7yOagH2KG5wlj5h0MDFL2V0GYdHuF5nst60BWknYwdtUzv3dpeFLnzf/9HEF2mF+s9RUsh6Ef62acpwI6eev3sMjNVU9exb0VjFJlRTbYIoPWsVg3EsNKmfeVDAl1Dj2mwpA2JIdaD1D09/jOifGPmzOE1cFjTQfWBCqdodzsuaBq8YGhfnPEw8jMukNBQz8By8f5yE65qXV7B0oMsGynVXjUERi5riyOVHRIWd6e01RsYmIJvkpRKpbmLdGy47SCHQJZ/Vq+gO4f9twv7NqUor0FRHW8CbRbQhAh30smOME4gJvA6wytYwv8OpDLCXEenWgUpE2iSeGub440j8mAivSJDNL+LNXy3fJkzrZ3yn1Smwx+hnAta6ywJonYkLQLtl2wu7AdaqXMjWh9l1SIVg1/iqx1AFHVPvdi95HrJkDaN/qDwEwogQqwBd0nE6+GuKXXOfQlce0Ty62LECeN1LyBJM3FjKAWPjywTZYR06Pm4XopC+XSw0A== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: pryeDRYeoFGgJlxC18OTNsATwIfOKuoXmzj2uN17AyKdhrr/nCKNGKS8YStgof9dTxMhto23/3tddVwVPywuRjGNLhTlSwVX9yX7YBXb+bqXpcSmSSBA1Yhi4Kd5JMyDLHiIroZng/vkZmj8o+IPRWgWIBaJvkftR+JuVJJ3X2OzXhdW0RA9J9HsjThK4UcUGPXD5l2VAzxyNYbDwSpgWZtxlK70aLkLuSxw/4fcvwDFk8CC0vs6cWZe6K4qAmtKLQ+uraWV2JHBlfoQeeLNdoxiLDDz6hjDrtxAKAuBMdiARGJIrnZH9Oy5yp96f/oviKLbzsP+BXpzkui3YkdpYoPgPdYHWfcs0v4UEp+xdHlN+uUH3Z1N2YBsbLtvL/s8/YNzag/BfJpQemCm4u6hNoQQzJPHgxilEdQGtTGeRGIkZLhUKXd9YBCcFi1F10CW2jLjMQJ/Dw8X0Vczzxs28OVgYRJjXuPunvAc5ckpS0okMHWC2Xo4vs3btLXy+4+SgGfM8xOmx5fp5uRzStkGzUBN6tZWmLvszKA8JdAH/m1XtNxEdn8cDLb6mt39Zc+BmyZFeBjtMC6zidR+hyBVgdTUaatQUZgWJTZ8liqz/1goLqBLQOy5ZqS/4QyzYelLgnhQiUFWTu+6LWeIrlcdS8+6WNqlAeNI9oVUSoUiHTDN9vBa8/tpnL3wyMhAzxTTLkftyvDwgH/BCA1PXsA/SzxKBAMNYWO7weI3meqCWvpQmCl9lW7X6qyUz6W/gHUSADvx1MId56XLUr6qhKm+zT/A5Xy92oUiEU23AFSXz/iK5oC6zB/xjdIEv0oBnGA2J26cnpoIWOkkT2rppiPuPJlFZq/7exPtdnL0nRxeJ5cnxmWQ++xqOjcfHCGv0tAMMgPib4SPd5oKbj4gr36bDoMyEoVa5KYQUCh8muA16t1VkaPfItt4Y//pqQvg31Di95SpFqNhoYcTVQi1Ud1ThHo+NLi0isQbrE4yY7jAMlb0KkBKqp/B3r6BcG32KkkvckiP1Kbx3zHBMXtCdVk1SErDqvTPfav2ExeA6FSyOxm9yyv9cH2uQPYwEyoGguvkXZjZ3/PY0c0NtyxHREzqziEiEAba2hsD+hahtFAqu9EKzZdQSxwmbJ2kQ2rUHqcjoxHvofQM2uL9BX/0Zp2f3GN6cxIPrFcUzOm5jr0BxGtDc2CkH+2enkT+M3JGs25kUXJvYpnNqCsR78tuHZzBZqchhD9UPaCDb2WEFdf1sJ0PaNYvipRFOA6wobhXbBAfbH72NXMJ2GkEfvBloBswxqjUZtmOlNBEmnS1Yn2Lzv4= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6bb8e9a0-e019-4b16-89e2-08da5dd16e6e X-MS-Exchange-CrossTenant-AuthSource: DB6PR0101MB2214.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jul 2022 15:25:31.1266 (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: PAXPR01MB8566 Subject: [FFmpeg-devel] [PATCH 4/5] avformat/apngenc: Don't modify input packet 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 Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 359mviHoi9mz It might not be writable at this point. Signed-off-by: Andreas Rheinhardt --- libavformat/apngenc.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/libavformat/apngenc.c b/libavformat/apngenc.c index 1c039685f2..c219b80161 100644 --- a/libavformat/apngenc.c +++ b/libavformat/apngenc.c @@ -159,6 +159,7 @@ static int flush_packet(AVFormatContext *format_context, AVPacket *packet) avio_write(io_context, apng->prev_packet->data, apng->prev_packet->size); } } else { + const uint8_t *data, *data_end; uint8_t *existing_fcTL_chunk; if (apng->frame_number == 0) { @@ -178,6 +179,8 @@ static int flush_packet(AVFormatContext *format_context, AVPacket *packet) } } + data = apng->prev_packet->data; + data_end = data + apng->prev_packet->size; existing_fcTL_chunk = apng_find_chunk(MKBETAG('f', 'c', 'T', 'L'), apng->prev_packet->data, apng->prev_packet->size); if (existing_fcTL_chunk) { AVRational delay; @@ -190,6 +193,8 @@ static int flush_packet(AVFormatContext *format_context, AVPacket *packet) delay.den = AV_RB16(existing_fcTL_chunk + 22); if (delay.num == 0 && delay.den == 0) { + uint8_t new_fcTL_chunk[APNG_FCTL_CHUNK_SIZE]; + if (packet) { int64_t delay_num_raw = (packet->dts - apng->prev_packet->dts) * codec_stream->time_base.num; int64_t delay_den_raw = codec_stream->time_base.den; @@ -205,16 +210,20 @@ static int flush_packet(AVFormatContext *format_context, AVPacket *packet) delay = apng->prev_delay; } + avio_write(io_context, data, (existing_fcTL_chunk - 8) - data); + data = existing_fcTL_chunk + APNG_FCTL_CHUNK_SIZE + 4 /* CRC-32 */; // Update frame control header with new delay - AV_WB16(existing_fcTL_chunk + 20, delay.num); - AV_WB16(existing_fcTL_chunk + 22, delay.den); - AV_WB32(existing_fcTL_chunk + 26, ~av_crc(av_crc_get_table(AV_CRC_32_IEEE_LE), ~0U, existing_fcTL_chunk - 4, 26 + 4)); + memcpy(new_fcTL_chunk, existing_fcTL_chunk, sizeof(new_fcTL_chunk)); + AV_WB16(new_fcTL_chunk + 20, delay.num); + AV_WB16(new_fcTL_chunk + 22, delay.den); + apng_write_chunk(io_context, MKBETAG('f', 'c', 'T', 'L'), + new_fcTL_chunk, sizeof(new_fcTL_chunk)); } apng->prev_delay = delay; } // Write frame data - avio_write(io_context, apng->prev_packet->data, apng->prev_packet->size); + avio_write(io_context, data, data_end - data); } ++apng->frame_number;