From patchwork Thu Oct 22 15:17:46 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lance Wang X-Patchwork-Id: 23154 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 7D07244B9FF for ; Thu, 22 Oct 2020 18:18:10 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 62D1A68A903; Thu, 22 Oct 2020 18:18:10 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf1-f194.google.com (mail-pf1-f194.google.com [209.85.210.194]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 71A31689D06 for ; Thu, 22 Oct 2020 18:18:02 +0300 (EEST) Received: by mail-pf1-f194.google.com with SMTP id e7so1313378pfn.12 for ; Thu, 22 Oct 2020 08:18:02 -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=1m1rtw98JseinyPx6wfMOc4GDgOKdMdfRY+QFxiljMQ=; b=KzkXNlufl7YgMN5TR3XlaZe09bn4nXS/ZYKwXoCwCqJfo/uO7NWdZq+rl9ZpOr/NXe FLau9Aoxv7CKtQXS8fUfG8MY287WgVzZqICQ0I6003XDZv014l1qlIqJdIiqDoqWFruc aegIPmZg8KYlBbpnnRlg+jgXugOTd5JSvOYzHmH80/PsPb+HDgTZjz0s9xUwCfAhhrWq ttfsk8n4afkm5MywBWAN8Pac9s/GWoCbUAQ3AORbnoEBeW+TgZk1BG2B9aM++3zXa33V l0NqNLAciYUbna5R9INVX2VIvCoKr9YKXNW9KG4JVHXeYwNr3mV8OeNmjn88VFtJxiFW /EGw== 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=1m1rtw98JseinyPx6wfMOc4GDgOKdMdfRY+QFxiljMQ=; b=e/eGYAnIEEl9DchQZlKJ/pBAPXq2ryLIQKrNfZV7jDxZgSGF+iK1G+BKucSfuD1Dia FbdEMXZ3T3p9CUGPrajrMZYPrEOoOmCv2ogt9ZsMgQviglNY2N7SPRfltkoLgGI8XCcg Jbxl/CaF3qS0qF5HH3CFNW0xOo8zftpH24zPlrWvIM9MrsccffNaF3FQXTQMHLXFl9bS 8vzVoMy6tVK6ZsZ4c0BkOHAv19x4sqyxyJgbV7RvnqhmUGEUGIZ2bu+zJIUiKaWqqRRE BBA3iBRVsT0K/xjyhaxfSko7aKWlUqtWxzvOoSpPSEtg0RI3tIPSJSKDOKa83alxQKOj Y0RQ== X-Gm-Message-State: AOAM530Ii+eNTnUDFCrlh+lZ+5pIUtRog6m/K7KjSAmxJ1nu54N6zCte yjAi/EiUYRj48eWYLct/IfEAqL59TDI= X-Google-Smtp-Source: ABdhPJw50huG1EKc9HRGouEu9VGOdkGjh9hWnQqqhbEBWBgUm7mWjOXc5ZcXMPDRuXEqQbH4qpvFfA== X-Received: by 2002:a05:6a00:2d5:b029:13c:1611:653b with SMTP id b21-20020a056a0002d5b029013c1611653bmr3030849pft.13.1603379880548; Thu, 22 Oct 2020 08:18:00 -0700 (PDT) Received: from vpn2.localdomain ([161.117.202.209]) by smtp.gmail.com with ESMTPSA id mn11sm2370259pjb.19.2020.10.22.08.17.59 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 22 Oct 2020 08:17:59 -0700 (PDT) From: lance.lmwang@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Thu, 22 Oct 2020 23:17:46 +0800 Message-Id: <1603379867-6325-2-git-send-email-lance.lmwang@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1603379867-6325-1-git-send-email-lance.lmwang@gmail.com> References: <1603287614-11545-1-git-send-email-lance.lmwang@gmail.com> <1603379867-6325-1-git-send-email-lance.lmwang@gmail.com> Subject: [FFmpeg-devel] [PATCH v2 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 5c97d63..415a64e 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; @@ -1134,6 +1135,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); @@ -1688,6 +1690,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)