From patchwork Tue Jul 5 20:09:37 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 36679 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b27:b0:88:1bbf:7fd2 with SMTP id l39csp3719984pzh; Tue, 5 Jul 2022 13:10:05 -0700 (PDT) X-Google-Smtp-Source: AGRyM1sZhScbJZqbrdXpT++FFC9vbeqVha/gB5YWYnFmE22ZutBn9Ejy89ckj5yaFfFW1ZPCfYiy X-Received: by 2002:a05:6402:3707:b0:437:61f9:57a9 with SMTP id ek7-20020a056402370700b0043761f957a9mr48242407edb.1.1657051805660; Tue, 05 Jul 2022 13:10:05 -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 mp28-20020a1709071b1c00b0072ad02a1b20si7735690ejc.72.2022.07.05.13.10.04; Tue, 05 Jul 2022 13:10:05 -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=IwM7mPZD; 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 8386868B8E4; Tue, 5 Jul 2022 23:10:00 +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-vi1eur05olkn2086.outbound.protection.outlook.com [40.92.90.86]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8BF5D68B870 for ; Tue, 5 Jul 2022 23:09:54 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jJ2cr6VSK2yfslB4RMwTVGGWPso6MF6R83eX1S3XPfTrGG6ezMBVpckqbkGhorrjOETXs3LISPN5eIJpshWfdL6zqX9H2mgod7fOX7hlTiyP9Bjf1I1Z5vGHrG6Gtti+KsMXT3QN92PbI5PeBhI1/7ya02AyMZSM8hz6Oa47rZx5KoEoDxAK0aMJoyY55QFAq7EiPsd3pNyL7PGyuU8z1rCKU0cDDu7KUQ1l0pKwjvWeoPacYsmB3zoacwQrYzw2zPotF6PnYjADibd+w2kc2aq1/BeOf4imoGHgPLwTnJYZYWzQvEuMxLWTMwONhDk/oBwGMHhmsNU5cEIorJi9pA== 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=IjT1JbAx3eKLMNce+l6jVXrjfwEvRd9GPpdOFgIc3+c=; b=Lhp9lQtDlrKjOS73s3t+pYLnixEp0Z9VA06RQTLTkrqoEDLo5z/dN6+3sqwGpv+I3Zu0itrMnzD/h23j4xIc3eJay7Dj5XlEx+U9K3QSHltvTqXTq+6a3ajxkLNM5krWKmdMNZ3dWvwfi4AGC4OsdLoC8HOxVYeEafJZ+y5+tc7I2eLgezWDY8q88J+7+FrPUveiWVnV9JA7qDzRV4m1m7FvkrLRONncthVCuHLa3Ad38fgehsoIEzyQQn3rhMa5atjtrSi1lymGYy+HUeNil47JFfZ2XlBN7TulggmMy73io2LtbdLrxqOxuqwhybDYPCsaXYCLpdoZjNEdMxLg3A== 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=IjT1JbAx3eKLMNce+l6jVXrjfwEvRd9GPpdOFgIc3+c=; b=IwM7mPZD1BzzFmbraFRX3mwvbUR1OUdwQ0n2UWBQFV7cr1YN2uUjcIhkKdvhVz9NFZFzJiK/1JyMvlkHdAmo587jL+UoEE5sCdir82bGwMMw95Sl0SDqHVBneffkuMV8/3b9kwUY9f+COFktLY48Nru4zCkx/d+N3yT1iPmLg3vV/XIu/fos5E6yauRtzsTWuHKjLQ++6Gikz6vOaXMJCaOuF1bMjq7ytK7mZ7qyCY4lkNxUPh6hZlm2Z8lCNCaa/4IlYQes6lC5tTM4xjFjiwcMvIJ5s4BnhitonSlyoWZI9CY3kR/zQlR7M4cGrt23WvbouMMPVP+a61Mh4kqWvA== Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) by AM7PR01MB6579.eurprd01.prod.exchangelabs.com (2603:10a6:20b:1ab::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.15; Tue, 5 Jul 2022 20:09:52 +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.021; Tue, 5 Jul 2022 20:09:52 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 5 Jul 2022 22:09:37 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 X-TMN: [ddSfflTIwpDAKqVDC7FVLJQwTUr5+tkv] X-ClientProxiedBy: AS9PR06CA0529.eurprd06.prod.outlook.com (2603:10a6:20b:49d::20) To DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) X-Microsoft-Original-Message-ID: <20220705200944.750794-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b16fbb96-edbc-439c-0032-08da5ec251af X-MS-Exchange-SLBlob-MailProps: +LiGfBxqLEtx48ky6LpRAMOTYXyX1XRT5Vgl9YcaTC0bledOKAI4lKtVWgL+YwAFZ8LRTHsJ5C+e2EmL0xaCxXZM8sdQ27r3fhXouKm1v3iFnGJwQBmYAGw3yG2/cVt2n+iUVIgLHhqSQDxPABoK8rMFw7Zufe8o14J9L/13xNt44DS+vpZgbJ1apisUM2YsB9LuXosscuF6gSy0P7F/a7YU6ca68SG/ue8PxbSlik2JAbS//srrsz4Ra2dzdOk9S4Pyfc24E1WTkeyQp8BeecC9rVf3AJ1xMqgP/OvkWQVMXcB5MGnlAiWL3zNSG5vL7onJ6M4RGRftO1tMbzy/OySi8UPNwCQF310a4vHGlvhCNy347+FDzcFC8sT5GI7DIik/RxutamizWTjxKJy7xoheXA4iu0G9F4yRacEewrHieGpf54HTqWlWbYLZhLTJ/M/IyDtsKIRrvozNZmPhXHbpl2r09oD/nTDIiZKo85362/GALjz5/5guHDeq56NVsRwV4nGVVT8m2QavwNc69YDbspCLDVgs0QRtdtHEX55mvpiRBPHdMCUzIjuso02DZbgkeKiKd4CX7hyHDC4kpZ5wjNNq4h0MRExVBAe2pnSq3d/RZKoQrXTi717z2EAPinX5yPtKyHxyvCtpyWtBGBDjXQQ+ncU64hj34mUTNLtOLPiY9szEvZUuFdhU+/byb9o7aCdGj9E/qC2PhyNz7BbU5hVRjxPsJ8Sr3UACiRmoOK/0H/UZboRGUb81utp9CQGL7joHyV9KHP9Vjfvmlt9QtggYiVGo X-MS-TrafficTypeDiagnostic: AM7PR01MB6579:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: m+8Sfku5P+w/1IpO0D8qv4Jnww84e4jReQ8VqM75g6p/yCvnT49D9TCDoY+K+jqUcAd99qHqkeFH97ZW2CkbnBJHEd23CYAFlQnd9Ayk13xM3vfAy6G7OhWuFq99WONGf6bjRpcySMZyv9FJPRHAjihL5uB91fZwwjLnV71EWQyR9EkZVlYR/3nU49fFCbVi7n13rUs80zqxPqqPxrs6Ga6rqu361hhYgHtKAwjJKD/tmJg0GrbdaGCpCsIFfUJ2qg6+2AhmBaISQfUSwd1E4UNEklRb6jS/T36IfTeGag/US3xqJCTXi5xBYOpE0atzTtEvhQQFuO0Nso83erAwgluMXhU373vHWCMhRj7lIMybTHcYdEE+xE8lVnRbgOnwTFk2wjE1PJJvT2P8rwaTxCp6Bcz6KfyePivmwnY4NCeKewoUdx6IZgLdLTe/A2CEZ3VN0LznngJDt4R6fkiJtt3TTQWJTeROW3zhg4PvFyckTPLmY5A0Fv5zpkG9gb6Uc/kuZXMrZRK7ud2cR9/pKpa7OFS4L1ZFoT2J8dJm7y0OW5IzPxOTVtTAmFarayHHo3qb2Dk+NvyDnZJnHtMnO0PeNajlf3g8yVToeLw1J7wFNHapkVGfv/+tHrCkedCp8wU4ll43sFeOiMTxWyv6Bg== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: +Zo4J8UnKnABXlKVYswjaz6H1/2khHsTzXKK5tvvofXNIGWIbCB4j2+oJ+wP/3S+bxwlumseODJmqmK52Ibe8sjA1nMhnMbj2IToN4dgd1vSFKQr/vNkhgxDY8KAvDU1fS5PLrFUT4x7rmVMaeJmEczlkEQPg+mJtjq8Q8+nHw7dExv5TNkEtiEtDvVjxcJ6bBh7Y0jl2py4TO9AnsYtGXcO9EjcTkUiAk8GMdpRwE1eb1ahJl5NjsVj0kkJh3ESHE5IJIYTKqblrH2a2zcBUF89eVWjYLszpj7uGjL3P6hIkkZQzD59mV0AQ2XcNjmYrF9ISay+MnE63KwSG2CQz+rM52FhvBQRjwmjcFj2W1qgP7DKARrfMrnVSmkEk0V6QqoVArqutPFaEL12o6zQbsSY1eAlc340bgeK/YYHrI4lRc3cbukvsD+hZ8/Hiy7162ReFSIHQSvE5CYbWmTnHd66j2CNz12z1wZkzEpj1FUv1TMgFITXudqC6oJYm/974nCwZIydEW6m4B7rckejewfTWQ7+w+m6GCxPCcwgCmQqWS3WhEmEf4tgddwL0pF7Tdil6wb5qZSluYXjjQidr98iwr33UNt6e5SYkGi19UIb/F5IubRkXAjZzmxO7IVn3+Oi0OiuiX85YuD/vcQ1Y59r7ynKxMDC9YHVu7pTOZ5BNgzIUr3rFwVlQT7ah0TIkA7V4DKyOAP+WK+Ho88Mv2hvRRhYfsLgfNgdo0ksPR2X/erzSZzK8kRCouzkUPimimfjlRJqGodJ9MNaa+5h73PpvQjYXC7nOD8UV85tQC39l4oZ7Hg2LYt/5F+48pi2/KxywajjutzNcwtv0IZLcbsnMKLZLCL1FTPV1xc/owE7SosBLMeaMK3AjBWF1FLQTQ+7MeKYPBUwVWT+O8SEJ0+/4QkLvzE96OG+uF0roB3SocvrK4c6UXmHO6Yc+6lp+Lijkugt6GLwQMh3iFK5jogHYa2Yzj1aG9GeKpWACuln8TieZIhyLEg0c1JDXDtA/xAzIzM72kkgWYOG0nqwFg2OPLlacWzdA53MvCR+i722a8SHSCJRmXW+TLJxBCRbXSVNh1PlPCDa53fgz4wNQEIc2j2MvCj4X2/ipuVcrD2EfkVCbQNmdAs9RxXUXRm0/30fvu82WTk0lWn113zjrtWkZEGx9PM9A/M35eTY5jpLji8sryLCO7TJI75JXRGp4QBKwPBbasYa4CtNWWYSk3bwRX9qVG7Cx6xT88NVM0uTW5X49T/Y8ZqrQHepkOCrJHrzAlWL4ja+5HEYhxRCDJY4CmqJ8nYd8zu8ms/AW4c= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b16fbb96-edbc-439c-0032-08da5ec251af X-MS-Exchange-CrossTenant-AuthSource: DB6PR0101MB2214.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2022 20:09:51.9533 (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: AM7PR01MB6579 Subject: [FFmpeg-devel] [PATCH 1/8] avutil/mem: Handle fast allocations near UINT_MAX properly 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: uacdu55aYXcF av_fast_realloc and av_fast_mallocz? store the size of the objects they allocate in an unsigned. Yet they overallocate and currently they can allocate more than UINT_MAX bytes in case a user has requested a size of about UINT_MAX * 16 / 17 or more if SIZE_MAX > UINT_MAX. In this case it is impossible to store the true size of the buffer via the unsigned*; future requests are likely to use the (re)allocation codepath even if the buffer is actually large enough because of the incorrect size. Fix this by ensuring that the actually allocated size always fits into an unsigned. (This entails erroring out in case the user requested more than UINT_MAX.) Signed-off-by: Andreas Rheinhardt --- libavutil/mem.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libavutil/mem.c b/libavutil/mem.c index a0c9a42849..18aff5291f 100644 --- a/libavutil/mem.c +++ b/libavutil/mem.c @@ -510,6 +510,8 @@ void *av_fast_realloc(void *ptr, unsigned int *size, size_t min_size) return ptr; max_size = atomic_load_explicit(&max_alloc_size, memory_order_relaxed); + /* *size is an unsigned, so the real maximum is <= UINT_MAX. */ + max_size = FFMIN(max_size, UINT_MAX); if (min_size > max_size) { *size = 0; @@ -542,6 +544,8 @@ static inline void fast_malloc(void *ptr, unsigned int *size, size_t min_size, i } max_size = atomic_load_explicit(&max_alloc_size, memory_order_relaxed); + /* *size is an unsigned, so the real maximum is <= UINT_MAX. */ + max_size = FFMIN(max_size, UINT_MAX); if (min_size > max_size) { av_freep(ptr); From patchwork Tue Jul 5 20:26:44 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 36680 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b27:b0:88:1bbf:7fd2 with SMTP id l39csp3727556pzh; Tue, 5 Jul 2022 13:27:14 -0700 (PDT) X-Google-Smtp-Source: AGRyM1tN5jRhRfiyVwFZkXC4be9cG/A3IkxUYZvXMfRXdojZDheMMmJcdJQ++cE6xoqAjiZcyniC X-Received: by 2002:a17:907:9693:b0:726:372c:2c02 with SMTP id hd19-20020a170907969300b00726372c2c02mr36570491ejc.483.1657052833958; Tue, 05 Jul 2022 13:27:13 -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 ds13-20020a170907724d00b0072a6a39efccsi5386460ejc.624.2022.07.05.13.27.13; Tue, 05 Jul 2022 13:27:13 -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=iazh9aqZ; 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 1B45068B898; Tue, 5 Jul 2022 23:27:10 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2022.outbound.protection.outlook.com [40.92.89.22]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1AACB68B898 for ; Tue, 5 Jul 2022 23:27:03 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dkTYEfpDF1qWO0V88y+dVMX/hNsTMnGwKKL+UuXd/KYZcPurcNN1bSlbPqNHG+n71AfVOy5wNVdQ/9ovkytitNA/QtBQXL1zGBEA7wyb7J7dXylYSI0V1TUh7NYDm0jgmDfWdijfXZi40BJlroaQZv/bUCMM/WU51Q8XIXFiXW+RNTEtH4DHqgg5yCnhMI5vOtlAaFjFcefZwkrHJFK74dzALW2flpToFpNUS/HB7+o1x5hunQA2ooCdcAUQZAfvSsn6CJTz6duGk2lTqncH50TECNhuVEY9fT2lgkAwjnFvkFbQ0fulyI8Q0EbNZOeePwC3U+fMhK2wIaFaFWH+IA== 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=/c0lXViAFV90AXu9ZRlblrxZlKsFqNNOHQD/FJGkfUY=; b=F3njWp3IJwbuLI9GwEgf1nmqT99uzUahe/tjRR8fTjqj4CBzA9C9lJu+O8ALC6NPVEtHMDl7JaAw87xBfMvUYaWrpd7dECN2q2UT0abthTpmcpU3x+3/QYOTp+lwKPddSxfF3ojMEGhmK58aSkZAwQLnjcBGFGp/UUoO2wuZqoYiA7tFClUYIQ1tn3pL8O86UbZ4OuUTL5klx97pplDTwlLrQvgJOHrxWqk3ZW2Q4Ii16DzvmeiVApskEkRvxNKEagnsG64rsA0m4a8+fBgsY2XCHJ77Vkyo/WmMu9enO8x9BgBJG7KyBu9zWfUlm1hOGPklN+CrDvHD1e864REPQA== 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=/c0lXViAFV90AXu9ZRlblrxZlKsFqNNOHQD/FJGkfUY=; b=iazh9aqZXFzbo59TXHeZrtWH6/KJMwv5mcFgftOxgOTbiZ8ePJRYlAOpT8jQuk7u0rZlmW8lPtydMx8FBuTU1uTVNp7ETCTGnjvlgG/eeZaTQy+N65Camy0HCtrpxiWnydyp4hZeAoCxTF/8r3XHm53fm8VG/rWf5lEx3PlluHJ9260WvUGZUSI4QQCEQBthSCDdxEBMBwGGm3g2NvJuMYdjhoeC3bfuyRNytSJtG6Ef6HwODP0koBq6waQFeLtARJfkpp29lWhOz0eQVyg2Q7kbSu1KQ3bTdaP7JGcZa2iT4ZYMMWunfEb5Gnlkt7Awp4GOqFlDCzrNPjJZwofqCA== Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) by PA4PR01MB9452.eurprd01.prod.exchangelabs.com (2603:10a6:102:2af::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.21; Tue, 5 Jul 2022 20:27:01 +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.021; Tue, 5 Jul 2022 20:27:01 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 5 Jul 2022 22:26:44 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [kEgAjtRKhvYIOP2QHz7VIusQf4APfDnt] X-ClientProxiedBy: AS9PR06CA0419.eurprd06.prod.outlook.com (2603:10a6:20b:461::15) To DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) X-Microsoft-Original-Message-ID: <20220705202650.797218-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 36156286-7563-4d4f-826b-08da5ec4b774 X-MS-Exchange-SLBlob-MailProps: +LiGfBxqLEtx48ky6LpRAMOTYXyX1XRTsH2TCP9NV2cH6Ftlhj3ILD9JCt9y1Bd+ZcYlOr48kF12KvYTWjcGiY/ea1KBcsb1n5xqAqQ0Xwz7GJUQ3Mbf2DQIydZ14EnWRrsvVzk8V/3sud1m232ngOZPomKU+JCP6T8A9Mw2/ty5CwfDlotDxu4V2/DxY8aUXmvMM1F/Lhq1AsqTMsRzI3Zq0fCzT+BxSUcIwas26lAM7a0j6zqY0Ffi+zUxjUyxXj3JWwaZcv5XukiwW0ALl8VCRZzh7jMUEVvsUuxDHS7u7M+sGCYrpz0tiWvbXQE6kWLpIBmfHKYy5MubE1QMgt6qQjy/AmOZ6pRwDgqu/UzV3m5fQbuO0SYSh9079WY5K6rQOv/gTfPaD9FO1Gf9t8AhuxqERbiXVTOqRRuuvveEBvy+BFjtbRCmv9SYOJvMwvBFIqt1CmWS8dAhwl2TiifQ0ThO6W21kPDOvfQEMM9oQE0WDrt9Fjmt6D445bzlmfUylUvWzQ8HpBfhxNhC+US3tWjW+fNDNMu1gmOCGm4aLe6wv7pCbFjqiYmychfubmikUleDum4fJmnJPjakAfXzTymKJUpiukShrQUEhc29AKwAlqizrG+s8NVm7WEdRZfWR9sd0jtjV7brOPNzmwL/XMVjFog6ZHuJfudWsZdtJtoYtv4i8iLdjXhf/nya5uQjzpATHkSqV2LfsE/rJcw14eklEbHzf2gHMArcz6vs4RqAftr+RiVkJky1nDnOt3gycAVzzrAiv9MkqiYma6WgBZVIyyxe X-MS-TrafficTypeDiagnostic: PA4PR01MB9452:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: z2GLt9yR5LVujoOwYs6Yc6GHWczfuj88ZrhUPR5yORWr/WPvdC218XPTy//NUTVbwMPDiqUwJXm+UTw+Eno51fG+vVNBy207TW9j1tuZYl4VeWYMywJ1wDCSZYU9SaOaqRkxs4gfwdrk7u5FNGoLshqatpZa1B0JoHi+UK/5ikNoNWUJQ96yr0rjMY5MxpWps2awMwABgpHn1HjiwksFNus7FAJ5qvpcuiL2unVlhjOrH2+Fca3UlTwt0gDEnxL4dASt2/ZxOA+XeyLup/xAv5t6QUcPPi2R7l5rTQNgVdEez8RfwdVNYV4yfBUVLlkA6lZDwpJLkKWYsbICzK+56YO4xHHSHRU5NJyn8+Lzxq7+lwpTF9I0uD3dlVpgc/fN9EUcKQyBw0vb2RVEH3AebtfrUQ08L/eNf14JSpOl9mRCjeMzdLbwgMSbvCeRUyo1kCxG44ezLPR8pPHy2ccidfrs8CNxPn9rrQJJ4Za3kFLLl7BfMLk77i3bawI8I0DCyTWfu6EDtey74ikR97U9v8JQasJVZD2d+Eg/vIESr2K/aVMLd7aDB2GLtRxz6x12KJayfV8DNilbIMuMMAtOO5IUQXdIy5RkA4vaF4PccdR86mtlulVwBBBIDn9c6MvIcQe2VqPuETespgtv4ToKoQ== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: sq/tBhEwfNB4ykE2dIJbG4SZRuEjrwb1vFAHfGak20hl47x0eyC5eXytrXcr2w1a9Fa7lguCznZhVN2F1nClfbe6dUgovuu0MzeZJcgrxRNfOHirCesXllQ4V57BnW/wSxaZPe9ora9RHYRw9juPTcs+JqgHC09fREk/Tz7rSP4991NHzLN6tpy1dsMDqHENFvF/m8wfJwH5RvMkEZmZhP72Dr9C3ivZrjauT0IBI7e9HUH/uElaycaVzxyLztTrH1AU04ySzTan8XgKw6V01DqBs0uYklG9+DBSkxaDusAIny5re2kmYrtUzvAUUo3uHmVSIPez+dcWSeSm0/HIjM1rpV5sl2IZCnynlpLwyat7/b03XpmB5sA+lPnaHB1eRJ4ZfG/s+8WZBgKUIHBoVwGn1tJmNcq8+6I1e2BkynmzI7aNCQ4x33JyjzCUUKox8T/jyZQ8iYkHUmBggjqVS+fKsFZcH/kewt/4ZUwPbOOJAtHNbbMVxfDFflXBK0RU3iIL6yYUQ3eI53HlsnaSUhIeSzrjLkWjqc1kk91/YZyDRhivC1Kd5NBeXlftFi27IPSRuEmSN1kAiYtEzHh3+UWTbRkXOD6pB3nTjVHwk3Y+rawcSSIpbOtGjgiASrCGNQ/E2qegzBU4R5mopQ/2hal/tWYPga8JMQCE9rtLcihiUdTzYUXRd+FwX1ovTkrS6Nl+OPNYNmsM4IvMLEdEpLx9pJrOf48e1ui9wS07AGBgPrvPA1ar5OqGwrIFM+pY0RkRiNpY6exf6wkEB+nxppldDgwWdrDXX4yLDf1jkg6ikYgC0Y5RYD01tyzZ462Kq+AOE+NTKa9+rI9dRWMQZiQjueXf448SV3pp+X/akOduJWFSipX0ck6vNw1kdIQwAKMY9MzP+Exm5dlVmBi0s//Xy97NIgxxaQRlM4TafXf7JdTDC3weT15Jap1mG8n1n1xmTUZmaE5YIAU1h+q9jkz41HjjAeeFUjvqMv+llPxq4EtLxHAi1UlW1CzfKQ+gkOj+vK07Sys6FYulMc7lTpBij3Qy+mNPjr1f612utkl1etx+/PSZtBLu1GhO+09yvwwHIjBIH5wMlc3ySmU9XyyedcLsovoifW0lQ/wf+1v7gaX7PL+1UB5RcSjQGvW69uAHIV5JkYYknZOuzYNSTBsL+Xb3aBIzXY5u2g3juvTSzlAcPElkpAJNy65kjI+D6H75yl/FjcOBhk115LxaBZcmyAmUxeA/WrakWnRnHJqNM95W/QHxuyxco/Q6Z8UUpryagrhc4sNY/DhiORpq5RyMzXeLkIyvoNF2bWGHEj8= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 36156286-7563-4d4f-826b-08da5ec4b774 X-MS-Exchange-CrossTenant-AuthSource: DB6PR0101MB2214.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2022 20:27:01.3727 (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: PA4PR01MB9452 Subject: [FFmpeg-devel] [PATCH 2/8] avformat/flvenc: Add deinit function 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: KRl4VvXdnwPH Fixes memleaks when the trailer is never written or when shift_data() fails when writing the trailer. Signed-off-by: Andreas Rheinhardt --- This is the same as https://patchwork.ffmpeg.org/project/ffmpeg/patch/20191023125944.10292-4-andreas.rheinhardt@gmail.com/ libavformat/flvenc.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/libavformat/flvenc.c b/libavformat/flvenc.c index 4e65ba4066..b6135b25bf 100644 --- a/libavformat/flvenc.c +++ b/libavformat/flvenc.c @@ -733,7 +733,7 @@ static int flv_write_trailer(AVFormatContext *s) int64_t cur_pos = avio_tell(s->pb); if (build_keyframes_idx) { - FLVFileposition *newflv_posinfo, *p; + FLVFileposition *newflv_posinfo; avio_seek(pb, flv->videosize_offset, SEEK_SET); put_amf_double(pb, flv->videosize); @@ -768,19 +768,6 @@ static int flv_write_trailer(AVFormatContext *s) put_amf_double(pb, newflv_posinfo->keyframe_timestamp); } - newflv_posinfo = flv->head_filepositions; - while (newflv_posinfo) { - p = newflv_posinfo->next; - if (p) { - newflv_posinfo->next = p->next; - av_free(p); - p = NULL; - } else { - av_free(newflv_posinfo); - newflv_posinfo = NULL; - } - } - put_amf_string(pb, ""); avio_w8(pb, AMF_END_OF_OBJECT); @@ -1047,6 +1034,20 @@ static int flv_check_bitstream(AVFormatContext *s, AVStream *st, return ret; } +static void flv_deinit(AVFormatContext *s) +{ + FLVContext *flv = s->priv_data; + FLVFileposition *filepos = flv->head_filepositions; + + while (filepos) { + FLVFileposition *next = filepos->next; + av_free(filepos); + filepos = next; + } + flv->filepositions = flv->head_filepositions = NULL; + flv->filepositions_count = 0; +} + static const AVOption options[] = { { "flvflags", "FLV muxer flags", offsetof(FLVContext, flags), AV_OPT_TYPE_FLAGS, {.i64 = 0}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "flvflags" }, { "aac_seq_header_detect", "Put AAC sequence header based on stream data", 0, AV_OPT_TYPE_CONST, {.i64 = FLV_AAC_SEQ_HEADER_DETECT}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "flvflags" }, @@ -1076,6 +1077,7 @@ const AVOutputFormat ff_flv_muxer = { .write_header = flv_write_header, .write_packet = flv_write_packet, .write_trailer = flv_write_trailer, + .deinit = flv_deinit, .check_bitstream= flv_check_bitstream, .codec_tag = (const AVCodecTag* const []) { flv_video_codec_ids, flv_audio_codec_ids, 0 From patchwork Tue Jul 5 20:26:45 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 36681 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b27:b0:88:1bbf:7fd2 with SMTP id l39csp3727656pzh; Tue, 5 Jul 2022 13:27:31 -0700 (PDT) X-Google-Smtp-Source: AGRyM1uYJmOq92QImtpjePTVgKGeAH2PazdzJCweGWmapbmB65cyVimnjLRQWdXv/wkhCO1W8Ai+ X-Received: by 2002:a05:6402:4446:b0:43a:3f52:4172 with SMTP id o6-20020a056402444600b0043a3f524172mr19121215edb.417.1657052851108; Tue, 05 Jul 2022 13:27:31 -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 cz15-20020a0564021caf00b0043a4cff7e3csi9100967edb.423.2022.07.05.13.27.30; Tue, 05 Jul 2022 13:27:31 -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=LjayF+Y+; 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 26EAB68B9CD; Tue, 5 Jul 2022 23:27:28 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2101.outbound.protection.outlook.com [40.92.89.101]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id AA84F68B9A6 for ; Tue, 5 Jul 2022 23:27:21 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=d9ARYveReDpBTmNposWvpi5VSiGbkikinySFPYW70i5rwNyL92cVhDN9/yaKUjRefu9FGifCT+uZBLcIFqhc7vYrJJcZ8BJTU+KFYgAfc6GermM3G/9sXXXPdBG+DnNFWwSgD5rltiiQj2e6uPmYxG7BWD6ubSUuAeTUJxis3TYa5ZPYmiH6GJ1H8pzqNxv1gqapmooDi0ek3lALbTmedbkQ+nVR+Yqq1SwnVe/y8wbGKf+2FGQ0JZp0H1+aUlgtrVj9RkFwo+gsSJUYvM4S30UfPfEfHA5JmO4zG0k254tCnmY/eWBcU9IINcvd5Dd3IFDgFuVPGcoq7SRjb8xhhQ== 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=K1/KgpRAzAkMCPl40mjc39UF/fqpJSVFpe6U3MFwXxA=; b=eWb5rhSy1kZ62yK/QhYmTttZm98RY10OSh0FoCpm2BNqcTtmFBq/77qWcY3mZHivjOrqYslliX1dZnN4AvuXD7iJKZwK0LhQuCAkQBG5+9IObHDRQPtNEIt46hqF4niI9x3z19Lb3GAEJ1Wg4AZUkMIRha6OSWRePGiF39eiNH4Rq4chyY4Ss7ghutcAuvWXEbNnwyEieYxUsjYkleaIUcUlcN5Zp5LEfkdYzp/BJiy07X+pySKadq5IuZ5r3M4LhHCCHWLXAcZNDUpRGdcwJjiKn/hxFS1DEq5lnco6CKSTt1QACZMhLkW+cEHp/RrsR8E1DG20GL7YWe427jqT3w== 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=K1/KgpRAzAkMCPl40mjc39UF/fqpJSVFpe6U3MFwXxA=; b=LjayF+Y+SHMau8yp6cMPig/quXKkE/cjkju4e38+Et1DU5a7EX6N1VjsuaTDwidq7EDO2JTQlHAIcyLdrWWRAcGB9E9UfpbBpfN/hyt9pzWuJhNHEmM0L8xc45oK8IrGHhccWepFUtWfk/tDz2as6vVocfnk/hrf1OWeqz+qGct6aaqZOuKfhACbV4jOF7OBSU6LSHXcdH7/0EGreKjUfoFrCvuEXPsXoSJXFkgZTfmYlCvpR3bclNHG7Pe4S5QUinglui8dnWq8B3TENXYGU61zi9/V5U4KLDW2TuUpZiVSvrI/honjCf0oRk4Nu+c1dd3IFJaZIhRueKAAv7MIvA== Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) by PA4PR01MB9452.eurprd01.prod.exchangelabs.com (2603:10a6:102:2af::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.21; Tue, 5 Jul 2022 20:27:20 +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.021; Tue, 5 Jul 2022 20:27:20 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 5 Jul 2022 22:26:45 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [5/mi2oms1+EDD1g+033dbVX9Q4CYqQo0] X-ClientProxiedBy: AS9PR06CA0419.eurprd06.prod.outlook.com (2603:10a6:20b:461::15) To DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) X-Microsoft-Original-Message-ID: <20220705202650.797218-2-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b0308307-fe8a-4506-8ca2-08da5ec4c2d0 X-MS-Exchange-SLBlob-MailProps: 6H6McBavlAgBibG/zEyozrtda0BUz69/pHpVZawF/WwT6OyZ5fAIe/h3GwVRdCw70aR71JWhVCHi7G4yUSr4JIAuh9oyMg63ZjkFSwEMEi13XQrteth13pCujImrzmjwRB/GZk5VQilMTIjdc+GoHXCQGibEN4D+h/Krg8nnxKuwbvfyaAUuG+4k/qL5P8fEOeeSYpP3lD5Zc7H8Klek1h0IB3chInpB2pnglaBKL2M69mge0xzb5QWyly3YO4udvw2VHXpTmW0MqbZcS9xxQUCQk8Ehxkd/87++4NDF0xeuXhJaSqgAIqDm5Aw5ci5hzW6h3BGvwswH1F7+V5qXctsn+bx0WfmuZxMMuCugtEm7Iyl2TroMXjwSGWViNPzbq1Y85Gsz4mIxWVe9xUmauMwTZ/7M6MW3LVCSbVlIBReV8Xladjs+ewoXpdD1yZN8Nq+RAvKp4wsLl7p/AEYIY285B0NRLSl/zcgQSXJN9GF4edPvDm3glJoPr+oImIeuCai/ivDUl7FeQHlQFe3CZ8V0hvk9PJmz26NNCCqfj5VY4g/ydglw9r9xkcwvwx7XOwcsiG7mObo414WxDKjgi/tSzB/TY5VOomR1B4VpVwybAffQmORJyMEtbOVPVuht/zGKKVMUhVjv4DpvErWxGVqUV+AaRvUSDxWLGfOfyTtAiiEH0Y0+K4dyBK3/EEPV7nGrDZuTtc+t+NZwPVJGA5QSvX7Z6uP4+enIYZfBxx7DE1+JKs3FEGjxJUmkMOE8UI91v9DZd60= X-MS-TrafficTypeDiagnostic: PA4PR01MB9452:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: WytcETSD8GAwa0rdRLZ2k8mrbhqn9MkDKuqoshnw7X0F2Hb6L7vzdkzIHz/5Gf10BA1u+IFmBbQQnuHkejR8F5jlCUz1TaD7uYIgwcYv7L3dK9Cs2GPAHozspgj3jpllsUFty1It4JZGH8HohnAOcbTfjlBIbSipppkA8rdhOX5GY3DlneqpMJfau2dnIjglYM8kGAEDSEjwK/gWY722ANVMJ2G5kKKW0hX0X1XCDIhBZo4Zrfp/oQQ2zEFdVe4ECCeoRBWLWx/6T/KAnkTF2+i/XuTkkq4epgnaoKHBw6hwcDN9PkybN0RRoDqrXnQDxMf+zSkq8qwLyQcNJLJn9zmHLjRBEPZNb+oo1NXnE4R8DmfCNFWzDo/i3iTu5x8q6yCkaLkS/xv2UbEN5T4LeynqMkXV5emNuWsaLssgfAGOKdIQf0ESMLgGmHEi8tLjfBXC6uhxYZ2Jsu0z4efZDPmkf33aiswOQTZrceUX1msRoOy0D5a9LAAp5bu/u/la3EjTYCOxHbwANZgAJOLErw3m45cyUd/CQT2+BVEGka0AYjb3rXysqbVyfWjpw1JBZDhG7C8Pf060D6jE5jC0/O0OxE5fUYUZWT1s2QUyHMf9qvwaMLyLLFH5AUwjC235AAMOF+k6kBSU11pOY3/34ALstJHPmSxgLZTp4UJqr2w= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: IWsZy4JmyKG2dxGNoEEHTqsTQCIlChahB4NgL+u0Re+a0RgPMQ7Py8fB7vhOdKM+2WFR+fTtU9NTlqXDj3VGzf6xMlDgvLU5phi8TknfV6uwEtUEDsjwzEgeznXU2seBGyS9gF+Ijs6ZdsJq15fatVfRBtzCprAQGGFFDY5QH5dhMXp4KC6xxE4XYO5Cc+tWHJgkN/+3RFRpDAKp2jrexroeid3rLLoux8Qv7KWHjnsbAwekXc0haEuaCYZIdr6cfVi2JFh9wPvCIdbnFjHlanhln0eRR9ww/mKCE3EN2uTbeThmzpIVhs66O3XNlTuO5OYvh/kLqTUvDjfLNlIYLxscM4bTtI5djNLKiL5/GdH/YotSkaRLz3qks8hchjTfc54k4IAArLjhArGszXT6ncNWq0Xyi6+cGzrRKvGb9OGRv83pel+KLrMeyz943Mh3mxPOZtX6/RiALbIjtgBGR2Bw4ocB/FT1GCIZyznRYA8ZIXlfvVgsbHssoXaJxnLkqUSPnk8Y4gTXQYA8WroVPJZWhXf09IE4+E+y7nedUoaXtUtRkVOP9BCxUj5GHoxGAAKoSQQBIYlFYziWWThmIH1QJK/3trpyeDi+C3FLi0GX/pIR/wGMokVYTFGnrYcHTXSIA5qykmsbDR0qA5h8YWwRiwwGEHRbZEPFPwr0pCEiGOcUwoEMJ5flR1yZR3jVnj1T7sfoqCHTuDNSFlICIIj+/DX+uy284Cmiyc6RJdD+irZCb5EMkemq2UKCBbxjmEvhKGHmrEEHQ04hL/jlagH5D7IyMme/wLpkdum2x2yLtEFfontNlxbuc+Zq9pl8dkfgMyF5kkcVIqkXDFNo902xAGLFj6ItLMl5Jaf/RGVOltx/Z/mtNdyoJhSK2u4yG8RSaV0xpRQyJfVdsoJm51w6emnWZYeiUGVNs9EVMDGbVfwONXStlN5/aEWPi3XzZqYwSdFpQB+YBkHTKM43iLA/IJ0znh/La5Jl8JTol3H29McveXU0oHPCxk3ldZ5x1SHJXKVkJDz0U54ToW8hYN6X948KGCZSC6wqnAhIogWCZ3gywT+e2Yqacjlwa20UF1N2OY4rrh0qGa11pk0QWjwBdgyPhjv0/1l4Qp8VDJWTfmKWIjQmteKO24F+qbyTLBYZqSrLfTXhq514b/hjRL7ZuG2yI3CrTDziW3WccdG6RTLr8xR8PVQ0oYOffBceq4+u/X5z15Ff4Ky47w9/pYZU8gPfFyNfiVgt/tbFMK9HzOIqOPX5kbHoAcgYS2fek49pICERjVq3AGO5tiMtv6wnfMsoc5an8vF4JZYS2TU= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b0308307-fe8a-4506-8ca2-08da5ec4c2d0 X-MS-Exchange-CrossTenant-AuthSource: DB6PR0101MB2214.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2022 20:27:20.4008 (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: PA4PR01MB9452 Subject: [FFmpeg-devel] [PATCH 3/8] avutil/mem: Add av_fast_realloc_array() 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 , Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: JoQ1qJBrLTVA From: Andreas Rheinhardt This is an array-equivalent of av_fast_realloc(). Its advantages compared to using av_fast_realloc() for allocating arrays are as follows: a) It performs its own overflow checks for the multiplication that is implicit in array allocations. (And it only needs to perform these checks (as well as the multiplication itself) in case the array needs to be reallocated.) b) It allows to limit the number of elements to an upper bound given by the caller. This allows to restrict the number of allocated elements to fit into an int and therefore makes this function usable with counters of this type. It can also be used to avoid overflow checks in the caller: E.g. setting it to UINT_MAX - 1 elements makes it safe to increase the desired number of elements in steps of one. And it avoids overallocations in situations where one already has an upper bound. c) av_fast_realloc_array() will always allocate in multiples of array elements; no memory is wasted with partial elements. d) By returning an int, av_fast_realloc_array() can distinguish between ordinary allocation failures (meriting AVERROR(ENOMEM)) and failures because of allocation limits (by returning AVERROR(ERANGE)). e) It is no longer possible for the user to accidentally lose the pointer by using ptr = av_fast_realloc(ptr, ...). Because of e) there is no need to set the number of allocated elements to zero on failure. av_fast_realloc() usually allocates size + size / 16 + 32 bytes if size bytes are desired and if the already existing buffer isn't big enough. av_fast_realloc_array() instead allocates nb + (nb + 14) / 16. Rounding up is done in order not to reallocate in steps of one if the current number is < 16; adding 14 instead of 15 has the effect of only allocating one element if one element is desired. This is done with an eye towards applications where arrays might commonly only contain one element (as happens with the Matroska CueTrackPositions). Which of the two functions allocates faster depends upon the size of the elements. E.g. if the elements have a size of 32B and the desired size is incremented in steps of one, allocations happen at 1, 3, 5, 7, 9, 11, 13, 15, 17, 20, 23, 26 ... for av_fast_realloc(), 1, 2, 4, 6, 8, 10, 12, 14, 16, 18, 21, 24 ... for av_fast_realloc_array(). For element sizes of 96B, the numbers are 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 21, 23, 25, 27, 30 ... for av_fast_realloc() whereas the pattern for av_fast_realloc_array() is unchanged. Signed-off-by: Andreas Rheinhardt --- This patch (and some of the other patches of this patchset) are mostly the same as the one in these threads: https://ffmpeg.org/pipermail/ffmpeg-devel/2019-December/254836.html https://ffmpeg.org/pipermail/ffmpeg-devel/2020-January/255182.html doc/APIchanges | 3 +++ libavutil/mem.c | 33 +++++++++++++++++++++++++++++++++ libavutil/mem.h | 30 ++++++++++++++++++++++++++++++ libavutil/version.h | 2 +- 4 files changed, 67 insertions(+), 1 deletion(-) diff --git a/doc/APIchanges b/doc/APIchanges index 20b944933a..f633ae6fee 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -14,6 +14,9 @@ libavutil: 2021-04-27 API changes, most recent first: +2022-07-05 - xxxxxxxxxx - lavu 57.28.100 - mem.h + Add av_fast_realloc_array() to simplify reallocating of arrays. + 2022-06-12 - xxxxxxxxxx - lavf 59.25.100 - avio.h Add avio_vprintf(), similar to avio_printf() but allow to use it from within a function taking a variable argument list as input. diff --git a/libavutil/mem.c b/libavutil/mem.c index 18aff5291f..6e3942ae63 100644 --- a/libavutil/mem.c +++ b/libavutil/mem.c @@ -532,6 +532,39 @@ void *av_fast_realloc(void *ptr, unsigned int *size, size_t min_size) return ptr; } +int av_fast_realloc_array(void *ptr, size_t *nb_allocated, + size_t min_nb, size_t max_nb, size_t elsize) +{ + void *array; + size_t nb, max_alloc_size_bytes; + + if (min_nb <= *nb_allocated) + return 0; + + max_alloc_size_bytes = atomic_load_explicit(&max_alloc_size, memory_order_relaxed); + max_nb = FFMIN(max_nb, max_alloc_size_bytes / elsize); + + if (min_nb > max_nb) + return AVERROR(ERANGE); + + nb = min_nb + (min_nb + 14) / 16; + + /* If min_nb is so big that the above calculation overflowed, + * just allocate as much as we are allowed to. */ + nb = nb < min_nb ? max_nb : FFMIN(nb, max_nb); + + memcpy(&array, ptr, sizeof(array)); + + array = av_realloc(array, nb * elsize); + if (!array) + return AVERROR(ENOMEM); + + memcpy(ptr, &array, sizeof(array)); + *nb_allocated = nb; + + return 0; +} + static inline void fast_malloc(void *ptr, unsigned int *size, size_t min_size, int zero_realloc) { size_t max_size; diff --git a/libavutil/mem.h b/libavutil/mem.h index d91174196c..f040de08fc 100644 --- a/libavutil/mem.h +++ b/libavutil/mem.h @@ -375,11 +375,41 @@ int av_reallocp_array(void *ptr, size_t nmemb, size_t size); * @return `ptr` if the buffer is large enough, a pointer to newly reallocated * buffer if the buffer was not large enough, or `NULL` in case of * error + * @see av_fast_realloc_array() * @see av_realloc() * @see av_fast_malloc() */ void *av_fast_realloc(void *ptr, unsigned int *size, size_t min_size); +/** + * Reallocate the given array if it is not large enough, otherwise do nothing. + * + * If `ptr` points to `NULL`, then a new uninitialized array is allocated. + * + * @param[in,out] ptr Pointer to `NULL` or pointer to an already + * allocated array. `*ptr` will be set to point + * to the new array on success. + * @param[in,out] nb_allocated Pointer to the number of elements of the array + * `*ptr`. `*nb_allocated` is updated to the new + * number of allocated elements. + * @param[in] min_nb Desired minimal number of elements in array `*ptr` + * @param[in] max_nb Maximal number of elements to allocate. + * @param[in] elsize Size of a single element of the array. + * Must not be zero. + * @return 0 on success, < 0 on failure. On failure, `*ptr` is not freed and + * `*ptr` as well as `*nb_allocated` are unchanged. + * @note `max_nb` can be used to limit allocations and make this function + * usable with counters of types other than size_t. It can also be used + * to avoid overflow checks in callers: E.g. setting it to `UINT_MAX - 1` + * means that incrementing an unsigned int in steps of one need not be + * checked for overflow. + * @see av_fast_realloc() + * @see av_realloc() + * @see av_fast_malloc() + */ +int av_fast_realloc_array(void *ptr, size_t *nb_allocated, + size_t min_nb, size_t max_nb, size_t elsize); + /** * Allocate a buffer, reusing the given one if large enough. * diff --git a/libavutil/version.h b/libavutil/version.h index 2e9e02dda8..87178e9e9a 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -79,7 +79,7 @@ */ #define LIBAVUTIL_VERSION_MAJOR 57 -#define LIBAVUTIL_VERSION_MINOR 27 +#define LIBAVUTIL_VERSION_MINOR 28 #define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ From patchwork Tue Jul 5 20:26:46 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 36682 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b27:b0:88:1bbf:7fd2 with SMTP id l39csp3728223pzh; Tue, 5 Jul 2022 13:28:44 -0700 (PDT) X-Google-Smtp-Source: AGRyM1sUKwpHX7jOOYm0BCHBroxtvcOq6fKZhsPax7nuQBR9dmel2hUcFM3CU6/8c9OD/Ocjzdsa X-Received: by 2002:a05:6402:5193:b0:435:9a5f:50a8 with SMTP id q19-20020a056402519300b004359a5f50a8mr48649292edd.212.1657052924555; Tue, 05 Jul 2022 13:28:44 -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 nc27-20020a1709071c1b00b0072697437875si19283254ejc.704.2022.07.05.13.28.44; Tue, 05 Jul 2022 13:28:44 -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=suCdN6lq; 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 3F3A468B95D; Tue, 5 Jul 2022 23:28:42 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2087.outbound.protection.outlook.com [40.92.89.87]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5A79B68B685 for ; Tue, 5 Jul 2022 23:28:35 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=J/6f591Podjjdmb/hm2hjBWzSpqjMJeubCKkxS8KeGhoUr9XFmomRO0XiBUK2v5Tbk1uF1OB+uSTMvGe7VkxXXPe5JHqdWpOUZN1bxJ2S9D8qUahNO+GBM8kdY80d2iFSCnwSis8eGYglzHhYAxGZ4TouFLj0bl/HB1Er7804UPVsmqyBdoH9MA5WG2d+7fEk5UrwDIf+oHEGew6kJmcmmBuwX59xd93eAmL826WqeiPLbv04M5SOJ/obAZ852FjzCJZdx8bqMTJsXQuzHPhvHbkjRA+8WbB0vCiWgBJNmhGH/JMTx2sYW3tgKx5IJ+2AXi8ztmAmNGu9PKJUSPa2A== 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=I1C7dAEJSRm/AltnHsgvLYrmz+/rFCMro02uJrkjbDQ=; b=OOumlA0hchfMWvWJ38VBbNZ9wLebCHaBy5vULcq4MW+ruiWc/n9SCnmGw6SPMxw2WGDj69NNs4QmPePKqQrlPvXMzIadad9G4PrKyipfEoC6+tZwnCKPLAvziLEqqgSWwIQI4/NKjjFxz60E9DKHK43Ygo4s//6pjPmWJLXLLfHuvCiunCJQ4uL+FeIUrNPEXr2fvBSHAzWhTySbhoOEcgtpDDURZJ627R7zLn0Dxq0uVmqDw+mIH81MNFuc7C9W42BzEM1Z6/Q8ZEhwmHvtthbe9qo0/Ek1yRKxS1OXugNBE+5QDQ6ibM8/QTMAP8OyE9I6ZbOpETMA31p8+5w1OA== 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=I1C7dAEJSRm/AltnHsgvLYrmz+/rFCMro02uJrkjbDQ=; b=suCdN6lqtQ9akGrWkw8uVOvo/vxS3AoxhBJXSIcv3xP8Cq7uP5QuiTsCV3fTizJBADTixmkUwjUYpfADNFKAPvm1U067j3s+mqPQ7o13+xx8vMKl/cvy4PU+/2XCdi2hmf+WoDH4I9WISKcuS2Vrn7NqZNTm/ODmkvty7roPYSnvlWdMyPWp81/thOXaYBbJ1ExBEO/2jMa2+GOAAxCg4LWZStt+4JRPOLbyC8P78M9kYf/SE2SjgBJu1dSQ1Hilb9/KbvwKdK+8SBm7faXWcXaVaYCFd3qXgpPBs53lztVQ3+hSgUHKPI/UJQtLtPjCJnD7xzU6U7Qh1MVHAfp3Kg== Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) by PA4PR01MB9452.eurprd01.prod.exchangelabs.com (2603:10a6:102:2af::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.21; Tue, 5 Jul 2022 20:28:33 +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.021; Tue, 5 Jul 2022 20:28:33 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 5 Jul 2022 22:26:46 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [s8cspEMQZegGmKCm1/oantxtg7jx66D0] X-ClientProxiedBy: AS9PR06CA0419.eurprd06.prod.outlook.com (2603:10a6:20b:461::15) To DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) X-Microsoft-Original-Message-ID: <20220705202650.797218-3-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 72cecf00-9573-493b-74e6-08da5ec4ee88 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiSJyDCj7LTlCpA5m0H/gq0AOX6LJbwm7j8WYTbmQcg1uZ6OCGkPl2lR4i89QQtIFePeUxvcXaMnKpSjqW0Rk9VYTodOngF5zt/z7U8M0fSNX+MK5rcurvOwnC9rvhpERQMW2183BQrrx0Js6Sr6Xqx/Q9sfVI/ecWSxJ+g6wzfJ20BknVnH0UxEwQvfr96zV6OezKMcA2WzJd7DQBjTJGjr1AbgOc13lAkOMfSq/2lD4Dcn/iwWQ7H1arGjoxD/yAgGFdiyxLweg7n1ePV3/JpyQteHP96dTE/b67rIPkWlhPhjmt9ikobeqA+Gg7JsH9gu9GLBH7PZ/1CpiwAJzuPYpbv2y6NpRDIvRvtThv0+lIwHgcdoSDHON2RjpAW9QSOEe5Sljsd4PfF4Ipd+qSkFKdTEVecVFIoR7AkWdd2A4z+0dcl452MFqcGefPki2icAV7on6Doxd098gLcptoujGEB3aQXDNNjpTPAOwxVzVYmHOImZUFsNVQD34qzMrSxMYYDrKW0fmj13XU58NuJ4n3tZQ6Ai4Y81uLzVar5MeABORrIlPgvl5PdbqYOFf7mz/5ahdZpyBzXKTr0xab2OEY6A35JidVyKQQXD6IWNxToxnES+Jzksxg+/5xmBfpO0V3Y+cRxwcIZxN9qhbTWPL40yQy+oeUTgT10jQJVxVAnevELvkWHPeFc8q0B+k+02LDTkomMklvhk/uMhgPf3WoKp0cZUSh5JO2vkppZ586+lW7Ya5YLhsHwMjunPf98= X-MS-TrafficTypeDiagnostic: PA4PR01MB9452:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2J47M2B7kZ3fFkevIxGo9cDt/yEcPEnXutcK02qpgT6SyvW5yURCLq162b2uiLqSIF3S4qa1dH98a6ki6onr1mDcvI5DkGnMIMbIJt+XulzrF+0FSiD5ZzNvHVum1C/MFHhKxou46+DlGIlwroXm3CxZn2JS4RAzjZRPfSMrn53YMTDCBilAlSGs+WiwRBwHuvszXF1g5Mi6HurSAcWIznXVZkGW4CcPt9VTPjc11A7Ol9NrZp1i27XEbImDsUiwxO/jctaOajatzFh19sS3gPz8ibKrJlTuZMC6pKGlkeBq8yjrCrUyJWdgcGmwCJWPcfI+E4BD35m20C/r+MVLmdIsU6I3ZWTADKkx6oTh8WHzEALmLhmuWiidPfaK1UaPvxnlh4BVjMWhhtYvDSspbKXYWfBBT+vGf/AHy7lRHYCQ0DK/0PnsmcqSX5wY2i272c7PCJrYXsrcmB3pnwz6YJ4vT/ar792G1JWFrcaTSTyDCKoUe6hnN0jssCFt1aa4FdsL1RCKx5sG9gmjzbIP1Ynyiu78aT39Oj9FA07Ldj8sj+tBX+yi7UDHTZlouFFYlPAeSeH2aOiBY5X68sMgj3F0tctJpXsg2kP/3bq6dG+xTmhp778mkCdgipdOacajzqIfgWcd8Ia0wbIZQDbEpQ== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: rBRk9eKt8Hn4+E5TuVP7VdQuXkuOAES7oMQ0SjHVy0I3ukX0ejkMd9ZP9ilFTYdko6fKz/lAD32Gj/cIvZv4s07gYBGOaR1br9M1ibNOM5sC8WU5OOWyNfpdXENeOB90YqKk7WPjNix6L4F8fGvJp1pxViiDo6ingHJ5isM0aOs3k9cPcB1k7xSGiBb24k7q4pf+utL7TZllr2OWtKljYLEML22GLxK0frujNnUJQEybUxsSTDzHJovJSyY/SKO/P7B31A0hulrgtBEiDIMj642I/JqJ5YhBq4sDkXlXjja1bBHNpyGDIGPv+2dpchYH6MuPV0yGDOcFCvaI9GGAnhJnBJmDdy0R6TKE6Ty4d/0V8aRDrwlZ48y5fxp9IOwlhHGoUpU/4ZI+2RuuT6OnZNgA9HN9z+uNcBT0O7AIG8/RJLdhXSTPcTp3e1xVyMC44Y3fngiIkZI6BtKL4dS1keI/tLMpWJeADJAd/6GI9cWajE/tRX4s0bYFl5Y7Gv202Y8k2C7acB5ctYgtRfpoy/8gXHPYbx/330X10sn7fzE7KNZfQJvdhPXymXqqHiS6yq47d2ozt42YOIdTJ4a+6Zwf8isstpokgUSnWTJtSI0o98+pRrwypWs9bAT0+q5vLuvID48CZfpV5qDvh4U4dyN94N9ne9vWZ57OFuvSpZEHQ0w1gxS3PYoPalgIfJR57Fc4EZc17lQ1RsesJ++7i43t++QRrB+e53w+gs8h2SmDl2WnG/Z/fsDW2a1yT3fi7rw7Md3uPdndwKZU2jwHgvQt+jCiJMurCpGcuX+5f/ija2Xro9zH2rzXdu4V7poJh4931Y8vQeQvWxmxsrgFOAXB2Eg/A5pMrBSlfBJJg0LzUmLZYT2iudyvZTbTLIgaekykB95ZiZFXI5d3BcfFDHgGwP5S+QCiLOmi/qcE13sByDDxARcV5IRcTNoOnWV8OrzN25hCQTjrMErhvkKvUjcsHtlmD4UEC6qu8RwvnXp14LdowBrmm1y8uvtDSq/JlkbiL07eNR2FFeARnDM2lRkzHyUAmRz7WjXDK7dU4ntktYp01hzvO1y2DSCBT6C1kT5cP1U7VUwkK/qTx/pzRcrK8t9SeGmJ9Y/asgpjPLlAxvE2kxZEIsF3rUENMqipLaQd9j437ca8sVzz+cBdp5ricjZeTxsxw02gtolWudd4Ddjlm74h29awYd8yx9Yt1XmZM2Dk++1vQvpR4njkd29KiZSGn8n9AWK3beNUf8hUyLM/oXUd26MNGMdpNv3ZYUpHdZgutg1ygCL/HDUyIBlCAnJM8tclI4c6Nccu29g= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 72cecf00-9573-493b-74e6-08da5ec4ee88 X-MS-Exchange-CrossTenant-AuthSource: DB6PR0101MB2214.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2022 20:28:33.7651 (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: PA4PR01MB9452 Subject: [FFmpeg-devel] [PATCH 4/8] avformat/flvenc: Use array instead of linked list for index 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: erbQFDbN88eR Using a linked list had very much overhead (the pointer to the next entry increased the size of the index entry struct from 16 to 24 bytes, not to mention the overhead of having separate allocations), so it is better to (re)allocate a continuous array for the index. av_fast_realloc_array() is used for this purpose, in order not to reallocate the array for each entry. It's feature of allowing to restrict the number of elements of the array is put to good use here: Each entry will lead to 18 bytes being written and the array is contained in an element whose size field has a length of three bytes, so that more than (2^24 - 1) / 18 entries make no sense. Signed-off-by: Andreas Rheinhardt --- libavformat/flvenc.c | 60 +++++++++++++++++--------------------------- 1 file changed, 23 insertions(+), 37 deletions(-) diff --git a/libavformat/flvenc.c b/libavformat/flvenc.c index b6135b25bf..426135aa15 100644 --- a/libavformat/flvenc.c +++ b/libavformat/flvenc.c @@ -34,6 +34,8 @@ #include "libavutil/opt.h" #include "libavcodec/put_bits.h" +/* Each FLVFileposition entry is written as two AMF double values. */ +#define FILEPOSITION_ENTRY_SIZE (2 * 9) static const AVCodecTag flv_video_codec_ids[] = { { AV_CODEC_ID_FLV1, FLV_CODECID_H263 }, @@ -73,7 +75,6 @@ typedef enum { typedef struct FLVFileposition { int64_t keyframe_position; double keyframe_timestamp; - struct FLVFileposition *next; } FLVFileposition; typedef struct FLVContext { @@ -107,9 +108,9 @@ typedef struct FLVContext { int acurframeindex; int64_t keyframes_info_offset; - int64_t filepositions_count; FLVFileposition *filepositions; - FLVFileposition *head_filepositions; + unsigned filepositions_count; + size_t filepositions_allocated; AVCodecParameters *audio_par; AVCodecParameters *video_par; @@ -548,27 +549,20 @@ static void flv_write_codec_header(AVFormatContext* s, AVCodecParameters* par, i static int flv_append_keyframe_info(AVFormatContext *s, FLVContext *flv, double ts, int64_t pos) { - FLVFileposition *position = av_malloc(sizeof(FLVFileposition)); - - if (!position) { - av_log(s, AV_LOG_WARNING, "no mem for add keyframe index!\n"); - return AVERROR(ENOMEM); - } - - position->keyframe_timestamp = ts; - position->keyframe_position = pos; - - if (!flv->filepositions_count) { - flv->filepositions = position; - flv->head_filepositions = flv->filepositions; - position->next = NULL; - } else { - flv->filepositions->next = position; - position->next = NULL; - flv->filepositions = flv->filepositions->next; + /* The filepositions array is part of a metadata element whose size field + * is three bytes long; so bound the number of filepositions in order not + * to allocate more than could ever be written. */ + int ret = av_fast_realloc_array(&flv->filepositions, + &flv->filepositions_allocated, + flv->filepositions_count + 1, + (((1 << 24) - 1) - 10) / FILEPOSITION_ENTRY_SIZE, + sizeof(*flv->filepositions)); + if (ret < 0) { + av_log(s, AV_LOG_WARNING, "Adding entry to keyframe index failed.\n"); + return ret; } - flv->filepositions_count++; + flv->filepositions[flv->filepositions_count++] = (FLVFileposition){ pos, ts }; return 0; } @@ -733,7 +727,7 @@ static int flv_write_trailer(AVFormatContext *s) int64_t cur_pos = avio_tell(s->pb); if (build_keyframes_idx) { - FLVFileposition *newflv_posinfo; + const FLVFileposition *flv_posinfo = flv->filepositions; avio_seek(pb, flv->videosize_offset, SEEK_SET); put_amf_double(pb, flv->videosize); @@ -758,15 +752,13 @@ static int flv_write_trailer(AVFormatContext *s) avio_seek(pb, flv->keyframes_info_offset, SEEK_SET); put_amf_string(pb, "filepositions"); put_amf_dword_array(pb, flv->filepositions_count); - for (newflv_posinfo = flv->head_filepositions; newflv_posinfo; newflv_posinfo = newflv_posinfo->next) { - put_amf_double(pb, newflv_posinfo->keyframe_position + flv->keyframe_index_size); - } + for (unsigned i = 0; i < flv->filepositions_count; i++) + put_amf_double(pb, flv_posinfo[i].keyframe_position + flv->keyframe_index_size); put_amf_string(pb, "times"); put_amf_dword_array(pb, flv->filepositions_count); - for (newflv_posinfo = flv->head_filepositions; newflv_posinfo; newflv_posinfo = newflv_posinfo->next) { - put_amf_double(pb, newflv_posinfo->keyframe_timestamp); - } + for (unsigned i = 0; i < flv->filepositions_count; i++) + put_amf_double(pb, flv_posinfo[i].keyframe_timestamp); put_amf_string(pb, ""); avio_w8(pb, AMF_END_OF_OBJECT); @@ -1037,15 +1029,9 @@ static int flv_check_bitstream(AVFormatContext *s, AVStream *st, static void flv_deinit(AVFormatContext *s) { FLVContext *flv = s->priv_data; - FLVFileposition *filepos = flv->head_filepositions; - while (filepos) { - FLVFileposition *next = filepos->next; - av_free(filepos); - filepos = next; - } - flv->filepositions = flv->head_filepositions = NULL; - flv->filepositions_count = 0; + flv->filepositions_allocated = flv->filepositions_count = 0; + av_freep(&flv->filepositions); } static const AVOption options[] = { From patchwork Tue Jul 5 20:26:47 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 36683 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b27:b0:88:1bbf:7fd2 with SMTP id l39csp3728273pzh; Tue, 5 Jul 2022 13:28:53 -0700 (PDT) X-Google-Smtp-Source: AGRyM1uUZ+k+hp3pabXEXZrqcmYB78kSj3fDnwf8XYIikehbKiQmisXFKCg/FQ7ddJP5u+6CBix+ X-Received: by 2002:a05:6402:35c5:b0:437:140d:5cb3 with SMTP id z5-20020a05640235c500b00437140d5cb3mr48498571edc.72.1657052933082; Tue, 05 Jul 2022 13:28:53 -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 g8-20020a170906868800b007262d20ea70si19728190ejx.85.2022.07.05.13.28.52; Tue, 05 Jul 2022 13:28:53 -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=sOQkeoAe; 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 25DE768B9DB; Tue, 5 Jul 2022 23:28:47 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2087.outbound.protection.outlook.com [40.92.89.87]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7B8B468B9A6 for ; Tue, 5 Jul 2022 23:28:40 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JzbNUwKdPhEmO37rfWM1DI4HhsgDupQR94mo2cbKR+Wufwpl/bb3pUZQsz8+TMX75AB/85gEeqM/ofczp3RAPkiaepsSr2o+pIWaW+aIHqskObFBSEvjP5X5fQZSUPluBuKDlFZruv7imdM/grFnGHwbcTFFpFzVtRahuKLcfifutRW6AIv9qV8bLpHNPhIlpNS91VBqrVj9jIl8K7rV5gRovwCHaqyaJtAiQbrDkJSuT1sfi82jQS1ACXd+b91rv66wHCJqz+eoMZXOyxk7nRNl5lMe3dLy7SHe5FTPCjTC+MkgxaziP2Dg2kf7AgHwalgCxx60Os1WvcZuA4/7DQ== 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=fgxaH80Jd/KD68pCjGjCans5W+Xvvb8RduDJ9yf9M4I=; b=JwGgzAo9JIEWqXwNZEON4saCCy2b98KKNltQRfW9PFlb7cX22cdCG/RyfXZdNDXap+v1cZgvrpClFUTvziIV+Gv+ZVGWfcKVqpYWOVJbqVmV/DVV0YXyq/fZ2c9iv9cPKr5bhtET/8bvdJliOTbKWH43c+alfVxIWRTL3pL/xq095CVjBEM+wo9br5prT0Ff3wGNgbu89jCqVgvQQnb6/uLRaVZd9B6cx/qho9e6OgK7p6uOyUK/BsLjxmYJwHyr5oDiBdF/dBvPWzDcyk0BOG//jTD8ceRZHVC5iyqo+ZmwYjMjs13I91scou5FT+VoFKK5fWDzw0dXqPRPqZYFxQ== 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=fgxaH80Jd/KD68pCjGjCans5W+Xvvb8RduDJ9yf9M4I=; b=sOQkeoAeWFlCxbeZgspNPNXMJMKstFI2jhF5HXIuAsMNSRG+94UO73PGe4St0rwmhMLU0aonoH49L/rxRFGJ6rTts1Y/0LDo/YXGIASvLGELbZmTxMQ4MNEAYKho4OJ6ZZcIyZOM84pItAmtAWEhOqtGIIFGGE3nnFQA2gh6VfJNu7BG4l0t8BvUa1QrvUNNfNLS4JpaDNqZpfKIKMZZuu788JiLZ4970bIPYQpIj0vp7wwht2mAk/QFnxIPeR3+7rbUs43kU3f83lzWJR+Wgr805GnKgBbPxZoacKOZkU/c6FbQYkqy2wiumNEehU2LICPShA0ItT1Ftiuo+gbuDg== Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) by PA4PR01MB9452.eurprd01.prod.exchangelabs.com (2603:10a6:102:2af::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.21; Tue, 5 Jul 2022 20:28:37 +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.021; Tue, 5 Jul 2022 20:28:37 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 5 Jul 2022 22:26:47 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [rEyTW2fXdVmOcs2Ef2w3zbTmu4Ubbloh] X-ClientProxiedBy: AS9PR06CA0419.eurprd06.prod.outlook.com (2603:10a6:20b:461::15) To DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) X-Microsoft-Original-Message-ID: <20220705202650.797218-4-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e45e0706-5c18-4039-f800-08da5ec4f08c X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiSJyDCj7LTlCpA5m0H/gq0AZo5KQBbAMzGcLOLG0XAhSuc96n1qMZlSTmwcL2yl65nkM8VlufGpLknA9BsK3e9hiYtu+reADvlY5saqpVeVjHJ7rp2ENkBtd0k3KuEo0XKfGV/ZZsKbFtea444NFEStRhbuABbjRjIY6KATt0431609fspjhN8Zfo4Yt9oLIuwz82PeIQA7JEkelN6cTHGUn8G6GG5ajx4hClm6rEp3loO8VpCrCbAfDRbQrROOCZS1kyUoBHrbJfzD0A7zwMGI029tuQjx5FKz+DWjWpLsvIenNZUGY+wPDWaYyw2D/AqjDoBwD9Yc/z9y4vwJO8OjgwbsEfw+CaMFXgNb42pSajcXsGp8ODnIC1HG8ePCfkcRVKapVvlMMJFwlW1mldy33X8g9fYEQ352wGuLOx8JwC4hGrpirtMPUrxW77PVMWzahmbzFtFwxss7fqpsJuM0IVl81QF1x2jzS6g1F0Mdw3xfilIEzpPStye0+hJ1E0xaUSvUrh1k67ZHFXBJQPEf4THuDqi7ux/8JTx4TWdyukyLIpFEmg2D2Q6iD1BUd0S2DIAI7YATLKDTyy86DbDf/Ub3ogVCqj/rjzKOBRqS7i+0dM73qMK9t8KSnkzulJjk/gNZ1g41FLm4eqMSbLPSQbMXGzou2wZetPowXCQmZ/CdNNani8n89kQeofUCRftPjg7oM92lgAyshkZ7pA3aGi5lrenKP91UBqVrCZjvBl+HAT5AmpFiUI3BfaByOOE= X-MS-TrafficTypeDiagnostic: PA4PR01MB9452:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: kIklfLX2CH+JqgHHCZtRTbQJTjIAzdo8R2lg8QV0Z74oMwmxhNh5o0gLMPyIlRdFpdGNyWcX+b3GeN8FzqRSTAeuPweFhZJifXg5VWqHXy6EOL4BXSzX6qACHAUSPFc5z1KLBrPKIp2PBhs18c0aMh+3t06QTjvs9fHqaZiZM1qVw4qFBlFodflNFrnSwutvOHBq9wjXjbjktfsVHu6iY6GS7LU1QtR6udd/jONbg/r5ZB7/lHDFN4ybGmZa07cAQC2m9ZvsyI7L1pSsJ6SXTQiA6+sOmwj1Sb4X+l4O0CuOKp6+9B2dvgF1XDuRdmy3hbwm9yBEmvfaaOmirObEWxbl/9U9tmVkrkc0KbI7PhIWl/5VHFFWkus+FKuJvohm6SxbJUov3z2TeNkFJlgNL+zeuk3HIu/8tb0V7F+ycasva8ONe5fOTH5h3sl/NEq2nVJ20SPrCvE2g+W1OItJx81YfZHYUiQaHeJG3eppzscNO8TssloACSv6yUYd4VJFmgPt2q2mrEg103DGjWFQyZKSTbB8bzR8gyERPl6gRQ/Ni4fHWnECdAiBJM89NfZKDoH/UgQBEq4e/bI/8vzACvLcFkQetYi9p9VJf0BBnbzMHcz/Kzcta64b11Oo88lDzLLygcChj1N84hoazoEf6Q== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: SSUN9Ihr52H50yyi/sxCYxO224h7Pdi2dMk2NLnpn1qqyAJffSbNsjbHHwMilN+34OOJ84SvUun1g+XwyWR1tdhube0B7zsALr7F3W09g0f8gHYq0JLYWXXbw0/vbVtk8iKXRGzWXDNLYCDowhDL2LbFb71wht0dH6yki+xKbEo0o4eYQGpVKMgqbEcz9Ad1gE4fcuPnEejujkQvjcYAoq0deSxRyj0fP+E1ZwGnFo94a5J2fHMYRain6vgQbmDohuzw/xSxz7F3fpSFJcCt7B8FrG+56dmDI2ZXdGaqBKou6rVxQjHodM3tqiiDbiCMPJWjaXWZ/nW08Y13yROF2XXcjW8IBOru8sVjnIi6f5+9TpHipt8DdRiK5olHuKqhv88k4kABH3ocssFZbzc9R6tPyfRB8kLCFPwF73vYwEL14wcqeumCy37t1Fl1KM6EzLY7XHkgnFCGTkJoh1445i94qrRFQInUTNNSm5GQZrPbkJ1ae7lqW01GOjAfiEp0VP8dqSmAs49dp/JmpzvGZwaG1XzRryGQOz6zZXaLXFDqmdoFRf89aRUCJYqaxCQsCvrjjENOIHAL6uIA8eqwiFHxoJ0iJjX5+lDFLosDOPbKzRwBWiVhORkcubLJno4hjvQz3Nfq2m8ZFBM3lTMO5Vj5D3pLy88YgJaOaB19bYWiUrdNo0J+wYxR4ZTx7TH6X/5wmy9VI64G/XuWFi2QhneZgHl9EqkQv47uMF8cj8on03xKwK6aoP1AAEqc0xUImwV21edruShg+PgsnYkMe4pLnJ+TP6sVkkx1UQNhGwi1C9shvETpGeW/0oB2+zZaSz4FwAZZgx9d9hkwnP2PyUeSAKv1aTdR+3pwColM4iXJLgE9+TUiaCPXLpUC8xSiSlCITwvLR4OAX7/8zls3xsj5LpvVCS0oZcmW1n5qlsvNl5MFeTDtKYPgkT8CkBeSt4uEJOJOgMKddS55jnueTwY6ZuJf1hySlleTPpJq/fC2P2BTVowvJi/0A3jtVcezgAKpv+k2MrpzkNs8mA2r09yFW95uGdlFaXVk0mISGURiCF0GwdM7Xk6pIri6AeL9J3YvS0dZzq2/zvKgEhifWJYgaOzmNcPrk9T4iTRDTnHNE/UnHifoCFWGGetn5UfRnzc6x3bxm3A9RstTFzJU7dJEJj5/OAiilnoTeA1PUcuyhwB3XvaY71Tnle1SCoZ18tYOmBRnPzd6TVc1Xkn4TM5UoXDYHfD4jU63S2wnYRPeg34wsDPfw27zanNl1zgeuk3HEBF+Tj++nu4Vb5S/ISqBI8yTf6ljbq6tg8N9OSM= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e45e0706-5c18-4039-f800-08da5ec4f08c X-MS-Exchange-CrossTenant-AuthSource: DB6PR0101MB2214.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2022 20:28:37.1336 (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: PA4PR01MB9452 Subject: [FFmpeg-devel] [PATCH 5/8] avformat/matroskaenc: Use av_fast_realloc_array for index entries 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: Qv9vMIGIgMms Currently, the Matroska muxer reallocates its array of index entries each time another entry is added. This is bad performance-wise, especially on Windows where reallocations are slow. This is solved by switching to av_fast_realloc_array() which ensures that actual reallocations will happen only seldomly. For an (admittedly extreme) example which consists of looping a video consisting of a single keyframe of size 4KB 540000 times this improved the time for writing a frame from 23524201 decicycles (516466 runs, 7822 skips) to 225240 decicycles (522122 runs, 2166 skips) on Windows. (Writing CRC-32 elements was disabled for these tests.) Signed-off-by: Andreas Rheinhardt --- libavformat/matroskaenc.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 1256bdfe36..7c7de612de 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -168,7 +168,8 @@ typedef struct mkv_cuepoint { typedef struct mkv_cues { mkv_cuepoint *entries; - int num_entries; + size_t num_entries; + size_t allocated_entries; } mkv_cues; struct MatroskaMuxContext; @@ -257,6 +258,10 @@ typedef struct MatroskaMuxContext { /** 4 * (1-byte EBML ID, 1-byte EBML size, 8-byte uint max) */ #define MAX_CUETRACKPOS_SIZE 40 +/** Minimal size of CueTrack, CueClusterPosition and CueRelativePosition, + * and 1 + 1 bytes for the overhead of CueTrackPositions itself. */ +#define MIN_CUETRACKPOS_SIZE (1 + 1 + 3 * (1 + 1 + 1)) + /** 2 + 1 Simpletag header, 2 + 1 + 8 Name "DURATION", 23B for TagString */ #define DURATION_SIMPLETAG_SIZE (2 + 1 + (2 + 1 + 8) + 23) @@ -914,16 +919,20 @@ static int mkv_add_cuepoint(MatroskaMuxContext *mkv, int stream, int64_t ts, int64_t cluster_pos, int64_t relative_pos, int64_t duration) { mkv_cues *cues = &mkv->cues; - mkv_cuepoint *entries = cues->entries; - unsigned idx = cues->num_entries; + mkv_cuepoint *entries; + size_t idx = cues->num_entries; + int ret; if (ts < 0) return 0; - entries = av_realloc_array(entries, cues->num_entries + 1, sizeof(mkv_cuepoint)); - if (!entries) - return AVERROR(ENOMEM); - cues->entries = entries; + ret = av_fast_realloc_array(&cues->entries, &cues->allocated_entries, + cues->num_entries + 1, + MAX_SUPPORTED_EBML_LENGTH / MIN_CUETRACKPOS_SIZE, + sizeof(*cues->entries)); + if (ret < 0) + return ret; + entries = cues->entries; /* Make sure the cues entries are sorted by pts. */ while (idx > 0 && entries[idx - 1].pts > ts) From patchwork Tue Jul 5 20:26:48 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 36684 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b27:b0:88:1bbf:7fd2 with SMTP id l39csp3728382pzh; Tue, 5 Jul 2022 13:29:01 -0700 (PDT) X-Google-Smtp-Source: AGRyM1tg1u2XyzM9n2JzkXASokosohVOmYQ0jAJLTwsyw0eL2FIDsPgR+jNcpSTSUoR/q3nkpfbD X-Received: by 2002:a17:906:7386:b0:715:7024:3df7 with SMTP id f6-20020a170906738600b0071570243df7mr36218082ejl.543.1657052941586; Tue, 05 Jul 2022 13:29:01 -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 h22-20020a056402281600b0043577827670si21696094ede.354.2022.07.05.13.29.01; Tue, 05 Jul 2022 13:29:01 -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="Zq0/GIBw"; 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 0265768BA0D; Tue, 5 Jul 2022 23:28:53 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2087.outbound.protection.outlook.com [40.92.89.87]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9C91B68B9A6 for ; Tue, 5 Jul 2022 23:28:45 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TV1FeVfaqKKkFoqrJXjqN9YBx/EUHb3mKzYd+Z7gV5THQK5GVlBDXCFwJFTwjVbHUiF8ZZ7x6CSEZUREnXbTFLCrb/efnbJWDpnNbVTSt2JvaR6npsBFBwXIZ0PKAaedR00+lnTsf+S2rm6PtKO7t3719tBr07tNwGhzk7YsnQcgCXFbnJFASXpPYuRmx8KLYwLnoBQ7VLUhtW8W2jjc/H0tBohsll4N52dP379+9/vf30Ry8tv3LVy69kZ6P3be9PiJHQ4NwOrt+tOS/X11T3/Zhk14WgoIESXAziIW1U1orvpvDv/V+c6NMrcgGLBXNrtW/iG5j12DAuKGYcsCsw== 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=U/03F+QcRYP4aQArGEnbPzBsN2g+1EyBvJn3glj4RR4=; b=DWoaWAdcG+XdP0ig2CIow3C8ErNgEjxs6uoOFvzrTonS4KW0VwAcZlO7lrut9pJ6bFQnNvaC+2Wg/HJccqmVNzt5iaP0b/PfMDzMedUtm5UFQzTZ0KcR3A7/XlOalEEAMlSe+z30hH80Wwp5bYh8bh5MSMD1KDBb419uOz+QXyhIVq4/8775X2KB4Rkj2rM14vkSb0Fqe0DXBS+3ZauOJN1mtmsksjcqnnPgVgiZGETBDtc+76soZOJ4pRlxbvGvdOm7+CwTm0IbeJArCb5+zN1cum2Y8315ubgSTiEibFR0FD7VnXKeJ+S6Rs7u7PZTXIC3l0O9G+txRP0m/1XBQQ== 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=U/03F+QcRYP4aQArGEnbPzBsN2g+1EyBvJn3glj4RR4=; b=Zq0/GIBwza62DVPsUgdVUpMe2XKqjdhGdceH/hPcb0d/HV9X2uAC/rVYUqdGhTN9fawoSjZT+1uDiwSrrIFs/Xkn1gaNLgw6p9AzQASKl4Y7HfqeBFv8+1rtu8mUjC+opuDUReVhz7d8Ar0cqEc7yNNtni9PKoI16UenKtOk0EHoWKHRY2puMEASwVDuS52Q4AxH4xSqnWLAsmXRBGu6gV56dLRGaYT3QXfP7sSeQoq+r5X6V0cB8hPAXRP3cSdbeaVBq7/z9x28OKW/5mrORrbn9DZctDSi+XcLr4UdRe/FVjOc1+d0hwkvIjq+YiHlKgqAIwxbeEVNSS9+q6hFiQ== Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) by PA4PR01MB9452.eurprd01.prod.exchangelabs.com (2603:10a6:102:2af::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.21; Tue, 5 Jul 2022 20:28:40 +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.021; Tue, 5 Jul 2022 20:28:40 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 5 Jul 2022 22:26:48 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [LQpDIOndOABmpgBoq5V6MqnfYOK5r4ID] X-ClientProxiedBy: AS9PR06CA0419.eurprd06.prod.outlook.com (2603:10a6:20b:461::15) To DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) X-Microsoft-Original-Message-ID: <20220705202650.797218-5-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1d6191b4-e14c-4c79-dd95-08da5ec4f2b4 X-MS-Exchange-SLBlob-MailProps: q+fD6XS3/UJvtnGI0O/xt+lrjf2qTxdNzAAa/sTSAXBhQZtLxrykjmjQKB6aPIA0b4ezTMEYoiBFxPQMqJeMGVDApUtcW+PT8WvxIVhxX/zfjdfvNqk9Y1EDl+ByycvdY6tejNHpQetgclL+jMExBJIogMeEzbYQjZp3K1qiMa0i6Ij8GpbEKqZzxJJwYg1K3Sw1THH90w63dO/8s3nsfn97xyjC6afYa+xt6wY6xhfWwJdPxXz3fHRmW1h6YJRPCyfCOUj8IlExfo6sDPEhlLmfTkiYVH3nDijVK6QfC526No1TIuJYBxQ7e7nLhM4+cUxZxHfTLig5X2B8Ls+7dgJGeQ58YEoT/N/KFYnj0tLlcNghUiT29beJu1uBrjzi9LqymA+ILw7i4dkOL950aC2W6251bGekJ6Jj1lqdGpno5IQTw1rF4cLuaFXo/TJzoUeK4kbAZesxcphqfIdLwKm54OAL97c4hQlj+wtu5fJSrDnhmE7yF8ZnX0GvBc/lbjGRTwZb8t7/3RvJkO254hhkQ4CeWXev9rcbKxdmHuGHtE7PS1yAl9jRT+YlLpLAXmnaRdS/N6BTPojSe+MCa3WCBCyxG51Ij0MbywGVvMCBDGI667+YbL9UwXkpBFnnAuREvovuznU+yFkm7O24N0Y8/PGJf1DPAEnMJjVrA/33v8FO7YkwnH1xkqSqDJSjixnleOfb8VdDfU7RMGqo/A== X-MS-TrafficTypeDiagnostic: PA4PR01MB9452:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: zjGAUnE1ooRmKqQysr+nLrUelNtHkBldQSTaMkSy4OlxvpLA0EKI6bCBNoGCbnlneA4s0CYR2C8Obm4D3Do0Up4omJDjk5Ka+tqdaflTJovm4ITwK6nHWhDFqTsXc5rZU9YEtosvvUV3MFVlLFvYKS+eOBKUzVQzc6YmP051gFL53jYYoJttWJkrQSdyr6RAqmp7VnSwj/UKVSWFOJTSUdUShHdTXXN/NNKnGWri7M2FXeBwB01uFjdT5xbGrwTugK+yCjraJtppy5vrQbajSs6796DJb7pcYEZJeTDvZcB8s/FfT4S2+uc8AcUvD++qzICn9DJDHK/YcC4Y5MogAjOGi2NtCbQYGdrRODuFP/jtA5HZbXmZg3Tuhu3SELd28tlt2pW+7EnRjqjL6NJubVES+PiyL0D5Jy3ghWIS6drhRykaaF0ldb9kQ6A8jLYLDsK5W2o7L+4b1uYv0fMLcQFU3nntbdkGcdTvAHXq7ym+7eNzWFURSs4KD3JWlWRgup5aOQtJss/nKZYs/xUA16fxmMXqqajUQ872H4cM7zSOjuZgxXpnrKbEHAHXlWFyoiXd8SsfObX3btdMSQGdccsnFTwuAb5fjsfZQqb7f42sjZ1xCHyV7oYYLTh8GRdMPRPya4QwqJ4G5iKJlarypg== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: hw35nCn0AIa+gnrvkAp9MBe9dA1XGEN57tyTtttnUh7R6/Ia35oAybxrngfFDcK1bgW6dbhjh+dkGJhOdaT+T/S+3Ct5ZRAeDD6XC8qR+qBP/ZMqnS+zVfXx7lES3DFAafUiB1GbaA32Q8F3Ve3HGKFY/pKHxUsFDVO1+Dqv5tGfV4FWo8Bl3zDdeoYE6oH84XqdWApldtx1Wr1haqCY6EuUPj6Fwiw6L4KjbNWc2igNB/9BC2wxYf8Lxd0Qji5oK/CBlu2DcXDhpMim7KrR1+qtj/4EwvilYPg2En55xu6PVFHdFNethAof0n52tGMl1eQvECwN+cJkwCqRNXS1avkKttlNiuoqzJwpo12KeYfZNWq/zAktkRcl4VXoYDFoOa2b/cK/PKG55VfFvoJqJWyyvmfIwQBUwF04I8oHSJLr8L+86DvtSFKcTfV8zEZCd1TBn9z/ptO6At9AgoKtLInMftlq+05wD5EpKXQ79AhYIlGAG+fsoyMc5M/Gthxqckc2DqxY52g0T9QTG2Ms2sYM3AxaIfYeoO6emg8YrhCpjrLNX6LSwdSlv4Rd8NVHhxeWM5bCoNhCvaqD+PsZ3Siq0E4tbK8DANrR0z3SXujWT4DecJrGQeYW/ZY+Yuto5VcHxVEuXhvDvtU7TR94kJYdtBU/vqsYTQLCeevJKbpzJikCxLNaLoleVV+xBCovriixGpN1sv24JV/W2skBBYPtQTunznpjRaC6L4tJAFX2VK15NKMOssIc6Jl/mw8SuhYP66KVvPZSQheZnUSqloT3nz/iCh33OJP/0gbFG+F0JyrUn65MwNMt6XuhSbeq5yNcEipkFNNK0fFFGslTayyRj2dgEqS/KvrSUch3MATNfOHfruWrN0ThyWHaQiD/zkenekr+TpPHXJLdeCDTKnzhSJkEB6XErHZF6ltx16FHcFnIRrtduSLvcTB8wmS3qsxM/TGxX4mSU/mJrAtHygv6VhfF3uk+/Djlvr0xqP4pn9+l8tp4//12RrN6w8qPPqRhKI87laDrbjXvGP2D27FhebZP9LXYMWbYKkxncd0cf7QSXBFRyJ2INmwQFUcDuuMP5Hy2+Ep0RzRvqqiOBMj5ev5edQxSAg52+23lzmU7DjRkpt2HlTvM5CE9v1tM36blvFrg6IRHDmHg44bOg2GuXBNZGwG1/LxWJG1g19b1WkTtmVq1ipJyr5Cqs25LVmkT7mH1x7itVb3gfxxlkIk1CKkB8OSEY5gvx2CajAu2thlmHgPDKlurVU6b/x99K/ElRNim/9TBmeR1E6j4DtKISLchLRaisVX2xWkPbMA= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1d6191b4-e14c-4c79-dd95-08da5ec4f2b4 X-MS-Exchange-CrossTenant-AuthSource: DB6PR0101MB2214.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2022 20:28:40.7840 (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: PA4PR01MB9452 Subject: [FFmpeg-devel] [PATCH 6/8] avcodec/movtextenc: Use av_fast_realloc_array 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: C7zptvwywB1N It has the advantage of not overallocating beyond the maximum amount of entries that can be potentially used (namely UINT16_MAX). Signed-off-by: Andreas Rheinhardt --- libavcodec/movtextenc.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/libavcodec/movtextenc.c b/libavcodec/movtextenc.c index 728338f2cc..fb19b110b4 100644 --- a/libavcodec/movtextenc.c +++ b/libavcodec/movtextenc.c @@ -76,7 +76,7 @@ typedef struct { ASSStyle *ass_dialog_style; StyleBox *style_attributes; unsigned count; - unsigned style_attributes_bytes_allocated; + size_t style_attributes_allocated; StyleBox style_attributes_temp; AVBPrint buffer; HighlightBox hlit; @@ -342,6 +342,8 @@ static av_cold int mov_text_encode_init(AVCodecContext *avctx) // Start a new style box if needed static int mov_text_style_start(MovTextContext *s) { + int ret; + // there's an existing style entry if (s->style_attributes_temp.style_start == s->text_pos) // Still at same text pos, use same entry @@ -353,10 +355,9 @@ static int mov_text_style_start(MovTextContext *s) StyleBox *tmp; // last style != defaults, end the style entry and start a new one - if (s->count + 1 > FFMIN(SIZE_MAX / sizeof(*s->style_attributes), UINT16_MAX) || - !(tmp = av_fast_realloc(s->style_attributes, - &s->style_attributes_bytes_allocated, - (s->count + 1) * sizeof(*s->style_attributes)))) { + ret = av_fast_realloc_array(&s->style_attributes, &s->style_attributes_allocated, + s->count + 1, UINT16_MAX, sizeof(*s->style_attributes)); + if (ret < 0) { mov_text_cleanup(s); av_bprint_clear(&s->buffer); s->box_flags &= ~STYL_BOX; From patchwork Tue Jul 5 20:26:49 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 36685 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b27:b0:88:1bbf:7fd2 with SMTP id l39csp3728509pzh; Tue, 5 Jul 2022 13:29:11 -0700 (PDT) X-Google-Smtp-Source: AGRyM1t2+stYPp7IAGwsDYcDWPxRJp+IS4niGpk9bKj7YVR5FQ19R6IRkSJCHLHVq/mOLOPKkv0g X-Received: by 2002:a17:906:118:b0:715:771b:251b with SMTP id 24-20020a170906011800b00715771b251bmr35206988eje.651.1657052950868; Tue, 05 Jul 2022 13:29:10 -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 hc41-20020a17090716a900b00711f5909101si18742225ejc.955.2022.07.05.13.29.10; Tue, 05 Jul 2022 13:29:10 -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=c5SqHeNp; 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 0BE4B68BA2D; Tue, 5 Jul 2022 23:28:58 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2087.outbound.protection.outlook.com [40.92.89.87]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C1DA968B9A6 for ; Tue, 5 Jul 2022 23:28:50 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DuXaO1p2yFwE0sBOE/3ruT4+/mD/u2PH6GcrKMMCMoLUK5EOZLw8RGItl/gRgn9nAXn6B8si+EaFXr5+vtPnJs9O7Mk0vrkSFTP0fBNcELDdUKKmZ36TOUJFGaFD2mGHPnj3OzNlu8kKAs1z3ty7ZCec8YO4p+qwv/Czh54RT7NQLxclUnoZNhJnq1IeWHy5uhBAsRIbutdHkS3GbwKAW0Jdlg51P1xOFGfhW3PaDrGMUZOSxHoQPhq2AJqjT9A3mXHn314upuSLyyvYWV7Bet18Q7SJyazZQcYlcrYl8NW9P8u7mn8SII5PptYj60D0ws6xJlWar5RwbEiU3ib0eA== 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=zv2StwiVHJfKRHyNmx54nRtnQJqemHBbiVypXr3nCT0=; b=JUQVAo8E8zti1A7VuWeEAnsgakJLJXkzmgY5DwlI8VmPut/9BqIM57atmPXsrFqhQWQckJYAKx4YAE5rYBjexZgq36gTULdKdvzvqGA+M5CcR93axe7Vz7S7di9nmmxfZDzz2ps03K7J8MxNko/iDZSqAnQ9a/Yyh7J3gQqbJZaS2+Aq1N5BvvhrqkCJEalK6YddNnF+HWps/q6Sl4rNYQR+57iTcPzouN8X7b0ChY6xsJJ53TN3LCl+MCwBCK4ivPdyvmrKq542U5DFqLlHl3B0/CB0CWW9UHdspqzIe4dE4pq9pFVA1nphnhXPvbE0C6ue1Gqb0xprKm/U4zdYtQ== 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=zv2StwiVHJfKRHyNmx54nRtnQJqemHBbiVypXr3nCT0=; b=c5SqHeNpJpLT0rQxRZyT1uztYwYA2glQeBl/4o+eTDb99l8V5cYZ0YggxU+hK9/qeL1yyq+O6VRHr3SHYf3LArmFpRsXJHnQwhetrIL+ABQ8noaJWtbwGT0pcA9gO1Ck94C9/8IiguYaCnv7jSf+0X31ScWoOWesKppyou1OHvUwFJQqNXCypu1195xdgXC0SILI4GViy8EVtN1bOL0goOYYBB+9eXPfNVwF7M5zUSTBBm9oQHzdGS0TPTeGuTGyhDUBsp7iKwAvTwQn8sHVRwz30OVxHJ1Q5o70Up0mho45iCghLd68rciafw/tzBI8rFvA9FAZZnV2WHLbB+EwMw== Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) by PA4PR01MB9452.eurprd01.prod.exchangelabs.com (2603:10a6:102:2af::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.21; Tue, 5 Jul 2022 20:28:44 +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.021; Tue, 5 Jul 2022 20:28:44 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 5 Jul 2022 22:26:49 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [1jtcA8zjSJ5/bORH1a0VFJHfGtewzvIe] X-ClientProxiedBy: AS9PR06CA0419.eurprd06.prod.outlook.com (2603:10a6:20b:461::15) To DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) X-Microsoft-Original-Message-ID: <20220705202650.797218-6-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: aef589e0-aee9-4d8f-1e8e-08da5ec4f4d7 X-MS-Exchange-SLBlob-MailProps: gjx25WM8ZNWDLNYE12708/FIJ0L6AOQd+Zk1EzbMCTkA+LqpJJgWFN9Ep5VoQcCcqtojiyb+DVDmH2oxo+O4NfoF5zIOW81dJU8B/QXxl2djZkfjnRSpwQLMtWclosP3Z2Db6a6XAWlk35iMLOAfpJdRwiUGDICceG0JZiv8q3f700IZnjoBaxPMyx5Eb5c/YLZJtjojdIsUVRTldSxzXW+89e5Z27LM+fBekUGuu9rM+6tPkHQB3I1N4gcdAHOe9ViBUr1n0pTTtwKAfXFbGeobQ9lKErKzYBfd3z8VLWjUj0lBfGAeUqthS2Ma4xzo/p3k+Ym7sYOmhvS7F6WnNkmmF6ZtXnFN8eFmu81acyirPyoL1GVy4ChNQ4pMCFWiNjdW6+xY798fGN8eZjc5vvYl7CwT9nLVHNyLtC9Ht26YxmPH6OESl6lqLt7iKRwi0q9EIOA3mC+bW8g83DzOdPxgdv+9gcN55m2dLHJCHGprT9sWgDNH7PBdfc13TXKWY0N4c9u2Gs+5Ldh9Ip1xLIp1c2/Yzr0lArccT2FJT9ltzlASoqFRLqjuTBjvYXKPDtLsZMp/5XWwkBQMyqPSw7W5iimLuh49SxUucJMBMx4/Qiby3tBiSgoa2pNemAteWmaxdk3E1RlhKsqy5fLfdjAzOgouDybNwLkkZg9ab68e8cXeQKHkJa/ezf5VFx+BltXeGCEI8QfJPlIU2XdcMcKvM2uTyl7A9x8Au0Ry8K4= X-MS-TrafficTypeDiagnostic: PA4PR01MB9452:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Ak1idfV+Qrj1yNZbM/2Z/OXngC0GU9d7AzTGgZwznF/Hxo1u5OamMLhHB6xJwyt4y3wC76COjKezAtD3w22egrvHpsogu6lkeGOSsb/RCfpXylAC0t5PltSBs1R44bu2GrxKyqlI0zLCdbdx+CKeAi2lrd2W9uZqQe7bei6F+XjT7vrqfd3SlUaIGgDO3rUAOzrgCn3bh1ZODG+t5nfdoC0NypVrmcOU6UMX2OvZcj+KwOS/ilEugq4Ka6bUYhMkej8X4v1KV+pETSnz06ovBTDfyzW5Nr8xTUemBbiT0MrJ7G67vjl1Hex6vz/ccQgR5IAT5Td2Aqd8cB5QmcZZSoPTKGZdPY0BwEUFSFqjA89H2tSmjZRXhsFJVts0Z7RYXKjVufTL5p/eWGo87HAiM0zxg6gKmgfTLv2OWXtSnrYcCL9ZVZR0sllNI6VVqOIR5pbPgKHOuj0sOjkwyOzjkMxC7HqoqMqdo5ivUsusrmO+s+8hQIGxWkWEvXePA9gqBpfc8Y3d9uWAzaWjNH6yQmtekzykvDUl5FRBu9XQAO2rGHuST+P07/t/EEB/fx1VGdgdJREl+AK4aLX+3n3AR3f9iJieuUUMtKwos+0+b2pUm4xXAkrxxgQSqm9+9mqVdENrWUg/ojvZfP+N5V+gVg== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: jJlEhULOsWO7bXxomCP/8vRdo7xXpEaOUKAC8/Q1VNC0UlPI2G26F0DywcKS2hXA9693aMcjkLuDhrsI3WKIBQCdeZLm0SR+WcPgqyeJ7nEUBn/0Sn8YJlfeXvF22/tVbGnzOEJJ+N5GX/K+jPKdUBNPADawHVq4CCrQNaLJdibxICNGOSDEma4HokLrjeFTPG0RLwx9POOPVZDiZmpPX9632cob8yyoyZGcsQIhQCPcrO+N0f529oZ/OKqy8TNPNw+M6x6+HUc24qbo0zf8ANLM9Irl9QrEzsZqxcxOSkGNrMOHdg1EuW1bGJ3pLkAopRye4AUfhilb7+NZd4/Dkp9xYEG0nWMy/vN/RHWRDWZcNFzR2giu2BetVDPw+ZxaAleK3ic+XWj5XzBqG+UdIpLqb9qQPT6iadcwJYEGTZYeiFg57e2AOXa0R0dwpYjXDTI9EQZ22zbEPE4DsvRua3vFUoHvYi6reCLYF0Ert2LT/93vuBnlnPqKrsnGmeYlqtxtErj1Sz8Dsb+Opzkb9ZToX/Eu59Ie33aiqW1TxxI1zSDn/Po4yhIHqXCXVspX46rWx0/NyM9F9xEN5AdvDH6+Usb1bU+VpgVtMGJXc/gH6xNuG3rljB+wjiYqV2QZqjxHpGIgUrCEiAdxMlqHr29K1i35CmztihMZuSnh3RuPXiNr0brFFWKhFV20r00ZIqA4I3L5BQ1zncN0EZgRSLYreHqQo+E9ewbqwNlsI/KGJBDlBmaEeZxlGiBRdsEUDW+rweryjl99IcxFQ1lTVnF9/XBk0RcU3O2Y8R7sDm+d/SRTmnFopwD0DLBL0KDdwkq2vZfWM8Ueg6VJX7A8YcQHm2IrYGalMC9CGFWEFjuvPx656B9oTrwVJoMxYYRejfmbKRwEkk3fgqJKq2Ha/3ieGsA1BBuMMRMXFt5PDBG+U5xfbxw6mtf8gAm5DApDkf2cPuvw9m7VbBngq6udViQo1Oyb+iWhsu4/PKvfMKI+68Tov7t4ySnUwyvC5Ua6SzWAufmZdKZ8BR8KtQpgenHTaykWgt2y15PcJk6DQt+U+cGyOp83cL5sfVT7BgGQKSe/n5cpIT58Xre2Fp9XpcQxHC7FptzEfK5iLlsVndezhq+nRndqddbYQHhKIOzN07+PxIyB2qw0Ld3Uua+9X9Vl1kd4zl7N05VxBfDb2n5YJaJ9xWDFcGLpaxjtsdS7J7MDv8T08ToeXXQerG+UaD0PiF5Dy1kvnfgPbTlLjEceuZKV0U5XVGzq6R9//MVqS9CKL6alyPmTZ3sfJ+UhYXxN4KoZhjKavPE4+PZedKk= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: aef589e0-aee9-4d8f-1e8e-08da5ec4f4d7 X-MS-Exchange-CrossTenant-AuthSource: DB6PR0101MB2214.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2022 20:28:44.3240 (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: PA4PR01MB9452 Subject: [FFmpeg-devel] [PATCH 7/8] avutil/fifo: Simplify growing FIFO 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: kXYnh3c3SRVi In case the data in the FIFO currently wraps around, move the data from the end of the old buffer to the end of the new buffer instead of moving the data from the start of the old buffer partially to the end of the new buffer and partially to the start of the new buffer. This simplifies the code. Signed-off-by: Andreas Rheinhardt --- libavutil/fifo.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/libavutil/fifo.c b/libavutil/fifo.c index 51a5af6f39..53359a2112 100644 --- a/libavutil/fifo.c +++ b/libavutil/fifo.c @@ -108,17 +108,12 @@ int av_fifo_grow2(AVFifo *f, size_t inc) return AVERROR(ENOMEM); f->buffer = tmp; - // move the data from the beginning of the ring buffer - // to the newly allocated space + // move the data from the end of the ring buffer + // to the end of the newly allocated space if (f->offset_w <= f->offset_r && !f->is_empty) { - const size_t copy = FFMIN(inc, f->offset_w); - memcpy(tmp + f->nb_elems * f->elem_size, tmp, copy * f->elem_size); - if (copy < f->offset_w) { - memmove(tmp, tmp + copy * f->elem_size, - (f->offset_w - copy) * f->elem_size); - f->offset_w -= copy; - } else - f->offset_w = copy == inc ? 0 : f->nb_elems + copy; + memmove(tmp + (f->offset_r + inc) * f->elem_size, tmp + f->offset_r * f->elem_size, + (f->nb_elems - f->offset_r) * f->elem_size); + f->offset_r += inc; } f->nb_elems += inc; From patchwork Tue Jul 5 20:26:50 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 36686 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b27:b0:88:1bbf:7fd2 with SMTP id l39csp3728602pzh; Tue, 5 Jul 2022 13:29:19 -0700 (PDT) X-Google-Smtp-Source: AGRyM1vhPNOINYsYcv+ByIKlW6QIMwVFcpTrJSq5ceLwqVrWbOY6Fdrga+EGToBBdk2jvyXSWkVw X-Received: by 2002:a05:6402:11d1:b0:435:d76d:f985 with SMTP id j17-20020a05640211d100b00435d76df985mr48480135edw.8.1657052959361; Tue, 05 Jul 2022 13:29:19 -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 x4-20020a05640226c400b0043769e9d1bdsi6222239edd.467.2022.07.05.13.29.19; Tue, 05 Jul 2022 13:29:19 -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=Cl7EH8Mc; 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 D06E868B9C6; Tue, 5 Jul 2022 23:29:02 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2087.outbound.protection.outlook.com [40.92.89.87]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E649D68BA40 for ; Tue, 5 Jul 2022 23:28:55 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bWE2zTJcYJXJJ9ICYy3MxhJoROU/fR8SEWsCt+duy2ITvso4XgTe5bIqnnLlCJqafqj/W+pswu8kv3wSTk0PgCGJU2/DbPmcxVbBVcvtFRa/3hUTEtrEUb/6OgKl1Bi3tBRUhCLtfm9RNNAtzlf2k6fAdvJ3FOIO7e0h+DeuYGEvmzu+GoxMLR91NgRcQlIYANNApFtuM891FMlv9mt0BiwkMpG+QLKFoPd7f4javTSdKaH++AdM0EDcVpCnYXQ2LBYq1bgMZDZu4mheLmZsjrZbtU56/kLBDju5tsFI+DAsM1sXEuNjXxy4WlxJPwAVmjCJcOf/S5DCkCR6qmJiMw== 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=byy9pDnJ/0EYCIr9xEsJC8FrASzrrf2/UQztBxGj/Zg=; b=byE2zK4mIVzu0nMPeca8Pn8KshtSRKNJhXECvNs8lRpRJNbLobRTjzVVfeWLmqPaepb67ST9LLFWlyjdP/EAHaK3751D/ml43UkFx8D4gQ3NwjlD4TI8d16Maw7IvbkG1G/fh55idz2k1dsX7jDUnklP70RLX/Qs5OnLyaaz9wmEq3Z9pM1bqxDpMfEaxsVWTY4oAGsKa0i6YhPbC8he3bvDU/8gf+fCYb6MghufD+z1c5LZyyCilqLhwrhLh5OOf9WL/zKALQW3fxBWCXBnmryqULzyQbFFxpyMTcm6FLiJe59h0k9HTBL07jWcCIPgESfsksPc4KW4NbPTK7kSww== 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=byy9pDnJ/0EYCIr9xEsJC8FrASzrrf2/UQztBxGj/Zg=; b=Cl7EH8Mcd+nXYBzTUcHY3HKsLQixLRjISwbGBCIDscljx/lomSYes+OSCJvf+MIXGP4Q41+3yFgo8gK6OG1Fp1uksRHaqhEGn2dtlgeuW+b0YH4zzSp2tybLsjmpjsnzLwIf/LuC7tvKd4zJW/4u10GbyCpCtsIdoIffC+SMgKak1b1RB6M4YMU1XWZ9I08AitR4MzKc62/cTdbzcibe33iO/esxdkdh1D8KdDw0TsWSY/9VjNzeQ7ssBw2OYTk/vz915XhY1VrRLJgtfJx4lkJBo+HAQlih90ap10nbAQp+7kZJN7caokswX8PkKVR1b04iMlwXGzyQ5Gbm/Btj9g== Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) by PA4PR01MB9452.eurprd01.prod.exchangelabs.com (2603:10a6:102:2af::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.21; Tue, 5 Jul 2022 20:28:46 +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.021; Tue, 5 Jul 2022 20:28:46 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 5 Jul 2022 22:26:50 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [7lfIArPzoyXp/mH0iZW+zXrviZwexQKC] X-ClientProxiedBy: AS9PR06CA0419.eurprd06.prod.outlook.com (2603:10a6:20b:461::15) To DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) X-Microsoft-Original-Message-ID: <20220705202650.797218-7-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5443563f-b2c9-458b-b73d-08da5ec4f5eb X-MS-Exchange-SLBlob-MailProps: gjx25WM8ZNWDLNYE12708/FIJ0L6AOQdoXolL+mCVV546hnZIxjkj+mPipRR3TlCqbon8YmoRUl354w5vYAVG8WWT3WpoDt8Cc5fCfMu4NudmyKQDHgHGQQWUL40nja2jUYNlI9ChziV41qNRfI0qo8shI4RVbVXYeEJD7645bVe3e9dp3KOQB8vp6tOMmSJOsI9r2eH2MEEe5mb6Zv9zbc5Ny1tydy51P3Y9s/ipqa7Xxm1kT5uwpVgD4KXU37k8DtI2wCNENFRKDPlVahgvez9iBqmdHwW7PLPKlCSikp6Dns+c63nyDwMj0hL8cJkM3H/RXAuv6dO56ZyqsRWV/71ks0dR0uv9s7rEIPxVQWdPES9Qt2Y2MoSKvbs4/+Kysnl8osR6YZUgulK9Y4b8AUm3AlnJkBzrhlTuhPm2U3HztcNoU8xLN+3rOHL7q9NZiaQYsPVWU3iRIg8ANiy55d0OD5NVtbUUJsxjhkpUjMAtXui1GM0QPeA26i0gD126T3Efi/2l/tk5u4Yb7nZ+4YXLf00i1oVjG0z1OozgT9U62pNl4XxNaLzOUx7Ab50rtaAm9FT2uHQlH4g28jOR+m5EqOCEBR8GoDJDrx0OJ1VOBbF/dUdV4FtvlitN6hafOY7u6nQFMhqhNRw4lU3qswkLuRSF8hfbbf422rhbkVgY07dUiXkYJwTP+tMgEKD2igzLKzGWt7XBEmMsMiGs0ijpI8ApcApadITd6V6qB4= X-MS-TrafficTypeDiagnostic: PA4PR01MB9452:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: YIAENH3NgQpNrHm8Qoxpyis934P4g2C9Dwhz0dcS+WtbvSchS7JpsfZf1LuibSNz1hMzq9gAImd6RuOExJRT8v/poRgtb4NTDzj1dYmsb7gGEm2vGXEjVC1bLwr2zqvZzkCfshzpUiGLQvazuylouFj7Fe0/DcSrG9EKULhAS9RrL4g8+GX/Aqfc9mp2EM8C3WesyknV1bldIsLDMBHmrxZQ+vC3xE1sS6X96ZYp0oqq9vaiTIzzUXCG8X5q6C67BsF40m+1SJEQ/S3R38w+EtRmiz3iEK+UJt2tIXPI+JUYFNNdqvW7shhpivn3A5zhRtq94X1TnNV2b49jeRIXaH6qOBqhnoPVfq7OmfwAVa6Y25dI3L1mj2cjitxdRKyLWh44VCr3CmblESGJugFFSS214Eq/exlxHZonYTGqRFr2YxqhMjlo9ZIuqQ1r55NRyT4/mQQNPPuFyBK4Zkn8J9aCddxqWbeHkoQswiv1ixHkN/F52b9vBFdaEGl8h53+Pk/yYzjIAxcd00Dwjlz5SSYl+zF31adNHSpK87WOHUv/7LEsT6o7PAe1lPc9W+1rt/yba+vN4U08YIhTQQTTWoNkzQ/3bSRLaXvWL60MUeqt9JpPAttJ2y9l57uPFYuKccaNLFIPUe1wsGBhIQvqnA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: I+pWYPboQoV0ZKYg4EHOJNo1zmZasrQGrKgLwKgZr9ue85to88QmmpmctRgwgcNDRJ3uWRlUHfHh75EXqJuW1ywjIAtBY5fDvzn3LYop6P2WmjcHqmehvc88JJNaA1MRNfEhlIpD1r+cnu018En2Pti+NKB6QxLafm77zM1vfmhGOJ/LEboVZVqMV/78Cg2YZPOQElYtbUMbVF03/H0cor+n8Tev5yFxqZ5YdohymYSdBefDcqwgBrFQjOhZsGzQiB8+oAgVRE7YnNMpjNtfiCM7T0c14P1BWufmdfiFS6rZnF2OFqANqEe7pRCICudEfselVs/zUZzI7AlY1f+rm7lH03pKmsqDEZG3XnGxwORn57A4nxQj3pf5rdqQ7TgvFrqwGILF/IHFLNRMeKrzt+K0K8TMfqBrjW1nvbHJHXSNqWfkiSc985E/iDHs0OgoFR/CxuwQ4QyN6otww2Ck5gCbF0zl4ndNY3ltk2EuVRlbn0+XplKSwc7ImD1pT1cQgZg44YtDSCLVCk3loVrXxAEqrkwqfTHFw2/f2yF44nafiMoXefyri0cmYu+8drPRROebjFvTnaDC8IjQoaNuX7c9M+LY0NK+dnadf8inWwdgp+9CKtdW/k3H2+fni2hjTIhfO8h/6h0nNlKPiIs4JLfgFq6+Fm5oDMKUhS545dwv4RfjLIg+oE+rSOcD8isIUNosaNpCUFQBBAeimB0FUOOuP6HNmgqpI10UfYNCyFl+jvarPoAFbrcVyu8ztP2dCUCnD199x9UivS2Gyt/zBjOLct1aTraDyymOky7mwgfhv7bp4IXE8EyyDIgQ8tWtS9Xhr02kk0L8ZrXBOsTvb7jlbkV5q+Tmqny+pPZJ+zjx+UEGyk6XjTAFHqgSxmpEARYDMLN7Jmnyvg/7lbuo2SCTfPu7n49zH/ze3uvMs+49jObpjFSQBrOfqQ1JtnmLxyZbXnY4MgVDhsVu6yEzBV+VtH0kLtA18twW9YeqW/wl8FvqtBUhx8LYgV18igR0OzUEWp9BHNAOEMSBtvK/d1ZBPT7dFQOV/TusYew0kauh8kYD0WiRZVNQgerhxRvnFIU+ya7ijCPg8/tSHEAZzmFxh3CypboYRonx90PUvFdyWVGyhoVQOUwjBdmWNJpLWcyU+krFU/unnrZKZWtSwH+56OS7IyEK3IN6H/rgYliwiAi0BE1T9YqmJ8yTzd54v+szY1yEH+ftP0T9qHn9/wOjXuzhbNo/DK1tcIG9BJSsKOqCAGguj8ilnGBa02Zr/djPcq6pv4bYByBRHhTWNCr3RQBmNbcJgjtwIM9MnMU= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5443563f-b2c9-458b-b73d-08da5ec4f5eb X-MS-Exchange-CrossTenant-AuthSource: DB6PR0101MB2214.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2022 20:28:46.3261 (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: PA4PR01MB9452 Subject: [FFmpeg-devel] [PATCH 8/8] avutil/fifo: Grow FIFO faster when growing automatically 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: Ls0+MnCIClQS Up until now, when the FIFO is grown automatically, it would be resized by double the amount needed (if possible, i.e. if compatible with the auto-grow limit). This implies that if e.g. the user always writes a single element to the FIFO, the FIFO will be reallocated once for every two writes (presuming no reads happen inbetween). This is potentially quadratic (depending upon the realloc implementation). This commit changes this by using av_fast_realloc_array to realloc the buffer. Its ability to not overallocate beyond a given size allows to honour the user-specified auto-grow limit. Signed-off-by: Andreas Rheinhardt --- libavutil/fifo.c | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/libavutil/fifo.c b/libavutil/fifo.c index 53359a2112..04f4d057ca 100644 --- a/libavutil/fifo.c +++ b/libavutil/fifo.c @@ -96,6 +96,19 @@ size_t av_fifo_can_write(const AVFifo *f) return f->nb_elems - av_fifo_can_read(f); } +static void fifo_readjust_after_growing(AVFifo *f, size_t old_size) +{ + const size_t inc = f->nb_elems - old_size; + // move the data from the end of the ring buffer + // to the end of the newly allocated space + if (f->offset_w <= f->offset_r && !f->is_empty) { + memmove(f->buffer + (f->offset_r + inc) * f->elem_size, + f->buffer + f->offset_r * f->elem_size, + (old_size - f->offset_r) * f->elem_size); + f->offset_r += inc; + } +} + int av_fifo_grow2(AVFifo *f, size_t inc) { uint8_t *tmp; @@ -107,16 +120,8 @@ int av_fifo_grow2(AVFifo *f, size_t inc) if (!tmp) return AVERROR(ENOMEM); f->buffer = tmp; - - // move the data from the end of the ring buffer - // to the end of the newly allocated space - if (f->offset_w <= f->offset_r && !f->is_empty) { - memmove(tmp + (f->offset_r + inc) * f->elem_size, tmp + f->offset_r * f->elem_size, - (f->nb_elems - f->offset_r) * f->elem_size); - f->offset_r += inc; - } - f->nb_elems += inc; + fifo_readjust_after_growing(f, f->nb_elems - inc); return 0; } @@ -133,9 +138,15 @@ static int fifo_check_space(AVFifo *f, size_t to_write) can_grow = f->auto_grow_limit > f->nb_elems ? f->auto_grow_limit - f->nb_elems : 0; if ((f->flags & AV_FIFO_FLAG_AUTO_GROW) && need_grow <= can_grow) { - // allocate a bit more than necessary, if we can - const size_t inc = (need_grow < can_grow / 2 ) ? need_grow * 2 : can_grow; - return av_fifo_grow2(f, inc); + // Use av_fast_realloc_array() to allocate in a fast way + // while respecting the auto_grow_limit + const size_t old_size = f->nb_elems; + int ret = av_fast_realloc_array(&f->buffer, &f->nb_elems, f->nb_elems + need_grow, + f->auto_grow_limit, f->elem_size); + if (ret < 0) + return ret; + fifo_readjust_after_growing(f, old_size); + return 0; } return AVERROR(ENOSPC);