From patchwork Tue Sep 27 20:37:59 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 38380 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:3b1c:b0:96:9ee8:5cfd with SMTP id c28csp487619pzh; Tue, 27 Sep 2022 05:38:13 -0700 (PDT) X-Google-Smtp-Source: AMsMyM6YzaZovTWdR9IidieHM7TtmqxvqI00IOP26Vz4zoqyDWQ2F2/Ch67mVOp5G43fDBxrOyCg X-Received: by 2002:a05:6402:2989:b0:44e:90d0:b9ff with SMTP id eq9-20020a056402298900b0044e90d0b9ffmr27306673edb.110.1664282293384; Tue, 27 Sep 2022 05:38:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1664282293; cv=none; d=google.com; s=arc-20160816; b=YOxIG3Z7gjiW68U06mnTPVi/oq33KB9PlBGiYZDTVYTMKL9ICJHcqtFrkZDBi0DhDh x5IvM5wBKS3LwkfmCOhhi9YXjOEPR+3jAFz0TfyaW6uAFEXlB2wDwQ2c838+eBV8A10b wF5UKYz3STZMIAK9g7GdNWmYFICrzgoO8+mjacBfKNORGzRWyNG2NUCuy6T2wT6Yoff3 etETXfxzNUY1SlsYqwwhNj9tIgYEURoaq5i1VrwzTjSrJoYb2sObORXrvHn0h7jP86zl 4VNUBWF+R0aAPBvXDIZdLcuzBuYCW0PTrxAMBzB61Y1RLhYdbb5B2Uxgvng32tY3FNRY Dk4A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:date:to:from:message-id :dkim-signature:delivered-to; bh=tKmJdYkLakLE3V6GwlU0HQge4Qe5TwIRIY5OO+ZK9U8=; b=yFbRmQHj7rFVgJsW8tAdsnmNGnEk9SgDMgDwJjPkOjLeV/0BYIPCSn9QWKFUCiZYVe 7rd8sfTX4aSOYHgKHCnD+MN/onPVvdUB/+C2zEXFLwAA0B5NrfI5nqfcSHBHDVYd/kyp IOVP/NCBWWbNmN7+qNthIIRqfkKP8jIeG09vv9aUq9ItZR/WhoEkqHJsMa1K/jPuj/uO Oe7paPo17C/NJ9BQZ+Yjfgj93hyp+4nGWMrjADDJXt1QuT0hBQextpVVFYWhvWo/EmsR aLNEy3wqej5og4heGPIRbFqkiMmtacjZgJkHhs159PUWpUe6FreK9QYntPJlLwodrZ1q OZAg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=kISgnn3H; 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=NONE dis=NONE) header.from=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id sg8-20020a170907a40800b007317d093e6csi1130653ejc.808.2022.09.27.05.38.12; Tue, 27 Sep 2022 05:38:13 -0700 (PDT) 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=@foxmail.com header.s=s201512 header.b=kISgnn3H; 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=NONE dis=NONE) header.from=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8FED168B9BD; Tue, 27 Sep 2022 15:38:09 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out162-62-57-49.mail.qq.com (out162-62-57-49.mail.qq.com [162.62.57.49]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7989F68B1B3 for ; Tue, 27 Sep 2022 15:38:00 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1664282277; bh=4v5JNL2sOwIxOICQAkSnm4YG3qQM25GVreFC2tytBjo=; h=From:To:Cc:Subject:Date; b=kISgnn3HelCrXXXL4BBahrmvv4RtggaWnmkFDKlMsmb3Ol1dBAQPfZ9Rwly4C3EvK LwMnhe8g+zp/HerF4wvY38Ldxs2PGRZzOThtvPdBONAVcg/ZOk2Gf8FEXFx/0N/ncN P8/2k+zZhGUVXkeKoJZ+/XOp2qlDLTqWVjc5FWnk= Received: from localhost.localdomain ([59.37.125.102]) by newxmesmtplogicsvrsza7.qq.com (NewEsmtp) with SMTP id 9779C619; Tue, 27 Sep 2022 20:37:55 +0800 X-QQ-mid: xmsmtpt1664282275t4c6sfpba Message-ID: X-QQ-XMAILINFO: MXdylPHsT1M86+SU4s2mLR7SQkuS7e0A+MnIKTamL6DLJSodJQBPVWBNc/nx+y 1Y0sztJkxuAGl4VxPUuzEP1oHKHsRNSoY8sTeTdwUbeYqzQh1IOfvsR3EBmmIpfLd495+w5AxkZE lynHqzKI/nGO51we1ffZWhHHAO4+6kaL7RZ9RrEQDQA1+MXX7Tc4KPsVWRKJMevTCRWYWjJ13oU6 HUyJfXhznutBygM8wU0nNa5CotpNscp/pUULKUs2bA+GqKs+AWGyYsXigw0eIq19CSBFY8WIIn7i OZKwWq33rX8vbMALtmdp2+tKYEu2DfqONonbIeVJWDUMmW8qe1MGSecFXPxuG+0rANHC491uCwhf nqyredz6+zv7JUwZll/n6nrwfLUrDhdFHAmabgVap2YwsojZsZvQQ8kJ+mG8m6IHPWaxbinP43ZO cSSxM/2hyaxRr+Bpr7y8CCdG/WnuVbkpdeMyUdyBauRLx/PfP3ApKwQ/b/rKtlVioIbiWFJtXO5f /gqba/fPFV+RBrcsB7ER49ya02lOoLcWLVsH7Bbm0sUUv6/nFeCj2D77B75bww5v3F6mY75J2Dan zKdbNdcwZzGEng5HUJDgEFoyTIYjthE64SAG0O5PP0E2eaG91GQhuwuYaBQrBeYXyXCrNzd5iKik HY3kYsh/4SSS6ngryXm0h75d3UXs2QQy38iFN31o5O5kQ9ZZpbzjtt+RUTRFeTosp869I7w4TOAD AAOV3LxzviR9D4SG5LDedPZ2FJ3qbC2u8eyklIkW//UPBo+A/Eh+TBj1GG4moufjekwXxiemy58S 0W8iy5KWuvmHBW+jf5tbQEPcYcc5LblyJ1be1n8IDMUq6dLvr7s2LrQfllMFe9EFQaZdP39NyKkU OD1bGOk1OsEPjNpbReMoIUA+NvI5w78IG4SOjRkYZq8hFg86XNSbyuJtYZjhJ4cLuHIVgjq7+H6s 5c5HjU9xvYUTtbOLHXDq6cyVZFHRsG From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Wed, 28 Sep 2022 04:37:59 +0800 X-OQ-MSGID: <20220927203759.1100904-1-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avformat/mpegtsenc: add pcr_at_keyframe flag X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: XjuviZrEo5QG From: Zhao Zhili Add PCR at keyframe can be undesirable when -pcr_period is specified. Add an flag to disable this behavior. Signed-off-by: Zhao Zhili --- doc/muxers.texi | 2 ++ libavformat/mpegtsenc.c | 8 ++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/doc/muxers.texi b/doc/muxers.texi index b2f4326aae..0f576d8096 100644 --- a/doc/muxers.texi +++ b/doc/muxers.texi @@ -1915,6 +1915,8 @@ Conform to System B (DVB) instead of System A (ATSC). Mark the initial packet of each stream as discontinuity. @item nit Emit NIT table. +@item pcr_at_keyframe +Write PCR at key frame. @end table @item mpegts_copyts @var{boolean} diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c index 5148a6aecd..808d2c04a2 100644 --- a/libavformat/mpegtsenc.c +++ b/libavformat/mpegtsenc.c @@ -112,6 +112,7 @@ typedef struct MpegTSWrite { #define MPEGTS_FLAG_SYSTEM_B 0x08 #define MPEGTS_FLAG_DISCONT 0x10 #define MPEGTS_FLAG_NIT 0x20 +#define MPEGTS_FLAG_PCR_AT_KEYFRAME 0x40 int flags; int copyts; int tables_version; @@ -1566,7 +1567,8 @@ static void mpegts_write_pes(AVFormatContext *s, AVStream *st, q = get_ts_payload_start(buf); ts_st->discontinuity = 0; } - if (key && is_start && pts != AV_NOPTS_VALUE && + if ((ts->flags & MPEGTS_FLAG_PCR_AT_KEYFRAME) && + key && is_start && pts != AV_NOPTS_VALUE && !is_dvb_teletext /* adaptation+payload forbidden for teletext (ETSI EN 300 472 V1.3.1 4.1) */) { // set Random Access for key frames if (ts_st->pcr_period) @@ -2269,7 +2271,7 @@ static const AVOption options[] = { { "muxrate", NULL, OFFSET(mux_rate), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, INT_MAX, ENC }, { "pes_payload_size", "Minimum PES packet payload in bytes", OFFSET(pes_payload_size), AV_OPT_TYPE_INT, { .i64 = DEFAULT_PES_PAYLOAD_SIZE }, 0, INT_MAX, ENC }, - { "mpegts_flags", "MPEG-TS muxing flags", OFFSET(flags), AV_OPT_TYPE_FLAGS, { .i64 = 0 }, 0, INT_MAX, ENC, "mpegts_flags" }, + { "mpegts_flags", "MPEG-TS muxing flags", OFFSET(flags), AV_OPT_TYPE_FLAGS, { .i64 = MPEGTS_FLAG_PCR_AT_KEYFRAME }, 0, INT_MAX, ENC, "mpegts_flags" }, { "resend_headers", "Reemit PAT/PMT before writing the next packet", 0, AV_OPT_TYPE_CONST, { .i64 = MPEGTS_FLAG_REEMIT_PAT_PMT }, 0, INT_MAX, ENC, "mpegts_flags" }, { "latm", "Use LATM packetization for AAC", @@ -2282,6 +2284,8 @@ static const AVOption options[] = { 0, AV_OPT_TYPE_CONST, { .i64 = MPEGTS_FLAG_DISCONT }, 0, INT_MAX, ENC, "mpegts_flags" }, { "nit", "Enable NIT transmission", 0, AV_OPT_TYPE_CONST, { .i64 = MPEGTS_FLAG_NIT}, 0, INT_MAX, ENC, "mpegts_flags" }, + { "pcr_at_keyframe", "Write PCR at key frame", + 0, AV_OPT_TYPE_CONST, { .i64 = MPEGTS_FLAG_PCR_AT_KEYFRAME }, 0, INT_MAX, ENC, "mpegts_flags" }, { "mpegts_copyts", "don't offset dts/pts", OFFSET(copyts), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, ENC }, { "tables_version", "set PAT, PMT, SDT and NIT version", OFFSET(tables_version), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 31, ENC }, { "omit_video_pes_length", "Omit the PES packet length for video packets",