From patchwork Thu Apr 30 19:57:27 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andriy Gelman X-Patchwork-Id: 19407 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 3848D44A6AC for ; Thu, 30 Apr 2020 22:57:53 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 16A3468C4E9; Thu, 30 Apr 2020 22:57:53 +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 B291F68C3D0 for ; Thu, 30 Apr 2020 22:57:46 +0300 (EEST) Received: by mail-qv1-f67.google.com with SMTP id y19so3698340qvv.4 for ; Thu, 30 Apr 2020 12:57:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=OwRMyZpIBhOk8Y/TdCuhxLcj93SvBWbSoZQyJ5AG9L4=; b=Eg4H+fdbEWu/icy/UMiUSfomFJeFE6O9e6sxwtQ0rGfAtYL/k4w5GUwqwX3/4ZI04a BIvumadXexQVAm8G60bcAN3farPrPmTVqNae8mfOq1N3Ih7eFyZ+j90eSXGmJjM+msLR ZEnlDSPVXBlCmeixe0dw5bx4dBBZ2tNRevQJVdyVFJhilNnjj9qWLSDBHm/rRuhWXq6h wp2U6wvHxt6iN6L8/WfBmP2I7I5DmmTodBuVtH2oCDFBqpcjLIqpPopsfuiP1mMmuVtC KxXIbp4QZodVUtF+0G+XRh+csCsAdz2uALA2Hmg3gltCJlgG1Gc5mMsvVj6sn2hjO2/6 PKpg== 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:mime-version :content-transfer-encoding; bh=OwRMyZpIBhOk8Y/TdCuhxLcj93SvBWbSoZQyJ5AG9L4=; b=EWPen8rK//DYC9+D2/bqD+RQXzVbDSKtFLteML9upZl19PFqaBZyCOSd61QP62Z2og QFnEHuk9xumFJTdn/5qVfrl2QgKb2xcBIa/knw0ZDB4kBIbZADyCt77hTVXGkcU1vXMX 9zRFCEao5WiERBZgRtwfN55f3BOjYCneXa0NSqzu4dNyD4Zl8PUd6AX7BTWuZNRdV4FI jWNofbscO3eEy8s2Zby8fpif3lGmcFtCelRKv6nPbGcsJydLiz6ayW0RmPVLsCxYINi9 qCof+RILOLeRYd2bcA2z0XPjE60xvQrIsryKWuTlbWvWGanPF2vgkJDHBgDW75VRANeL 5vDg== X-Gm-Message-State: AGi0PuYWUx/1h+SuBe9nkspDQA49h9MA/NYH+sbo4wR7GWqjXKEOeZG1 DgIb8WVIcQwAn3vJESfww9+4sJUe X-Google-Smtp-Source: APiQypI48AySdolRGkyX9fjSb2SVBMaFyiZucS2NH/dLjwWv9i2SfwnQRvq3jGr5XkalMc1L0lgj5g== X-Received: by 2002:a0c:e752:: with SMTP id g18mr583893qvn.111.1588276664782; Thu, 30 Apr 2020 12:57:44 -0700 (PDT) Received: from localhost.localdomain (c-71-232-27-28.hsd1.ma.comcast.net. [71.232.27.28]) by smtp.gmail.com with ESMTPSA id g14sm676537qtb.24.2020.04.30.12.57.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 12:57:44 -0700 (PDT) From: Andriy Gelman X-Google-Original-From: Andriy Gelman To: ffmpeg-devel@ffmpeg.org Date: Thu, 30 Apr 2020 15:57:27 -0400 Message-Id: <20200430195728.32671-1-andriy.gelman@gmail.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/2] avformat/mpegtsenc: Don't use heap allocated array to store pids 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: Andriy Gelman Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Andriy Gelman A temporary heap array currently stores pids from all streams. It is used to make sure there are no duplicated pids. However, this array is not needed because the pids from past streams are stored in the MpegTSWriteStream structs. Signed-off-by: Andriy Gelman --- libavformat/mpegtsenc.c | 51 +++++++++++------------------------------ 1 file changed, 14 insertions(+), 37 deletions(-) diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c index f2be6c6632..8ca1ddf003 100644 --- a/libavformat/mpegtsenc.c +++ b/libavformat/mpegtsenc.c @@ -931,7 +931,6 @@ static int mpegts_init(AVFormatContext *s) { MpegTSWrite *ts = s->priv_data; int i, j; - int *pids; int ret; if (ts->m2ts_mode == -1) { @@ -989,12 +988,6 @@ static int mpegts_init(AVFormatContext *s) ts->sdt.write_packet = section_write_packet; ts->sdt.opaque = s; - pids = av_malloc_array(s->nb_streams, sizeof(*pids)); - if (!pids) { - ret = AVERROR(ENOMEM); - goto fail; - } - /* assign pids to each stream */ for (i = 0; i < s->nb_streams; i++) { AVStream *st = s->streams[i]; @@ -1002,8 +995,7 @@ static int mpegts_init(AVFormatContext *s) ts_st = av_mallocz(sizeof(MpegTSWriteStream)); if (!ts_st) { - ret = AVERROR(ENOMEM); - goto fail; + return AVERROR(ENOMEM); } st->priv_data = ts_st; @@ -1011,8 +1003,7 @@ static int mpegts_init(AVFormatContext *s) ts_st->payload = av_mallocz(ts->pes_payload_size); if (!ts_st->payload) { - ret = AVERROR(ENOMEM); - goto fail; + return AVERROR(ENOMEM); } /* MPEG pid values < 16 are reserved. Applications which set st->id in @@ -1043,8 +1034,7 @@ static int mpegts_init(AVFormatContext *s) ts->m2ts_textsub_pid > M2TS_TEXTSUB_PID + 1 || ts_st->pid < 16) { av_log(s, AV_LOG_ERROR, "Cannot automatically assign PID for stream %d\n", st->index); - ret = AVERROR(EINVAL); - goto fail; + return AVERROR(EINVAL); } } else { ts_st->pid = ts->start_pid + i; @@ -1055,30 +1045,26 @@ static int mpegts_init(AVFormatContext *s) if (ts_st->pid >= 0x1FFF) { av_log(s, AV_LOG_ERROR, "Invalid stream id %d, must be less than 8191\n", st->id); - ret = AVERROR(EINVAL); - goto fail; + return AVERROR(EINVAL); } for (j = 0; j < ts->nb_services; j++) { if (ts->services[j]->pmt.pid > LAST_OTHER_PID) { av_log(s, AV_LOG_ERROR, "Invalid PMT PID %d, must be less than %d\n", ts->services[j]->pmt.pid, LAST_OTHER_PID + 1); - ret = AVERROR(EINVAL); - goto fail; + return AVERROR(EINVAL); } if (ts_st->pid == ts->services[j]->pmt.pid) { av_log(s, AV_LOG_ERROR, "PID %d cannot be both elementary and PMT PID\n", ts_st->pid); - ret = AVERROR(EINVAL); - goto fail; + return AVERROR(EINVAL); } } for (j = 0; j < i; j++) { - if (pids[j] == ts_st->pid) { + MpegTSWriteStream *ts_st_prev = s->streams[j]->priv_data; + if (ts_st_prev->pid == ts_st->pid) { av_log(s, AV_LOG_ERROR, "Duplicate stream id %d\n", ts_st->pid); - ret = AVERROR(EINVAL); - goto fail; + return AVERROR(EINVAL); } } - pids[i] = ts_st->pid; ts_st->payload_pts = AV_NOPTS_VALUE; ts_st->payload_dts = AV_NOPTS_VALUE; ts_st->first_pts_check = 1; @@ -1089,35 +1075,30 @@ static int mpegts_init(AVFormatContext *s) AVStream *ast; ts_st->amux = avformat_alloc_context(); if (!ts_st->amux) { - ret = AVERROR(ENOMEM); - goto fail; + return AVERROR(ENOMEM); } ts_st->amux->oformat = av_guess_format((ts->flags & MPEGTS_FLAG_AAC_LATM) ? "latm" : "adts", NULL, NULL); if (!ts_st->amux->oformat) { - ret = AVERROR(EINVAL); - goto fail; + return AVERROR(EINVAL); } if (!(ast = avformat_new_stream(ts_st->amux, NULL))) { - ret = AVERROR(ENOMEM); - goto fail; + return AVERROR(ENOMEM); } ret = avcodec_parameters_copy(ast->codecpar, st->codecpar); if (ret != 0) - goto fail; + return ret; ast->time_base = st->time_base; ret = avformat_write_header(ts_st->amux, NULL); if (ret < 0) - goto fail; + return ret; } if (st->codecpar->codec_id == AV_CODEC_ID_OPUS) { ts_st->opus_pending_trim_start = st->codecpar->initial_padding * 48000 / st->codecpar->sample_rate; } } - av_freep(&pids); - if (ts->copyts < 1) ts->first_pcr = av_rescale(s->max_delay, PCR_TIME_BASE, AV_TIME_BASE); @@ -1138,10 +1119,6 @@ static int mpegts_init(AVFormatContext *s) av_rescale(ts->pat_period, 1000, PCR_TIME_BASE)); return 0; - -fail: - av_freep(&pids); - return ret; } /* send SDT, PAT and PMT tables regularly */ From patchwork Thu Apr 30 19:57:28 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andriy Gelman X-Patchwork-Id: 19408 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 3005F44B170 for ; Thu, 30 Apr 2020 23:06:08 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 111B468C4DA; Thu, 30 Apr 2020 23:06:08 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f193.google.com (mail-qk1-f193.google.com [209.85.222.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3F58268C395 for ; Thu, 30 Apr 2020 23:06:01 +0300 (EEST) Received: by mail-qk1-f193.google.com with SMTP id t3so7151893qkg.1 for ; Thu, 30 Apr 2020 13:06:01 -0700 (PDT) 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=qD67lBygy7jtKIhz2dCFiIEjisEFmNL1jRVi66OmdXc=; b=On1MxY3Vxly8rBSuW0ZDm504jQbeFWpKGZ2woLXlx32aPHPnYEQv0CxEArOlLlLF8T /YRRnBEoS1ls3bCQjsVhps3n1rtcoZQX53vWAdKRRbZGYQBfY22G3QRSqE8UnjTrmx0N FmMN7tJ5VM3sYo63InAtaaOQ+BWr41atxOHJC4ZcCXABIOHTxb8mjW/d54jNekqdfYa/ d8AeH6USLZVyIAx7vAzA+eUiny3Dnus6HfJAczGvQvvKXO5U16xNH3/iN2nzFfYY61UF IcMnfnUdsiolyjIOqIQUETrd2xVWgVKi7lUtCtqHy3rml0MXGflr7E8gGBlPaY/Crncc FpKA== 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=qD67lBygy7jtKIhz2dCFiIEjisEFmNL1jRVi66OmdXc=; b=lxlgmUpSHbA9tAR6vkoZTWX15X3R3dxzSkbt+sHaN7rvAS5g00YBl5FrjFTpIRea7j wGnwocqMAXMTWYoKrbatCZF7mC+3B/C/mb+65KeqWYTHDeJoouTQ6yXRfDmTJjocVMyq O7hKBcVSVxfmtifVvODCyzj+Lc50pJU+hjKrbeLf4xEn1LJoFhztUlcSwsvQI2RrcAat QI3Jlo+O5kdDRuPINmF8oxPGQ2jFs27F5adzBZp8m/LVz8FZXq2KAsn9YLM216U6uJG1 QQPN9aV+gGYjtUqevmn0cLfTuvwSt0JgEl3OvqwuywWoPBGSDkSrEp3jtxR8SB4SWWfg gzKQ== X-Gm-Message-State: AGi0PuYzWwwH+n11sU6guXHR/Rd1gPA0qAW9m5NrlpRYrDL9NyUEKQqY P8t/I9vek6s+RaXDsoi+ivvbZP6B X-Google-Smtp-Source: APiQypK10myPGJcW1f6qH8whH630o/PC62ux1W4PM4buIyDxb8AMq+N/sF8FuLFIzJyRQTj8mjiCfQ== X-Received: by 2002:aed:3f92:: with SMTP id s18mr153629qth.145.1588276676211; Thu, 30 Apr 2020 12:57:56 -0700 (PDT) Received: from localhost.localdomain (c-71-232-27-28.hsd1.ma.comcast.net. [71.232.27.28]) by smtp.gmail.com with ESMTPSA id g14sm676537qtb.24.2020.04.30.12.57.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 12:57:55 -0700 (PDT) From: Andriy Gelman X-Google-Original-From: Andriy Gelman To: ffmpeg-devel@ffmpeg.org Date: Thu, 30 Apr 2020 15:57:28 -0400 Message-Id: <20200430195728.32671-2-andriy.gelman@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200430195728.32671-1-andriy.gelman@gmail.com> References: <20200430195728.32671-1-andriy.gelman@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/2] avformat/mpegtsenc: Remove two duplicated fields 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: Andriy Gelman Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Andriy Gelman ts->{tsid,onid} stores the values of ts->{transport_stream_id,original_network_id} Signed-off-by: Andriy Gelman --- libavformat/mpegtsenc.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c index 8ca1ddf003..bf1a7ee13f 100644 --- a/libavformat/mpegtsenc.c +++ b/libavformat/mpegtsenc.c @@ -79,8 +79,6 @@ typedef struct MpegTSWrite { int64_t sdt_period; /* SDT period in PCR time base */ int64_t pat_period; /* PAT/PMT period in PCR time base */ int nb_services; - int onid; - int tsid; int64_t first_pcr; int64_t next_pcr; int mux_rate; ///< set to 1 when VBR @@ -261,7 +259,7 @@ static void mpegts_write_pat(AVFormatContext *s) put16(&q, service->sid); put16(&q, 0xe000 | service->pmt.pid); } - mpegts_write_section1(&ts->pat, PAT_TID, ts->tsid, ts->tables_version, 0, 0, + mpegts_write_section1(&ts->pat, PAT_TID, ts->transport_stream_id, ts->tables_version, 0, 0, data, q - data); } @@ -731,7 +729,7 @@ static void mpegts_write_sdt(AVFormatContext *s) int i, running_status, free_ca_mode, val; q = data; - put16(&q, ts->onid); + put16(&q, ts->original_network_id); *q++ = 0xff; for (i = 0; i < ts->nb_services; i++) { service = ts->services[i]; @@ -757,7 +755,7 @@ static void mpegts_write_sdt(AVFormatContext *s) desc_list_len_ptr[0] = val >> 8; desc_list_len_ptr[1] = val; } - mpegts_write_section1(&ts->sdt, SDT_TID, ts->tsid, ts->tables_version, 0, 0, + mpegts_write_section1(&ts->sdt, SDT_TID, ts->transport_stream_id, ts->tables_version, 0, 0, data, q - data); } @@ -960,8 +958,6 @@ static int mpegts_init(AVFormatContext *s) // round up to a whole number of TS packets ts->pes_payload_size = (ts->pes_payload_size + 14 + 183) / 184 * 184 - 14; - ts->tsid = ts->transport_stream_id; - ts->onid = ts->original_network_id; if (!s->nb_programs) { /* allocate a single DVB service */ if (!mpegts_add_service(s, ts->service_id, s->metadata, NULL))