From patchwork Wed Oct 21 13:40:13 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lance Wang X-Patchwork-Id: 23131 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 E47FA44AD36 for ; Wed, 21 Oct 2020 16:48:02 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BB78268B1A8; Wed, 21 Oct 2020 16:48:02 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oi1-f194.google.com (mail-oi1-f194.google.com [209.85.167.194]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 13FF1688257 for ; Wed, 21 Oct 2020 16:47:56 +0300 (EEST) Received: by mail-oi1-f194.google.com with SMTP id j7so2086322oie.12 for ; Wed, 21 Oct 2020 06:47:55 -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; bh=yUjIwtxUpBknVYDFN7rTHOMZFmb2NQIH6+T8s09EorE=; b=cyAO5wnZLE0Vpnc87wYBoIhAIERIJOolsPtbmbvMjDTND82bNypyW/RJEQDim5EGPy tngAWXKszUKF/MaQmQ8oIRUWRh+c2h0KbSWm97daOxCHz4gUenVjT4aXW5PPvELfVzLL hEes1awLEjXKy5bDmMQLbDxX2/D6bPeWr51ElE34BH4TqAT1/WqaAmONCCjsS6xJG27y qpfCE0wQKGiOzshLih6hPd2ViObbWic/AMBHlpCPbZJTZbH6WkKEc6gtS7e2N1RaFryW g97NqLMfZR3tJjUXYoJJ1DvL1PsBMrIQ8EeopFm47FVt3Af64DarTg7tznQamN2o0Uv1 LYWA== 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; bh=yUjIwtxUpBknVYDFN7rTHOMZFmb2NQIH6+T8s09EorE=; b=IhGTHk3k8a5QV5YhpjoDa9iKwIvtbPOFmlPmDo1mk/nGcLBHgdPfv/iGGCFFCmTWGB hNNobgwaWv39PsayeXLvAw8niPJV3NsCaIeVZVew89ko+yRjCnRgoNuWa+82nfXWjkC7 UbLkzpsW/vOWKmlHowWZZN/rMAgRfzLDh73l1rDfifgcQPL3TaH8hG7RUsKubka7t0FI dwGNDFnV3cD+Hf66BA2ccyubK59ytAPNzUad/qQnxQthP1NrU12NEHruRsnwCgraXsa0 OIleikIHJFV6xlL8vN68zyZduWsiHquY23RiG4sXl+zspTqRted4kXWCnIPVPR6p995A FzXg== X-Gm-Message-State: AOAM5318++HsoJD78APbj2grlnru4oMgnxczmn2JDB26hiGJbH/9Ziw/ SlgJypjk1r/cLQ8TitNOGDma84Z06oY= X-Google-Smtp-Source: ABdhPJw8Nrlifw6OdfFv4ozHK+Wy9g17j7BxO9L0P8jw5eFlTqGm7QBh35hlOjPu8IZg9GeARNNH1Q== X-Received: by 2002:a17:90a:148:: with SMTP id z8mr3550675pje.173.1603287623238; Wed, 21 Oct 2020 06:40:23 -0700 (PDT) Received: from vpn2.localdomain ([161.117.202.209]) by smtp.gmail.com with ESMTPSA id o15sm2624718pfd.16.2020.10.21.06.40.21 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 21 Oct 2020 06:40:22 -0700 (PDT) From: lance.lmwang@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Wed, 21 Oct 2020 21:40:13 +0800 Message-Id: <1603287614-11545-2-git-send-email-lance.lmwang@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1603287614-11545-1-git-send-email-lance.lmwang@gmail.com> References: <1603287614-11545-1-git-send-email-lance.lmwang@gmail.com> Subject: [FFmpeg-devel] [PATCH 2/3] avformat/mpegtsenc: make first_pcr sync with the first valid dts 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: Limin Wang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Limin Wang now first_pts assume dts will start from zero, if it's not true(copyts is enable), too many null packet will be inserted for cbr output. Please test with below command, you'll get huge test.ts without the patch: ./ffmpeg -y -copyts -i ../fate-suite/mpegts/loewe.ts -c:v libx264 -x264opts \ nal-hrd=cbr:force-cfr=1 -b:v 3500k -minrate 3500k -maxrate 3500k -bufsize \ 1000k -c:a mp2 -muxrate 4500k -vframes 1000 test.ts Signed-off-by: Limin Wang --- libavformat/mpegtsenc.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c index e05d0ce..baea3b4 100644 --- a/libavformat/mpegtsenc.c +++ b/libavformat/mpegtsenc.c @@ -81,6 +81,7 @@ typedef struct MpegTSWrite { int64_t pat_period; /* PAT/PMT period in PCR time base */ int nb_services; int64_t first_pcr; + int first_dts_check; int64_t next_pcr; int mux_rate; ///< set to 1 when VBR int pes_payload_size; @@ -1136,6 +1137,7 @@ static int mpegts_init(AVFormatContext *s) if (ts->copyts < 1) ts->first_pcr = av_rescale(s->max_delay, PCR_TIME_BASE, AV_TIME_BASE); + ts->first_dts_check = 1; select_pcr_streams(s); @@ -1690,6 +1692,11 @@ static int mpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt) stream_id = side_data[0]; if (ts->copyts < 1) { + if (ts->first_dts_check && dts != AV_NOPTS_VALUE) { + ts->first_pcr += dts * 300; + } + ts->first_dts_check = 0; + if (pts != AV_NOPTS_VALUE) pts += delay; if (dts != AV_NOPTS_VALUE)