From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 4EB66426D9 for ; Tue, 22 Mar 2022 16:55:59 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 860F168B10B; Tue, 22 Mar 2022 18:55:56 +0200 (EET) Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2093.outbound.protection.outlook.com [40.92.91.93]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5CE9368003D for ; Tue, 22 Mar 2022 18:55:50 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nslShDz4Lwn3pRUOXPMAxN20Mab8Q/fE67KRKi6pyGQFUAXJxNqV3Qlj0moP95pul0tX7/Q4xMspEtIgszFoMqwa0h4upyztNBx5vyBWvO/Fsh1/nvGJg5hAm1rSN9XzNoBi/23FF0FkBQNGMNoGDL6MxT4ILQcTaf3icUQO8SDxrn3oCkYSpkmTMc5mK6XJvmsi5oJoJ7dvBGKj+G09gxt2I5pOyMDEafdBUTm/NQFytWN6VZt/naDm7bg5QlvtWXOxSzRvXa9ksLdyp8R5PPUyLUa5O1oV5NuZkBUxr4fCU8GdrOk4gUiT04SWBgprBefJjEI9euKIDb/JyxIM8A== 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=uENLKJz/8A629jgYRjMddUsfFOiYiqD2qRApSpk30Ns=; b=fOAZRjMj0x6fWKpQ0t9nJkToyZp5XwMS6vfpq9oJMZ65+ET6ajIsoPzwzXdGqT5o5H4fEyDe/pXTW7KZSNrBV17oUeBOUBU1+Gsksi918baWKrTaLnin+sdkv8+wyl1jtNQZqQO4yEsNTU2jgSvLnjnqgS2EAbteoQL3lRMbpz+4bxpbd8/BPzUcM4Ez6uem9LBvapEJ5w2GGm9laP0BUialeOu5IpjBObCEF98ENgyraLT31VnGMLiorNPj7WtAEzCYOuaoUTVQ1SNx/GUkWnA9v3gu0+U3uaD4NQIEBBSHa5g2g36vmIn4q1w4SXszojjroPDok+X9SCEZ21Vkng== 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=uENLKJz/8A629jgYRjMddUsfFOiYiqD2qRApSpk30Ns=; b=Hw9Hlt+qFv0jJoEnTtoA8kPhVz5WrhNjTqvxoOVh6tK77jukIfAzZCVhPf5TZIV6evy9u33Xh8OMqYIuOMX7NXrKRsg7M6J7Ps9Fr5guINTDs9QMHh7rWR1gV2RERIcTVmZkmZJlaUBuuURUbZ4EB3D7sKhjDYrR5wSMc1LD4bLSGrh8GmWt6WBnTGhU831vKkPjOMQbbPoe4QYlOQP/TSR1J/SAu/P6cxFOzHzb7HveegzIjqskMRkDQ7aud2ckL3LWOHhWmMhOdqtNSO0Jea6JryNyTOVPT40E+i/lF1M0bWnHsJbzBLeygIddAtfaEbyhDbn3i6yZLjNvtG2faQ== Received: from AS1PR01MB9564.eurprd01.prod.exchangelabs.com (2603:10a6:20b:4d1::16) by AM6PR01MB4850.eurprd01.prod.exchangelabs.com (2603:10a6:20b:31::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5081.18; Tue, 22 Mar 2022 16:55:49 +0000 Received: from AS1PR01MB9564.eurprd01.prod.exchangelabs.com ([fe80::9070:a5fd:e532:bdf8]) by AS1PR01MB9564.eurprd01.prod.exchangelabs.com ([fe80::9070:a5fd:e532:bdf8%3]) with mapi id 15.20.5081.022; Tue, 22 Mar 2022 16:55:49 +0000 Message-ID: Date: Tue, 22 Mar 2022 17:55:47 +0100 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20220322163911.64772-1-nicolas.gaullier@cji.paris> From: Andreas Rheinhardt In-Reply-To: <20220322163911.64772-1-nicolas.gaullier@cji.paris> X-TMN: [NBDFx2+Q7lOvGjrW8/dh/g8DoK6pKReT] X-ClientProxiedBy: AM6P195CA0020.EURP195.PROD.OUTLOOK.COM (2603:10a6:209:81::33) To AS1PR01MB9564.eurprd01.prod.exchangelabs.com (2603:10a6:20b:4d1::16) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f84ccdf2-5e4a-44cf-245c-08da0c24d0cc X-MS-TrafficTypeDiagnostic: AM6PR01MB4850:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 6kBlHT+ngp10yTKRw5QC6igya+deCxlkKR1KVrbrM+5AdIkA6r8ua4VgbFXCsYLH7DVsYqqCihHaYYpjffaAYO4+zx/AUIhwUxiTFWGIKXX/CgfOgp91q3A3PRQk0M4jGHoylnjARlV5DPIK0qv1N0xQh42lopZ9gMm7DKbe749wdshtupjrvKooxRcjIjpjiBEg9FNyDJOIZyhANH58hckxdn9fJYqvWRQQX1Oc8WHpNz8ahqT2m0rnecsVFeOUhrKGu0L94nHmR4XuotHPAm18PQ7tB3ChOIZJb+yGikyK8b6ib2UjVr3dWO7oA/70li/7D3mTdzH1NHxUqpfJtVP4n8UpbS3M14lzOxAdTaYilJp7d7+EQg60XdnC4TfQZD6dl6GduZIeUYbzGgdsxs4Z/CPaPeiGseDaf2eVGtwYf40PMTght94KrwbWMlmYXYZL6lYSA+ldaf1j5RhTVGSxcesRgwwOzfr3yz+ceJ0gSy/dIdgkK90M/+fbu8mg1+6K1LyABj2HR9q4UOjVNl5NjL7FaPqsgIfMU9024Kzq1Q849v5RVsIkYYq1DwiB4//38mwatyo/qbkrsNoYVA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?YmpvbWJpN1V6elpvZDNNdXBlZXZxMmlhN3dJQmp1dE5WLzBDZzI0OEpIU2Uw?= =?utf-8?B?MEszelliQklwMEkveUpCSm9pUTZKN3IxMGFUUjl4bU1lV3BtcjFtM0RXaFVF?= =?utf-8?B?bWVzUHZndjBkRU8zaE9OaTNlVERobmtkSEEyQTIrQk5PblIyOXRFZjNRbHdP?= =?utf-8?B?TTNQY0JPQnBCbVR5a0pMWDg0R3VYdFIyUStsQlMwZFl1R1cyQVJ6VGNwc1No?= =?utf-8?B?eHUxaFhqSDdRUGlWOXUweUg4MUxDYjF6UkNreGd1WkovWkRmTm91Y2xjckNp?= =?utf-8?B?RFl1ZDZ6bVlYWnpPNDNuYnZxQjBzNVI0bWdJSHNsbXhzcGJFdll5VEZvS2g3?= =?utf-8?B?L2RML1NaZnl1a2s3K2kxdk5YMDJyRno0THRiMkVkcDZ3U21OZksyUm1aQUpy?= =?utf-8?B?NnBQRWoyYmthZ1Z5OUo0VUx4VlRNeXF2ZlJZRUFRbW1MY2JscUFsU0pmVUdr?= =?utf-8?B?elVrSjcvNFp3RER6b0JOZVNkbWs3eG5YTTA4b3VnVDM4MjhDZFY3RGxXZEtZ?= =?utf-8?B?R01Ka1pVdWJRUWFUNC9aUVBWcFV5QTVFMFh5MGZsRmZKeUFHYmlHREdHVVda?= =?utf-8?B?QUdBWEdGNEJ5bkx4OW94WjZ6UmZmZ3FBaXd4NlJnVXVweWxLNzlkRU43YU0z?= =?utf-8?B?Q3l0MTV3RUUyNC96U1EyVU9rVWVWa284SGVTTEJobXBjV2NjZWVRTFVSbURs?= =?utf-8?B?QkdQTUY1NHl5UWtucm4zVVpDekZldHVKQ0M5OGdoUFlVeHlubkxnVVkxbUtK?= =?utf-8?B?UHNoeG5NWkFPWWp5Q3BXNjQ1U2R3ZituVFhpY1p3Qk1RWjNmM2t4aldwZVhS?= =?utf-8?B?c3lLWGVxeW5jdHl3cStkcFhDVTV4NHhRSWNIV1MxcVJZSDdhSEJpZTZCc3JR?= =?utf-8?B?QXc5dFBleEdiUTBrRS9qV1RTcGwrS2Z6TWJXMi91djNWSUZUSHU3U0lZUzFQ?= =?utf-8?B?VWZ4MWtMZS9DUlRHb21IM1h4OWpvSFdNblZqZEUyaEVNcldmdXVrTTV2Y2Fw?= =?utf-8?B?dEhmYURaVWhjbnM1Sm4wZDdoaERPR2Z5WmZtTnNGK2x2Q0NoMy9rR2dMSHRY?= =?utf-8?B?cEhOZzhBdHJRbW5rYkFtS1dESmNUL0toSm5sSnJMMzFGZ00rYUNiemRpdEZ6?= =?utf-8?B?WEszeHJoQ3ZRLzFhK0Z1OG1Jbk9FTDhnMEZFMWN0SVRpZFJzVkc1emZNcFl0?= =?utf-8?B?aGJLTlJZR20vTTBwc3Y4R0FWOXVYSFU2c2RkMndhZHd1RG9sQ1NveUxJSlJV?= =?utf-8?B?OEpNOVZDV2tlVEJFOGhKUE8zMjVOWmxHYkNXUWFmbCtQeEg3Qkljd1g2V0tR?= =?utf-8?B?STlNRnFPWmtPMnpmMnJ3c3JRdERPQUhPV1kxOXo1ZGVQTDBRL1c4WXRKODR1?= =?utf-8?B?WEtxVFl0QzBodjF1T1VwMXA0QWVOSytsYW85SXVmNjlUM1lnRUdPUGFuWnJ3?= =?utf-8?B?ZzZCRkgxSnhRbEpTQk5icWZ5cDBGeEpHdUQ2aHdNNmxVaEcxdFF1ejdCZjBw?= =?utf-8?B?Vm5aRUx2QWJzM3RJVGxldVQ2MHdkL3ByOFZTK2tsVm1hQmxPcWt4eGNDei83?= =?utf-8?Q?X4VBJ6Jvp0q9nJ2L6wDtukess=3D?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f84ccdf2-5e4a-44cf-245c-08da0c24d0cc X-MS-Exchange-CrossTenant-AuthSource: AS1PR01MB9564.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Mar 2022 16:55:49.1022 (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: AM6PR01MB4850 Subject: Re: [FFmpeg-devel] [PATCH v3 1/2] lavf/mpegenc: fix ever-growing fifo size since the new API X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: Nicolas Gaullier: > The older av_fifo_realloc2 implemented an auto grow that > should be ported as such in the new API. > > This patch introduces a limitation in the fifo buffer size. > The default is set to 128MB and may be overriden by a new user option. > The amount of memory allocated depends on multiple factors, including > the number of audio streams. > A worst case scenario is where an out-of-spec high video bitrate is > combined with numerous low bitrate audios. > > Fix regressing since ea511196a6c85eb433e10cdbecb0b2c722faf20d > > Signed-off-by: Nicolas Gaullier > --- > libavformat/mpegenc.c | 11 +++++------ > 1 file changed, 5 insertions(+), 6 deletions(-) > > diff --git a/libavformat/mpegenc.c b/libavformat/mpegenc.c > index cc47a43288..5d755e3bdd 100644 > --- a/libavformat/mpegenc.c > +++ b/libavformat/mpegenc.c > @@ -84,6 +84,7 @@ typedef struct MpegMuxContext { > int64_t vcd_padding_bytes_written; > > int preload; > + uint32_t fifo_size_limit; > } MpegMuxContext; > > extern const AVOutputFormat ff_mpeg1vcd_muxer; > @@ -461,9 +462,10 @@ static av_cold int mpeg_mux_init(AVFormatContext *ctx) > av_get_media_type_string(st->codecpar->codec_type), i); > return AVERROR(EINVAL); > } > - stream->fifo = av_fifo_alloc2(16, 1, 0); > + stream->fifo = av_fifo_alloc2(16, 1, AV_FIFO_FLAG_AUTO_GROW); > if (!stream->fifo) > return AVERROR(ENOMEM); > + av_fifo_auto_grow_limit(stream->fifo, s->fifo_size_limit); > } > bitrate = 0; > audio_bitrate = 0; > @@ -1151,7 +1153,7 @@ static int mpeg_mux_write_packet(AVFormatContext *ctx, AVPacket *pkt) > StreamInfo *stream = st->priv_data; > int64_t pts, dts; > PacketDesc *pkt_desc; > - int preload, ret; > + int preload; > const int is_iframe = st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && > (pkt->flags & AV_PKT_FLAG_KEY); > > @@ -1207,10 +1209,6 @@ static int mpeg_mux_write_packet(AVFormatContext *ctx, AVPacket *pkt) > pkt_desc->unwritten_size = > pkt_desc->size = size; > > - ret = av_fifo_grow2(stream->fifo, size); > - if (ret < 0) > - return ret; > - > if (s->is_dvd) { > // min VOBU length 0.4 seconds (mpucoder) > if (is_iframe && > @@ -1277,6 +1275,7 @@ static void mpeg_mux_deinit(AVFormatContext *ctx) > static const AVOption options[] = { > { "muxrate", NULL, OFFSET(user_mux_rate), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, ((1<<22) - 1) * (8 * 50), E }, > { "preload", "Initial demux-decode delay in microseconds.", OFFSET(preload), AV_OPT_TYPE_INT, { .i64 = 500000 }, 0, INT_MAX, E }, > + { "fifo_size_limit", "Maximum allowed memory for buffering an input stream in bytes", OFFSET(fifo_size_limit), AV_OPT_TYPE_INT, {.i64 = 128 * 1024 * 1024 }, 0, UINT_MAX, E}, > { NULL }, > }; > 1. Options of type AV_OPT_TYPE_INT need to have a target of type int. 2. Setting UINT_MAX as maximum for such an option is nonsense; INT_MAX is the maximum for it. (FFMIN(INT_MAX, SIZE_MAX) would be even better.) 3. Allowing zero for fifo_size_limit makes no sense, as the above code allocates 16 when allocating the FIFO. 4. After removing av_fifo_grow2() it is no longer assured that av_fifo_write() succeeds; it therefore needs to be checked. - Andreas _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".