From patchwork Sat Mar 10 23:00:45 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 7898 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.1.70 with SMTP id c67csp95807jad; Sat, 10 Mar 2018 15:01:10 -0800 (PST) X-Google-Smtp-Source: AG47ELtzXdurCN3gmgzYMgR8fu9nooPG6hsMbhkPZDp/38CpagBRVXEpIoLvEL1Sf50fsN4+8gbh X-Received: by 10.28.65.213 with SMTP id o204mr2162126wma.97.1520722870261; Sat, 10 Mar 2018 15:01:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1520722870; cv=none; d=google.com; s=arc-20160816; b=HfBd+RpTeiU2o2E2eEfNIN/P6GaZBUwI1WpDUdnRyJHx6w8tV/E4Zq8p6fQyy3NNQn kkYCcF4PkxqtI8wy5FbrVEVvM9pRWiwK90rP50QLjNEBOnojnFDWUPEz6I1svdCPHex2 O11kxo6A6NVPkI3aHppkyl1gHKTaVkaGVQnqIiP+D1IHfQSqanv+00nDACJ06zgV+Kqa N5KSG8xmCzwsm+VGd/VN85inKups7UywdUTzHj886Xx4iWZ7W6pb32NV4TesI5hAEZLt h5TxaLJ6p6u7vSmtruvCTHBS9NlzwGXwDnvYCsrW5aOTih/I2qabVt+vOoGQ9jdWPN3M L04w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:dkim-signature :delivered-to:arc-authentication-results; bh=88TMLLQD6MMnbVlUoxHlSxvcGEZiNyRPrVAXub8XK9w=; b=anFMWe4go8uqHn0s5R1qgN5aPp2BqEYuPqE9kTHdWU6H814S7dl0AJbcQNh9nIcDwB GT1kOhaTKHk2tFovsd40exaZMMSjyLQrGKN6YRdOxpzpVX4laEi8WZFe0pTihT9Nrxa+ IJvdvlYmQR+ikTgInf6zyGYNUJ/UKsjRcZFNjk4EEZZPO83jlc9uJJX4EHzf/qphUoF7 Se4W4/yOtQt9pev9P7yTs13BjeeLtMXSWo1zDWzknsp2YpCwOnx4FgE6HA+ZKxSbaGud MgJBeWhn2lPqwdefryfVGt6x0igPcLPewgP8F6GUp90As8hq0ZC5DOvaz61AenomVbFQ OzpA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=agO19OWI; 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=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id i63si1309327wmh.100.2018.03.10.15.01.09; Sat, 10 Mar 2018 15:01:10 -0800 (PST) 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=@gmail.com header.s=20161025 header.b=agO19OWI; 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=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7E30568A119; Sun, 11 Mar 2018 01:00:57 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt0-f195.google.com (mail-qt0-f195.google.com [209.85.216.195]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A2E66689D83 for ; Sun, 11 Mar 2018 01:00:50 +0200 (EET) Received: by mail-qt0-f195.google.com with SMTP id j4so15112817qth.8 for ; Sat, 10 Mar 2018 15:01:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=aPHn561ssbSUNUAmy15rLaoYGK/vLi9L+99JHkXUomQ=; b=agO19OWI/vFlSqFDI14/pAGEwN5H+M9y8gGwfpHjJ3+Mnra/Rk4l3BZypsYAagHVhV T0o1Lf9leEpnOcGkYz1A3u6x+c/44Kpp3HjQFeIBCfJCPbk6MdF1x4WYt8pmvehEAJuw fdM79gxTDaLst8fZvkFxu/itrHfC7ZATjpu2+cVopJsqUg1MpElzXzS2cByd/I86efxu Wp+Ov/JPyKa+e67im/hvTXYVtO5uELRRk0tED9FLV07Z4fxI8hyii/qVCYyXjZtGFPmR bQM7X2Dsi2cPLQX8efHyIu9RYpHL+ehVtZNQhQhi8tMQ+O1I8ghajPQA5hswIxMbWoi4 itIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=aPHn561ssbSUNUAmy15rLaoYGK/vLi9L+99JHkXUomQ=; b=XrADphndyRgHhwU8guLX2yoBGErqFvDHTI0lcc7DWydM6gkH5lCJLdHsBpjmoxBrPa D1xBIlnvNMgQvrBp50bkXsjLw3zJoS+rLWAgDuxk6riq4yQzwMBZxxsVhalndk3jC90+ rMCQfnM/xUKoPn1xyzvB0o0zifJehnihxf+/OtmOolpEKbJW3aSnLBp5f3/0Zm7qQWSF vjTj6m/jVZ9D6Foad4NqHnrOQp7utrupEbIsZe6Cnky9jrQ5E9lgA+QEbANfN84nI7UD gClQzAlVuECntMZWUrOL6zHW2wpUGck1c2scC0CP9sfx2wIL1vfA/EElT/dM04tnMvaH 67sw== X-Gm-Message-State: AElRT7GT340hgUkNvyfxSGAUpiSt/RBYCAar7PnMWxHSzr07lqyDW8pH 6A12bWhQuurmOXvpOGH2WHj67w== X-Received: by 10.237.58.67 with SMTP id n61mr4991714qte.324.1520722858917; Sat, 10 Mar 2018 15:00:58 -0800 (PST) Received: from localhost.localdomain ([190.188.171.140]) by smtp.gmail.com with ESMTPSA id f54sm2863869qta.87.2018.03.10.15.00.57 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 10 Mar 2018 15:00:58 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sat, 10 Mar 2018 20:00:45 -0300 Message-Id: <20180310230045.2888-1-jamrial@gmail.com> X-Mailer: git-send-email 2.16.2 Subject: [FFmpeg-devel] [PATCH] avcodec/extract_extradata: don't uninitialize the H2645Packet on every processed packet 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Based on hevc_parser code. This prevents repeated unnecessary allocations and frees on every packet processed by the bsf. Signed-off-by: James Almer --- libavcodec/extract_extradata_bsf.c | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/libavcodec/extract_extradata_bsf.c b/libavcodec/extract_extradata_bsf.c index 4e2d601742..64017b6fb7 100644 --- a/libavcodec/extract_extradata_bsf.c +++ b/libavcodec/extract_extradata_bsf.c @@ -36,6 +36,9 @@ typedef struct ExtractExtradataContext { int (*extract)(AVBSFContext *ctx, AVPacket *pkt, uint8_t **data, int *size); + /* H264/HEVC specifc fields */ + H2645Packet h2645_pkt; + /* AVOptions */ int remove; } ExtractExtradataContext; @@ -61,7 +64,6 @@ static int extract_extradata_h2645(AVBSFContext *ctx, AVPacket *pkt, ExtractExtradataContext *s = ctx->priv_data; - H2645Packet h2645_pkt = { 0 }; int extradata_size = 0, filtered_size = 0; const int *extradata_nal_types; int nb_extradata_nal_types; @@ -75,13 +77,13 @@ static int extract_extradata_h2645(AVBSFContext *ctx, AVPacket *pkt, nb_extradata_nal_types = FF_ARRAY_ELEMS(extradata_nal_types_h264); } - ret = ff_h2645_packet_split(&h2645_pkt, pkt->data, pkt->size, + ret = ff_h2645_packet_split(&s->h2645_pkt, pkt->data, pkt->size, ctx, 0, 0, ctx->par_in->codec_id, 1); if (ret < 0) - goto fail; + return ret; - for (i = 0; i < h2645_pkt.nb_nals; i++) { - H2645NAL *nal = &h2645_pkt.nals[i]; + for (i = 0; i < s->h2645_pkt.nb_nals; i++) { + H2645NAL *nal = &s->h2645_pkt.nals[i]; if (val_in_array(extradata_nal_types, nb_extradata_nal_types, nal->type)) { extradata_size += nal->raw_size + 3; if (ctx->par_in->codec_id == AV_CODEC_ID_HEVC) { @@ -104,8 +106,7 @@ static int extract_extradata_h2645(AVBSFContext *ctx, AVPacket *pkt, if (s->remove) { filtered_buf = av_buffer_alloc(filtered_size + AV_INPUT_BUFFER_PADDING_SIZE); if (!filtered_buf) { - ret = AVERROR(ENOMEM); - goto fail; + return AVERROR(ENOMEM); } memset(filtered_buf->data + filtered_size, 0, AV_INPUT_BUFFER_PADDING_SIZE); @@ -115,16 +116,15 @@ static int extract_extradata_h2645(AVBSFContext *ctx, AVPacket *pkt, extradata = av_malloc(extradata_size + AV_INPUT_BUFFER_PADDING_SIZE); if (!extradata) { av_buffer_unref(&filtered_buf); - ret = AVERROR(ENOMEM); - goto fail; + return AVERROR(ENOMEM); } memset(extradata + extradata_size, 0, AV_INPUT_BUFFER_PADDING_SIZE); *data = extradata; *size = extradata_size; - for (i = 0; i < h2645_pkt.nb_nals; i++) { - H2645NAL *nal = &h2645_pkt.nals[i]; + for (i = 0; i < s->h2645_pkt.nb_nals; i++) { + H2645NAL *nal = &s->h2645_pkt.nals[i]; if (val_in_array(extradata_nal_types, nb_extradata_nal_types, nal->type)) { AV_WB24(extradata, 1); // startcode @@ -145,9 +145,7 @@ static int extract_extradata_h2645(AVBSFContext *ctx, AVPacket *pkt, } } -fail: - ff_h2645_packet_uninit(&h2645_pkt); - return ret; + return 0; } static int extract_extradata_vc1(AVBSFContext *ctx, AVPacket *pkt, @@ -311,6 +309,12 @@ fail: return ret; } +static void extract_extradata_close(AVBSFContext *ctx) +{ + ExtractExtradataContext *s = ctx->priv_data; + ff_h2645_packet_uninit(&s->h2645_pkt); +} + static const enum AVCodecID codec_ids[] = { AV_CODEC_ID_CAVS, AV_CODEC_ID_H264, @@ -343,4 +347,5 @@ const AVBitStreamFilter ff_extract_extradata_bsf = { .priv_class = &extract_extradata_class, .init = extract_extradata_init, .filter = extract_extradata_filter, + .close = extract_extradata_close, };