From patchwork Wed Nov 27 12:22:08 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 16453 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id DE097449287 for ; Wed, 27 Nov 2019 14:23:12 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BCA2068B090; Wed, 27 Nov 2019 14:23:12 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f68.google.com (mail-wr1-f68.google.com [209.85.221.68]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1C53368B0BF for ; Wed, 27 Nov 2019 14:23:04 +0200 (EET) Received: by mail-wr1-f68.google.com with SMTP id a15so26441302wrf.9 for ; Wed, 27 Nov 2019 04:23:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=/QwXbPgHu1mjaV/ub4GYMviKE+qVDxjPp9rTKwSZylA=; b=sXRRdhWt3oOExFTODHVRUaLDy+5nxIX0d8mwtII11vQbzfIcJxSLLqNfl0PzTPffzX 7T7BmdWLZOy9dYE/hfZBhIdSbn+YH7XXCybe1GwBVLZfbgJeI/D8JnhPp8mSdikQpWQ/ QLpkPU5JVdhV6LXxkBCNdSHThJIeWQU1J/SeX3uhu+ISSIbBenCiIFuIF5xnuMWVNTdC bOv3ORUL0vHDLiObQ6WJW3xzueenptxRLxCx3z3o13JQ0mNtwYbaGpW0J9Q6dqsjrOJO 3/C1hllLB/dfhUXkaUu2pVTcy44ojgUils54L7HCeogzvae2lWY2s0KpReKLseJuPsR3 dKTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=/QwXbPgHu1mjaV/ub4GYMviKE+qVDxjPp9rTKwSZylA=; b=m9p0t5cgl25ZnXd7UjdCSRgaTQaXG19+SKVozmct9QqVhrG7Lj3hEN1iOv4DqUsqko bPwpMTzwUCJK62OUbeCAjA6EXh2CINfEj771nouwAZXX4QDbgsT/wF+WMPgYGacmeGu0 pZIXPkNj//PGjPE/E3XUYqc6fy3ihKP74Io7qwgvEj4Y+kawPzfN9J9kVXAE5ODFGvdr 39c3fJNZJmscuLQOycyO/KWeMfIEFMm+6JuSmQ+3RCkK6oOCTLDsxYbbJtGO9c3pE6zy xd5Zd8zAQT0dMztl0I/xT8LUvXV1aRAuFAJMqNzBXMBtU3lnlXonptD+qgC0t+B9wpon HQuA== X-Gm-Message-State: APjAAAV7Pad6svacHusiYb7RGGxjC7gRhbravcZYE2+g9y2izLgiKCz2 wljV6CilCoKy8bGEzVrsWiTB/SNJ X-Google-Smtp-Source: APXvYqwXSlha1US2wXOUIeTEVHUNcfg6KReJ//GbS5xMLBQabSEs3f/y1Fa7x8X7hkwpQIowhbVBSQ== X-Received: by 2002:adf:b19a:: with SMTP id q26mr28285117wra.79.1574857383398; Wed, 27 Nov 2019 04:23:03 -0800 (PST) Received: from sblaptop.fritz.box (ipbcc08e23.dynamic.kabel-deutschland.de. [188.192.142.35]) by smtp.gmail.com with ESMTPSA id r2sm6905614wma.44.2019.11.27.04.23.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Nov 2019 04:23:02 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 27 Nov 2019 13:22:08 +0100 Message-Id: <20191127122211.6352-4-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20191127122211.6352-1-andreas.rheinhardt@gmail.com> References: <20191127122211.6352-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/7] avformat/avc: Avoid allocation for small SPS/PPS arrays X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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" By using avio_get_dyn_buf() + ffio_free_dyn_buf() instead of avio_close_dyn_buf() + av_free() one can avoid an allocation + copy for small extradata. Furthermore, it simplifies freeing. Signed-off-by: Andreas Rheinhardt --- libavformat/avc.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/libavformat/avc.c b/libavformat/avc.c index a041e84357..7f9d81825b 100644 --- a/libavformat/avc.c +++ b/libavformat/avc.c @@ -25,6 +25,7 @@ #include "avformat.h" #include "avio.h" #include "avc.h" +#include "avio_internal.h" static const uint8_t *ff_avc_find_startcode_internal(const uint8_t *p, const uint8_t *end) { @@ -109,7 +110,7 @@ int ff_isom_write_avcc(AVIOContext *pb, const uint8_t *data, int len) { AVIOContext *sps_pb = NULL, *pps_pb = NULL; uint8_t *buf = NULL, *end, *start = NULL; - uint8_t *sps = NULL, *pps = NULL; + uint8_t *sps, *pps; uint32_t sps_size = 0, pps_size = 0; int ret, nb_sps = 0, nb_pps = 0; @@ -164,8 +165,8 @@ int ff_isom_write_avcc(AVIOContext *pb, const uint8_t *data, int len) buf += size; } - sps_size = avio_close_dyn_buf(sps_pb, &sps); - pps_size = avio_close_dyn_buf(pps_pb, &pps); + sps_size = avio_get_dyn_buf(sps_pb, &sps); + pps_size = avio_get_dyn_buf(pps_pb, &pps); if (sps_size < 6 || !pps_size) { ret = AVERROR_INVALIDDATA; @@ -184,12 +185,8 @@ int ff_isom_write_avcc(AVIOContext *pb, const uint8_t *data, int len) avio_write(pb, pps, pps_size); fail: - if (!sps) - avio_close_dyn_buf(sps_pb, &sps); - if (!pps) - avio_close_dyn_buf(pps_pb, &pps); - av_free(sps); - av_free(pps); + ffio_free_dyn_buf(&sps_pb); + ffio_free_dyn_buf(&pps_pb); av_free(start); return ret;