From patchwork Wed Aug 4 16:21:40 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 29245 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:6c0f:0:0:0:0:0 with SMTP id a15csp3518428ioh; Wed, 4 Aug 2021 09:22:06 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz5G+AOQH3O4TIJM3anrNdMpn0HSS76EKa5ju6uELc87RmDwnvO8QRbfwY4L6FUGBj2U77j X-Received: by 2002:a17:906:5d06:: with SMTP id g6mr79491ejt.96.1628094125858; Wed, 04 Aug 2021 09:22: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 bl4si3088687ejb.689.2021.08.04.09.22.05; Wed, 04 Aug 2021 09:22: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=TWil28mV; 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 5FE83689F08; Wed, 4 Aug 2021 19:22:02 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-oln040092064029.outbound.protection.outlook.com [40.92.64.29]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5F95B68803D for ; Wed, 4 Aug 2021 19:21:55 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jkzlPIX3/rJyHtQwZp6h8xyJxSuBBVhdNxNeX23ayf4FIMvVnHqfwknrSz9yPeNqz54fVSM5Qfw9wAi3BI2USdGg/MhAvftTxBoaKy2KT9MUBoJKjK4gM+n7ECJx5A22zYSdjBOSxj791cXhgBTh5kVdZkgpRpxVwlyo5sqMS3RVKwV6x3pG6uTFKdoXx5iRzVJLDQyW9MMpfjrONZP4fXF1xA5HQyjYpfl6OQUi4+JFIFIANBsK4LwIiQzG+MeIiU3X91uMf28R3BF739H7b/M31JtI12avrK2PQJaYH13pFhsOZFr+AwOFXE0GXOELMuuNX70hDW7EZj6y+KKQOQ== 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-SenderADCheck; bh=8YnoceOtU6Iwjw+m/UoRxuIAKHJv7NvysbxkCxaDiPw=; b=XsZBv+Bvfg9sDMJ7t8WdGiiFydmOxa+k77s+rAAjxg38RBpuJMzrcNXAWVnDTi0BdlFl7czWaKh6noCVrE0dW4lLtLNSSedfmU2T4nJy8AKgNZQSLSbOpQFeHvX7vl640u5dYCkP8vdy6QSiYQuNDfLn1qScWnjvYCpg9MZPQin5db7jfAv0eUzLUWWQgfFtY5N43obTU8FqPYhz3+IZNC83WZ+49tO+sr5j3PfXIMYLLlTo3WlPyRNVh8bu+/S7/6ZLAxrlN4TapXeEWTLLr228WkabgiZcrL8m9X53D8f3lqwcpWvJAkDTyoJLxwgPoTIfotNm5jTR6jZ5AQPFXg== 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=8YnoceOtU6Iwjw+m/UoRxuIAKHJv7NvysbxkCxaDiPw=; b=TWil28mVKtDJT28BouUW/Z7VsV3NttfW0CKXGld0BE8DTps59wAo4B19TZ6GFxRWwz3GajN4S3fV+LvLphNPKJj9GkpPbApG/SQyDp7R/OgvKZU/1CSZPC4B7wD0+B1BB7gduI8rvtg/XsRvX0QxS4R5Tl+GHN1r7ATaGqdHUIE61rUySdgdKmoePv5HIW7m5J7buQgIP3XSd0ChEmwXww33F4oMgICvSBDKm4UjzyREBg4kmKMOkwv3c7msKtorkLTIC6w4ykn5pBcx+Ru9nJdLKoUBQkpDPDOGbCuiLl5C6PIV8ELGRXeO6VsH4tDfw6hyr0dXRu0MtA76ix1T1A== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM6PR03MB3685.eurprd03.prod.outlook.com (2603:10a6:209:33::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.25; Wed, 4 Aug 2021 16:21:53 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::c9b2:14f8:d555:6f2d]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::c9b2:14f8:d555:6f2d%8]) with mapi id 15.20.4373.026; Wed, 4 Aug 2021 16:21:53 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 4 Aug 2021 18:21:40 +0200 Message-ID: X-Mailer: git-send-email 2.30.2 X-TMN: [gSAF6Oj3cPIgOUG6LWmGIm3P2njMsQy5] X-ClientProxiedBy: AM4PR0902CA0018.eurprd09.prod.outlook.com (2603:10a6:200:9b::28) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20210804162143.1793548-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from sblaptop.fritz.box (188.192.94.230) by AM4PR0902CA0018.eurprd09.prod.outlook.com (2603:10a6:200:9b::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4394.16 via Frontend Transport; Wed, 4 Aug 2021 16:21:53 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: af864a8a-02ce-46c9-192d-08d95763f8c4 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiTzvpWxvWYRCo7PDdVAH5Xew+TczdMvwJ32M7MMQDxD+4bRqz/XfErGT2S3buo4Zwt9S7sbAh3Sg3RCHMyEKxQ5S7+o04Nl3X2jyyjd4f1yFrIlznNEKB/7b18AFl6De/2pv5LuPVEpECtU28X0/f1e+A4iLh0XsaAXD6KRROi9Wmg4gsuGG8siJcSD2EJSz/B++VaMW99OdWYHgwLI6Frt2aUCmklDsjBzSy7DzftRYxBUo9RSeeonwNO0bI1TSPxhK8u4Juh+rSGhZhstxAYvPJj022lLL6ddw8hRNwtPv4ZaduHk1v3qBWTAUF2KdY3i9OX90pxj7Lk5T1IIaE1XH36TItW536XU2fJ2QegqBtYHQFqZa+irysgLMrgSqm5ZqlibpA7QMIg8Enj8S09tsB1TsLoFL6kljpcIOo7J2NVauC28Dq7FOtSbfZNuPqUR73AyYifJ3fea8o+nLv2u8ztreCtNrOj+W8orUgXiJL/mwLV2+Q1kD9Ag7rb5JuP3Nb0zznCIX+oxuot5D56LBmfg7kfkgTy6NgaBBemJ8qEa3YFmqUg6WEtk1POSpwTqyKFIDEfWdCJ1O/ADnQmhE4umA1R/y8fLHMFXgBxe9cOeF/A/4tj+OG5sqrSmlXOy0rvAb37k5iM2kOTP+fP3hyAVWh6znn6ffNT3BSKduY0eTJSyrxDkwnMFdDNrTndjHt8oS7BRzeJuFDzbTCG0A9THGFgfjTKpoWwa0xJIS5PQ7xEbrwCH6irJ10K+sHc= X-MS-TrafficTypeDiagnostic: AM6PR03MB3685: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: jWGbs6NQDeMICG5/08VTdRM9WkU/wh28z7NAEIKA+eXClQls2J85N59TQLoKxsa+Jsi0AZP76pi4AlKauMWiYDYPPCVczFKSt6u032JdpR0h6IWBusNivE4B8e6D3xOtuvpWjcw7cKNJZ13MZ/LJclr+CnnOh0+A4Z8hb+rsM4ixZGDBQQgG65Bi1N0yvDNEQGqjWDd+wGlD3IrnlbncJcE4ScE8nTLmti8DSiHoCIZTCXfOzM6N5dtQH+6opsnwFT9Y8sNIUwM2ns0pysUJYToWlR7HtiE4OWI5P+0GaDv80Wf/WdBvm8jn0NFJ/1nOhjH5plVRgzqYIpj/vp8rJsg60KsGgRx4fs41cfnglLSSFdUHO7okj46si6rSOR/yjUDuttgh/gLzZWIeCDyGSC1m+DTQr+Qi6wqYfpmxZ1dvu2IKlAUtxlPUG4Z/52kr X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: yf4C27Wld283ChxIwndO+xh/VutYVQacTsNMv4Pa5Y6RaugT0H+wwSewMO3EIzRuWbDTlOs6IAwGRk5s98UoWIZxBecbSM+R4ttHlMaC8/f6uOLD8ocKBAssfmwSFAOJg+9No01EOUoyvk5rLKpMQg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: af864a8a-02ce-46c9-192d-08d95763f8c4 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Aug 2021 16:21:53.8616 (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: AM6PR03MB3685 Subject: [FFmpeg-devel] [PATCH 1/4] avformat/aviobuf: Avoid allocation when using dynamic buffer 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: EEAIffYh+g9y This can be achieved by allocating the AVIOContext and the dynamic buffer's opaque and internal write buffer together. Signed-off-by: Andreas Rheinhardt --- libavformat/aviobuf.c | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/libavformat/aviobuf.c b/libavformat/aviobuf.c index 66fddf1433..e92b3dc610 100644 --- a/libavformat/aviobuf.c +++ b/libavformat/aviobuf.c @@ -1339,22 +1339,21 @@ static int64_t dyn_buf_seek(void *opaque, int64_t offset, int whence) static int url_open_dyn_buf_internal(AVIOContext **s, int max_packet_size) { + struct { AVIOContext pb; DynBuffer d; } *ret; DynBuffer *d; unsigned io_buffer_size = max_packet_size ? max_packet_size : 1024; - if (sizeof(DynBuffer) + io_buffer_size < io_buffer_size) + if (sizeof(*ret) + io_buffer_size < io_buffer_size) return AVERROR(ERANGE); - d = av_mallocz(sizeof(DynBuffer) + io_buffer_size); - if (!d) + ret = av_mallocz(sizeof(*ret) + io_buffer_size); + if (!ret) return AVERROR(ENOMEM); + d = &ret->d; d->io_buffer_size = io_buffer_size; - *s = avio_alloc_context(d->io_buffer, d->io_buffer_size, 1, d, NULL, - max_packet_size ? dyn_packet_buf_write : dyn_buf_write, - max_packet_size ? NULL : dyn_buf_seek); - if(!*s) { - av_free(d); - return AVERROR(ENOMEM); - } + ffio_init_context(&ret->pb, d->io_buffer, d->io_buffer_size, 1, d, NULL, + max_packet_size ? dyn_packet_buf_write : dyn_buf_write, + max_packet_size ? NULL : dyn_buf_seek); + *s = &ret->pb; (*s)->max_packet_size = max_packet_size; return 0; } @@ -1427,7 +1426,6 @@ int avio_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer) d = s->opaque; *pbuffer = d->buffer; size = d->size; - av_free(d); avio_context_free(&s); @@ -1443,7 +1441,6 @@ void ffio_free_dyn_buf(AVIOContext **s) d = (*s)->opaque; av_free(d->buffer); - av_free(d); avio_context_free(s); } @@ -1475,7 +1472,6 @@ int ffio_close_null_buf(AVIOContext *s) avio_flush(s); size = d->size; - av_free(d); avio_context_free(&s);