From patchwork Sun Mar 29 21:07:56 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 18496 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 7310244B01E for ; Mon, 30 Mar 2020 00:08:29 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4F75168B3F8; Mon, 30 Mar 2020 00:08:29 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qv1-f67.google.com (mail-qv1-f67.google.com [209.85.219.67]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0CF2568AFA6 for ; Mon, 30 Mar 2020 00:08:23 +0300 (EEST) Received: by mail-qv1-f67.google.com with SMTP id bu9so1910414qvb.13 for ; Sun, 29 Mar 2020 14:08:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=MvIP8qK3YHkr+UadyHZsqbUtcTBveGQuVwuI9mYUtzA=; b=GXgcfQ4/eNRNjrgm41LMyYmcJurNxi2P3sb2K62zYEuH7R7ltu1cu6xbAYiJbYyo+F dNzQivmjDpyYgzty06s/855dpWKxDhJjaThnrX1aJqqoIlfJ6m1WTKXTVNQ/sfDhaEaO 57a064HhJymfHO4Yk2r5bKn/PFNdHROIzs+vfY1eoHP0HGU97tvDYVTn1jCFJZklDBoZ YW192MVn3k7sVZIRs2uyh0tYU4jDsmBF/q9epZcWkeGvCC1PB7zkHvjOGC7XZlVi5Y3C 9QQJP/YkX7AdGtrLuYSUpHSgr/jjSXgZxGzOPOheEbZDO2mYdcc9M6y7Hhbb5gfAlqpc Ow3w== 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:mime-version :content-transfer-encoding; bh=MvIP8qK3YHkr+UadyHZsqbUtcTBveGQuVwuI9mYUtzA=; b=jH9LGAfqV/HcJBJIFYQ7vVelgjm6KIrCbdiFArCA5d/SREuUUqFPiHr9aBnVEzC993 YU2MgEpLnuO1FC+iZJcAjbbqw482cQ3LvvzCeX6GI6xtlra6HhAP1JbRFl5ctNpoI83g qErAT7RoNLw7ogfOUjVlCoyo2Q9J5aiVKmwjlCyNIUXnvIJYHnlQ9csMywzgNM8U5z9o ba0XsqZVx3r1/miyVnYArVfRVknLka47c7mpqKckfgkCHEWQM9uu414rZNEahbCfZGzF FSa+IjnBDyEpg8m52ga7ITywMXrnWvpEP6UhRar/gMk2kOsKEzPpPaZmC9H4oIKXkb/z FWnw== X-Gm-Message-State: ANhLgQ3bbj9DRdG/eN9JlfiQlqH7tsn3x7GM66rfbsUa1Q+MiFrRTAGU TWWncr0DAkm3ncIyrXkEz7gsKM7tLWI= X-Google-Smtp-Source: ADFU+vtkmDpFMkp6bssPAYpJAGNClBDF2IyPDMNfqUQl5cQnhbA2c9c3mWCS+un941ojbxxHxlejPw== X-Received: by 2002:a0c:9e68:: with SMTP id z40mr8759478qve.242.1585516101316; Sun, 29 Mar 2020 14:08:21 -0700 (PDT) Received: from localhost.localdomain ([181.23.81.170]) by smtp.gmail.com with ESMTPSA id j20sm8970515qke.44.2020.03.29.14.08.20 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Mar 2020 14:08:20 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sun, 29 Mar 2020 18:07:56 -0300 Message-Id: <20200329210756.4865-1-jamrial@gmail.com> X-Mailer: git-send-email 2.25.2 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avformat/mpegts: use a buffer pool for PES payloads 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" This produces a small speed up in demuxing Signed-off-by: James Almer --- libavformat/mpegts.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c index 7f56bacb2c..7746a524c4 100644 --- a/libavformat/mpegts.c +++ b/libavformat/mpegts.c @@ -157,6 +157,8 @@ struct MpegTSContext { int resync_size; int merge_pmt_versions; + AVBufferPool *pool; + /******************************************/ /* private mpegts data */ /* scan context */ @@ -1177,8 +1179,7 @@ static int mpegts_push_data(MpegTSFilter *filter, pes->total_size = MAX_PES_PAYLOAD; /* allocate pes buffer */ - pes->buffer = av_buffer_alloc(pes->total_size + - AV_INPUT_BUFFER_PADDING_SIZE); + pes->buffer = av_buffer_pool_get(ts->pool); if (!pes->buffer) return AVERROR(ENOMEM); @@ -1351,8 +1352,7 @@ skip: if (ret < 0) return ret; pes->total_size = MAX_PES_PAYLOAD; - pes->buffer = av_buffer_alloc(pes->total_size + - AV_INPUT_BUFFER_PADDING_SIZE); + pes->buffer = av_buffer_pool_get(ts->pool); if (!pes->buffer) return AVERROR(ENOMEM); ts->stop_parse = 1; @@ -3032,6 +3032,10 @@ static int mpegts_read_header(AVFormatContext *s) ts->stream = s; ts->auto_guess = 0; + ts->pool = av_buffer_pool_init(MAX_PES_PAYLOAD + AV_INPUT_BUFFER_PADDING_SIZE, NULL); + if (!ts->pool) + return AVERROR(ENOMEM); + if (s->iformat == &ff_mpegts_demuxer) { /* normal demux */ @@ -3200,6 +3204,8 @@ static void mpegts_free(MpegTSContext *ts) clear_programs(ts); + av_buffer_pool_uninit(&ts->pool); + for (i = 0; i < NB_PID_MAX; i++) if (ts->pids[i]) mpegts_close_filter(ts, ts->pids[i]); @@ -3295,6 +3301,12 @@ MpegTSContext *avpriv_mpegts_parse_open(AVFormatContext *s) ts->stream = s; ts->auto_guess = 1; + ts->pool = av_buffer_pool_init(MAX_PES_PAYLOAD + AV_INPUT_BUFFER_PADDING_SIZE, NULL); + if (!ts->pool) { + av_free(ts); + return NULL; + } + mpegts_open_section_filter(ts, SDT_PID, sdt_cb, ts, 1); mpegts_open_section_filter(ts, PAT_PID, pat_cb, ts, 1); mpegts_open_section_filter(ts, EIT_PID, eit_cb, ts, 1);