From patchwork Thu Aug 5 05:42:41 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 29259 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:6c0f:0:0:0:0:0 with SMTP id a15csp97118ioh; Wed, 4 Aug 2021 22:43:54 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxlgQl7SWEnxL8joeEVfa4AP5bJoxNP2J29zH2MhrN+AC670WpAZ8kxbvbpQkbcniK0FoGI X-Received: by 2002:a17:906:94cd:: with SMTP id d13mr3157356ejy.158.1628142234085; Wed, 04 Aug 2021 22:43:54 -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 h14si4313069ejt.392.2021.08.04.22.43.52; Wed, 04 Aug 2021 22:43:54 -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=H3iTxMVb; 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 1FD2568A1BB; Thu, 5 Aug 2021 08:43:19 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-oln040092074106.outbound.protection.outlook.com [40.92.74.106]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 221A468A21C for ; Thu, 5 Aug 2021 08:43:17 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ePmWgAulAPn2wJQktYrDrVggGjfXU6SzIIEJJFKuWW6G0OIiAzBW29pCm029ll0IwGeJ/9AJOQ0gIHdcxmX61OIt7ljCblbd9cQFCaOsEo2VRHRIr3ud/ad++NO1bP//YFsY6USR02WBoteXnhGhJB8+fB3TC0XfSo7PjPsU6g7HT5vs3wXbHoIOnLAbB0viqi7dOOqLy1OqAkOWaOOHgywbz7neeCtGq3pQQcLqtrTrR5ygykhiYrIGaOedzfyPwC3Fdr3dxQ4hCTDAYzjnhZXO43rRuF5mFT2QQKvmUYxzHRwmGHD2sj6EayhmYGFALlErRIxvw3KyShgWx9bktg== 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=YT4MeeWxVJVP7FXAdGiQtcF8+XnG2x20Z2V9UalP9Uw=; b=Hv/yUUa+W17i6QcDEwIRKw1Mytl31WATQ5r7sFmWVe3yR3DIwW2fntgzNFVz9RgSJVtenqaX+DdXFWH38MG83VYaIqUCvbCQZqWKQ4upQ/uWlMgWaPuhRar5cS3zyLhD3f2gkcOn+gpBYqrgBIJqLG8az1iKZ9hXD7X4akxEWdcBgj8GGBq3xJJK3VDxKATInayu5x34/ddK1b6u3Wgx2+j6lpAKDEaTLokcqtPAn2Amv6y9mxHm3ed4iID0GJ8Jy+4fHWTtA9HoiMZdybpZ1ycLqTqlsHrya9EGQXJE/pwRdBMzK00nwX6gdzB56mmQ/dbNCdVPOn5+0DsUOx5ODg== 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=YT4MeeWxVJVP7FXAdGiQtcF8+XnG2x20Z2V9UalP9Uw=; b=H3iTxMVbhoaGAtUHBd3feu29MmheVgA6VVEmPOIAjrOQ4ZVUachkCEli7m/l2iikG+7WnsqSqzus5JYDFG/asy3r1pO3iWz4mhxCQprRjGwPUZtw+7KaXrFbsFOPr8pCkhwAkFRYXWA+X1lNttjz4tUgrZ/uNQarGSkCmsYgVroGeRodgBKfyp5lRBHkEqQ0EVVj1Rzk47NsKswsCKQFP+b3/0vdFhuJLqy2j3t3tPxvVSbo4M8zVjmPKEtXMl4sI3+KgjS5lO+IAlGFM3hA21qj0DIwy4uzv+t1xJ0h0ax/ewYEMNERcXjAhPJibwlUCiWjt93GhQKnNHMCqmzYrw== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AS8PR03MB6888.eurprd03.prod.outlook.com (2603:10a6:20b:294::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.18; Thu, 5 Aug 2021 05:43:16 +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; Thu, 5 Aug 2021 05:43:16 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Thu, 5 Aug 2021 07:42:41 +0200 Message-ID: X-Mailer: git-send-email 2.30.2 In-Reply-To: References: X-TMN: [8G3hRmLPdWAKdSuBQtzJwYujGrffAtmT] X-ClientProxiedBy: AM0PR01CA0164.eurprd01.prod.exchangelabs.com (2603:10a6:208:aa::33) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20210805054244.2094251-5-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from sblaptop.fritz.box (188.192.94.230) by AM0PR01CA0164.eurprd01.prod.exchangelabs.com (2603:10a6:208:aa::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4394.16 via Frontend Transport; Thu, 5 Aug 2021 05:43:16 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1827076b-f4e2-44a8-8937-08d957d3ec4d X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiTzvpWxvWYRCiBlmWjUmirgXAI032YyguFEAtWipCIawfa3fixa1rP/mTFP9RrRXkXdVwYP+gKcFluLAOOYfhaBXucA0sx7D2/GtLZ/Gh+cDvAKGkqKFv8jcc7+AYRuD7EVVW/vYZDXqqeMZGfdHcQ6yvdgi+9SnxAuNCXmE/jqQ4BpU8IrtMOptAViEJuR7uAEjMN5ZVWPu0CYfi9apY0u31tzgKBQOEjmPZUoKF8pjTms8CfQCgAgeU4jxLWqv7+dpJ5o4jo7izPBZMBHC9oYzR/3C0C7cjglH/woEJLTxYgdwuHYj2LkrY6YmOR34z+skPAMi1iz8EwDN8pyzCxwy+Lbzs9RwzFJMlOlZSiwgoFGxTwFqRBV3KCjA+s3mFwkD8SjSKDb48F4jplUQR813e1CV6FzI/tCermIVG8a1U4nD1+knQzexUjueRsMl9t98EcROIfN2sRWbfN5zg5lJdcSWSXWdKWnQUZJMH/MppSbZCJmTIMbLqoE9xfu1UX+i1exl19ZgySFUZJ6ox51TaoRCludQKeCGlddZFX899mHbrGYDSKLy8T0iZ92JupgFsZ83TRhrCEeBHY/BFTS60IsnLYqdHWMXiZ2sYudmhWnwdA7DKNXD/vG9d2mliUZ2sk38fhjr1C6aubs1PhOGK/d6h/WsQA3WAMlwPmgHud8N5jUoCsY2lm7SVcDw4pQFNlVip1KBZbB7u7VG52+JszTs7k3OupxShglx9upfJYziwHhKsML4lxmnl5pRkE= X-MS-TrafficTypeDiagnostic: AS8PR03MB6888: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: F7zWApXKTawukaTLfZxoJf1rnxcX/SxRz4PmlmXRkH5NxN2c1krfeFxVaHYIa9lmxrnlRC+SQZSzVWhU7sQYkgdAX4iws+vl2yzNV7QefiZaFS+KYpLp2qBsoKgKUaEFLV90JEQ2bn3tXB7jB8OtzSKlfHMey9mR4Ps36d74WUyaFWlKU6abW24sdmi17t6ZELx5RpS/Ro/xPLXngHtpZLPHef/ckKOJhv0AEY9V03loBkNSV79twP5445s+7XAz7nT0rBF6xsZo5TOr9qsYQnxGXc2FEMGrzeNXRNHFKqLL3YNP8hd9i5ymWLP4ui9slRym9I/lhwrrhi+5wlA4Z4oiQNVOoJjxobjlumJv/MVgeoUeS2vLCgGkhmb9W6zs8luAjSXVdEmzdy/D5LdR/fjAotwOpU4or1fvriVnUPdw9+gqlBTQ70/WhyJZ/iU8 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: spAr2HPk8B9ZOx53z+7jRa/9QO9uLwFPUtxcp1ERK8G33t4Mrmk1yWgL22Lp5LPGAp/Vu5akvBU4daf8uSiOIu7uM0IsXO3rsLZxn2lwusJy06Dd6mTa+RrnnTlNNxmEnDKj4Gog+SIOv0h/GVUHhA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1827076b-f4e2-44a8-8937-08d957d3ec4d X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Aug 2021 05:43:16.5907 (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: AS8PR03MB6888 Subject: [FFmpeg-devel] [PATCH 6/9] 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: zvdj70iDRnoS 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 f04e15f4f1..a883a75380 100644 --- a/libavformat/aviobuf.c +++ b/libavformat/aviobuf.c @@ -1377,22 +1377,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 { FFIOContext 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.public; (*s)->max_packet_size = max_packet_size; return 0; } @@ -1465,7 +1464,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); @@ -1481,7 +1479,6 @@ void ffio_free_dyn_buf(AVIOContext **s) d = (*s)->opaque; av_free(d->buffer); - av_free(d); avio_context_free(s); } @@ -1513,7 +1510,6 @@ int ffio_close_null_buf(AVIOContext *s) avio_flush(s); size = d->size; - av_free(d); avio_context_free(&s);