From patchwork Thu Apr 22 12:03:09 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: zheng qian X-Patchwork-Id: 27209 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:5014:0:0:0:0:0 with SMTP id e20csp515569iob; Thu, 22 Apr 2021 05:09:06 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwvK2+Od1X/+PZdVbCpe1yPIrnkPq5KWLlFEJubOuIcfhs6q4ADmxSKTuvp1Y/kuDIpFavs X-Received: by 2002:a17:906:9407:: with SMTP id q7mr2999523ejx.434.1619093346474; Thu, 22 Apr 2021 05:09:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1619093346; cv=none; d=google.com; s=arc-20160816; b=ExNzloyTN7hP6/sf5Wej391l9+ZFRw+WORzHxlJz5zBAEz8GVM8FRy/5L70gA86nPn IY1OMH4XxD+Ca6yLB1bxEJ9Bxqy2hXwIcMKEwEhGpTsbj2805XqwLNqcqK4E291j3e25 L8c3ibBoaPIVlTA0SCM7q0x0a8SpscTEvZBbbAhQQDTKlXCn5qxKasG97OngS+RS11w5 ezUFrmpR/4m0TZqbhJFr10+xdwI8cDKoKxx9K5tSt7M4kvzoxCi/ctCNVHinPMzufUAs eMyY9cWl2i7T28kAOI4fmUtwOrdQUz+YSQ/+LBjuJ+MH3X3792sagbInwyxezDtODaQ3 hFzQ== 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:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=Neb5IO+4bbuoJMp6D0OP5iBgEHbcFzASn7QCaXmamsA=; b=ZNv9Uqsmalfq68TkR8f/rR+kKhMwtvvgSqAQsqdoPJwtt94og4kqBK+YHAq+vdoPZO ndy3+Kq0RpCRNK82W1Qc8p6L1gMAfldVO8XRYhxNzWl013TlohavofxOb33srpbD6xHL DvdZ+I259J8cl8yrm1Zu+QQGNzmOAOyFcqkoAt+4Az5rRjUrEF1zc4ZdwoXqNulQaSqI y0SQ/j65wHZwvdBp4Xa2qs1m5DsApz+c+JWQugIEBh5tCNMbtuUgyXrHq75GdHgLv4Nd vjM86DWNnf2FXQUFaf0V2trKnQ+PvXQ9vn8eKqeqakFVX8PKm4vQ54ZvNAT/sD3MHQhj TQOQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@xqq-im.20150623.gappssmtp.com header.s=20150623 header.b=iDczLKgs; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id e1si2144209ejq.139.2021.04.22.05.09.05; Thu, 22 Apr 2021 05:09:06 -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=@xqq-im.20150623.gappssmtp.com header.s=20150623 header.b=iDczLKgs; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B310C689DC4; Thu, 22 Apr 2021 15:09:01 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf1-f182.google.com (mail-pf1-f182.google.com [209.85.210.182]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 674366899EF for ; Thu, 22 Apr 2021 15:08:55 +0300 (EEST) Received: by mail-pf1-f182.google.com with SMTP id i190so31520796pfc.12 for ; Thu, 22 Apr 2021 05:08:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xqq-im.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=pyY5MHstAcJBfi68XG68o29sJAYi8uiwwPtAUIHLoCw=; b=iDczLKgsIEaM1TuaSk7ppro6WacRW3axJ6NSZ6aFLQJTWBqx4uf/xvQxg9fiyWkwnt t77eiAQA/yNL6G4fDgYwqRZW+/V6QUq5jpDFGK4qatn2Qdjh22grMRWtw8cNbu0qaj6Z 09Pa/Mdoc2UxMk0IgNij5CGkFyxJMf5ZFpF2B7DgmYIAVFPcOMz86k0u5fF2CnEVtGxl d2HY9CInuFoqBQW08OdlGFyMidAJXSMK4LHyo2t1sTeqvmtgtBuYnhNtCY3hrJ7CdUg7 eQ/7VgxX4YBwTj7rxRPrlL+6NiDPh+A6WfSp5sFgS1MTdTk4tge5W6TCbi7J5PJurz5V nS+g== 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=pyY5MHstAcJBfi68XG68o29sJAYi8uiwwPtAUIHLoCw=; b=TNAWiBcKeRcM1oVCCE0/xsR1ZlBtFWl+uqjNsU998At2adITcCk29H7QcjG8wlnLvd 3VhXT/YnyAW+A9jrTA0XziIvp5K85FzkNCaVt6cGsn9wT4f/cdwsfa0lQ8ZJj2YQyhb4 eFI12lhWkF4yFN8tuk7Pp7qUw3To0qgXuXzzktzkMFtkXYRZ+unqPpmcIUvWqdUfodUT xifJhXrdmNNCxO004MMEWmUUxNhMZuG4IibJok4xuebk38fCU5avI/BM1iiQm4O7KTsc 67WmsGjC6H5LF3o5smwWoJopIf8zh72mPuc8NrpvuhECrCYlA6ylcjHRKRXt9S+fKlax Gzcg== X-Gm-Message-State: AOAM533KZOVnhh/UvTfOmIMgvCYL3il/LKT2RV8vZMdzqFzF00bs1IYp ANRC0PMg3rkuXF/bBDucBZ9ZTNSg0wUdirat X-Received: by 2002:a17:902:8697:b029:ea:a5dc:925f with SMTP id g23-20020a1709028697b02900eaa5dc925fmr3410886plo.56.1619093013732; Thu, 22 Apr 2021 05:03:33 -0700 (PDT) Received: from zhengqian-xps.lan (ngn-nat1.v4.open.ad.jp. [202.222.12.138]) by smtp.gmail.com with ESMTPSA id l3sm4787667pju.44.2021.04.22.05.03.28 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 22 Apr 2021 05:03:30 -0700 (PDT) From: zheng qian To: ffmpeg-devel@ffmpeg.org Date: Thu, 22 Apr 2021 21:03:09 +0900 Message-Id: <20210422120311.10294-1-xqq@xqq.im> X-Mailer: git-send-email 2.29.2 In-Reply-To: <1245c8f2-93d4-6153-68d8-2351fab30cd4@gmail.com> References: <1245c8f2-93d4-6153-68d8-2351fab30cd4@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 1/3] avformat/mpegtsenc: Fix mpegts_write_pes() for private_stream_2 and other types 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: zheng qian Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: kN3iKkwP9e6i Changes since v2: Fix PES_packet_length mismatch bug According to the PES packet definition defined in Table 2-17 of ISO_IEC_13818-1 specification, some fields like PTS/DTS or pes_extension could only appears if the stream_id meets the condition: if (stream_id != 0xBC && // program_stream_map stream_id != 0xBE && // padding_stream stream_id != 0xBF && // private_stream_2 stream_id != 0xF0 && // ECM stream_id != 0xF1 && // EMM stream_id != 0xFF && // program_stream_directory stream_id != 0xF2 && // DSMCC_stream stream_id != 0xF8) // ITU-T Rec. H.222.1 type E stream And the following stream_id types don't have fields like PTS/DTS: else if ( stream_id == program_stream_map || stream_id == private_stream_2 || stream_id == ECM || stream_id == EMM || stream_id == program_stream_directory || stream_id == DSMCC_stream || stream_id == ITU-T Rec. H.222.1 type E stream ) { for (i = 0; i < PES_packet_length; i++) { PES_packet_data_byte } } Current implementation skipped the judgement of stream_id causing some kind of stream like private_stream_2 to be incorrectly written with PTS/DTS field. For example, Japan DTV transmits news and alerts through ARIB superimpose that utilizes private_stream_2 still could not be remuxed correctly for now. This patch set fixes the remuxing for private_stream_2 and other stream_id types. Signed-off-by: zheng qian --- libavformat/mpegtsenc.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c index f302af84ff..b59dab5174 100644 --- a/libavformat/mpegtsenc.c +++ b/libavformat/mpegtsenc.c @@ -1476,6 +1476,16 @@ static void mpegts_write_pes(AVFormatContext *s, AVStream *st, } } header_len = 0; + + if (stream_id != 0xBC && // program_stream_map + stream_id != 0xBE && // padding_stream + stream_id != 0xBF && // private_stream_2 + stream_id != 0xF0 && // ECM + stream_id != 0xF1 && // EMM + stream_id != 0xFF && // program_stream_directory + stream_id != 0xF2 && // DSMCC_stream + stream_id != 0xF8) { // ITU-T Rec. H.222.1 type E stream + flags = 0; if (pts != AV_NOPTS_VALUE) { header_len += 5; @@ -1569,6 +1579,11 @@ static void mpegts_write_pes(AVFormatContext *s, AVStream *st, memset(q, 0xff, pes_header_stuffing_bytes); q += pes_header_stuffing_bytes; } + } else { + len = payload_size; + *q++ = len >> 8; + *q++ = len; + } is_start = 0; } /* header size */ From patchwork Thu Apr 22 12:03:10 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: zheng qian X-Patchwork-Id: 27210 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:5014:0:0:0:0:0 with SMTP id e20csp517498iob; Thu, 22 Apr 2021 05:11:30 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxNFRluaAqerhhozTGwp+hiqbrXC4AsRdcRq035BCrTPPLQhetqPJQYQ0wfCZBtxDnF6ADR X-Received: by 2002:a17:906:4d10:: with SMTP id r16mr2965816eju.169.1619093490578; Thu, 22 Apr 2021 05:11:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1619093490; cv=none; d=google.com; s=arc-20160816; b=E+xc7aNYbSl6VuA8ZT4gk6gXt2r/ye4MEuvgFICORJGpyXI0GtZmsiK4A8mB6l2m/F x+KRaI/p6jZGUUc5fooB43889FXQyVkfwhhe0IqoP+AWYT2zHmqQlr8RfQXBchX34GeY IB2vscUK2/ViBdDzlJn9Zc2YI6pIW1c6gJ1P0zkInff63ZkzCE1v4RERQTtmpwmFBzn2 cToIBhD+pbuACF2WBzTHdWMerek6TouiUF2kDbg2zMKAOKpJ0Y6BPqle2d/SVWe3BQoI y1WWhvIZ7SF5geZNWLiId2+s9wLM2P2qmoU7BGYjfi7zof2/fZC8gPL5nmiRktcu3i8T s+6A== 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:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=uOz82raP7nVF195ERq8lBrVg8kAWogLoJgz/t4kd/4Q=; b=rKjSXK6uiz7dmZpzvoGMGiGaSLKbkeIlLSyqx1F84obshDk5YrMtyjhYyPOn3bc8Un TVatai8rWfqG77QqobtvbQrcd0C1cfucTitHr1RItaOAuenNn1Cn0KkQtepLeoSjSEJy 1O37Gyn4p1fpxIyt8igZ480lVQB54srw5nDzULpE6Go/cROQ1KfOicz8XJcg9h2o2lAt iKpylKYRw0eU9UuFRz0zLZEnQ+7Ci8tWzjGZTl5YiiimRD91Z23zP8Rdo/mXkEWgyqYF YwW5qWVD//t54VaUpV9ySmBos0LMEQPwYh7bJWlGxrfMPm/UQEM4bIA9uS/tpJHAZGjQ tw/w== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@xqq-im.20150623.gappssmtp.com header.s=20150623 header.b="JM/WCp5l"; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id r15si2038671ejx.748.2021.04.22.05.11.30; Thu, 22 Apr 2021 05:11:30 -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=@xqq-im.20150623.gappssmtp.com header.s=20150623 header.b="JM/WCp5l"; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 59571689F3A; Thu, 22 Apr 2021 15:11:27 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pg1-f182.google.com (mail-pg1-f182.google.com [209.85.215.182]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D5CC8689753 for ; Thu, 22 Apr 2021 15:11:19 +0300 (EEST) Received: by mail-pg1-f182.google.com with SMTP id j7so23268569pgi.3 for ; Thu, 22 Apr 2021 05:11:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xqq-im.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=mRvmthHs4g3dzqFxPne283qls9W1qHL2KDrVEZ1IRqw=; b=JM/WCp5l43brHlshQFWHLIc5F0rL5qsTUH11goDuz8PBgyuHj3igYf3A0nPZwfU1G+ bJmLEhKpADZkqUVNPY6NVumZijtKU4YfWCk98hei0QaRyFXLpTz1lczq687+AxD6u2KW WMwbrrmVYcRzEt2wx/9DMwvUobxIrqLZVYA/hJR6FsxsaYlPcWLpP4QRNTug8TMlqjO7 HPV0/dgxQ+W75O1+NotP3qoB8C6XmEpnZoOwHh64Pn+STkvU6GE6peNe7/aLghkLkHih rRpk8tbV4yrPesHCbTi918SQkgN5KG8MzfnNujVzYtQa10f6doUvnzik7XN54VyQ0DyG KFxQ== 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=mRvmthHs4g3dzqFxPne283qls9W1qHL2KDrVEZ1IRqw=; b=Vcx0xPouukb1zO8AY7iNL2CXaLWkT4qOhZH1AgtrL/GfUpnWaYq1mbdL7Lwg1rLLAF qG9wPN+WneSoc8bUJSiTP1fueigpSX1rUUux22DH/pu3n8PNifsz9CMZChM2mNtiUo7X qqxPSV51k6+M66FFf5uGOsiuSNeOe6fhFo6ii++fkDfvPFIjSiP9FLc1DBj/Q7a5QQyu ZWn1hMY/Ugt03NjRQNsJhKI1EVmYzfYJoRwPuZgFnmirfgyI/6rkY4E/v3ueWtsvQTBU Fh0sp/DuUV5d/Tatk6wtU6fQkOlPBEOv3P06MYVper/qeGNRoQ226cy1GhoxBusnK+yJ 5S/Q== X-Gm-Message-State: AOAM5303LNFflHWr6zl1yh1fzOMqq9uU1XxNuGRpuWFe4QnweH1NebHP N3VOYwpYtOutmLaTiKCBYWJ5AIfS57lCYmZv X-Received: by 2002:a63:dc56:: with SMTP id f22mr3237070pgj.287.1619093017214; Thu, 22 Apr 2021 05:03:37 -0700 (PDT) Received: from zhengqian-xps.lan (ngn-nat1.v4.open.ad.jp. [202.222.12.138]) by smtp.gmail.com with ESMTPSA id l3sm4787667pju.44.2021.04.22.05.03.33 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 22 Apr 2021 05:03:35 -0700 (PDT) From: zheng qian To: ffmpeg-devel@ffmpeg.org Date: Thu, 22 Apr 2021 21:03:10 +0900 Message-Id: <20210422120311.10294-2-xqq@xqq.im> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210422120311.10294-1-xqq@xqq.im> References: <1245c8f2-93d4-6153-68d8-2351fab30cd4@gmail.com> <20210422120311.10294-1-xqq@xqq.im> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 2/3] avformat/mpegtsenc: Fix indentation inside if-clause in mpegts_write_pes() 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: zheng qian Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: qFYhhXcsrwp1 Fix indentation caused by the added stream_id judgement Signed-off-by: zheng qian --- libavformat/mpegtsenc.c | 180 ++++++++++++++++++++-------------------- 1 file changed, 90 insertions(+), 90 deletions(-) diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c index b59dab5174..967f98931d 100644 --- a/libavformat/mpegtsenc.c +++ b/libavformat/mpegtsenc.c @@ -1486,99 +1486,99 @@ static void mpegts_write_pes(AVFormatContext *s, AVStream *st, stream_id != 0xF2 && // DSMCC_stream stream_id != 0xF8) { // ITU-T Rec. H.222.1 type E stream - flags = 0; - if (pts != AV_NOPTS_VALUE) { - header_len += 5; - flags |= 0x80; - } - if (dts != AV_NOPTS_VALUE && pts != AV_NOPTS_VALUE && dts != pts) { - header_len += 5; - flags |= 0x40; - } - if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && - st->codecpar->codec_id == AV_CODEC_ID_DIRAC) { - /* set PES_extension_flag */ - pes_extension = 1; - flags |= 0x01; - - /* One byte for PES2 extension flag + - * one byte for extension length + - * one byte for extension id */ - header_len += 3; - } - /* for Blu-ray AC3 Audio the PES Extension flag should be as follow - * otherwise it will not play sound on blu-ray - */ - if (ts->m2ts_mode && - st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO && - st->codecpar->codec_id == AV_CODEC_ID_AC3) { - /* set PES_extension_flag */ - pes_extension = 1; - flags |= 0x01; - header_len += 3; - } - if (is_dvb_teletext) { - pes_header_stuffing_bytes = 0x24 - header_len; - header_len = 0x24; - } - len = payload_size + header_len + 3; - /* 3 extra bytes should be added to DVB subtitle payload: 0x20 0x00 at the beginning and trailing 0xff */ - if (is_dvb_subtitle) { - len += 3; - payload_size++; - } - if (len > 0xffff) - len = 0; - if (ts->omit_video_pes_length && st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { - len = 0; - } - *q++ = len >> 8; - *q++ = len; - val = 0x80; - /* data alignment indicator is required for subtitle and data streams */ - if (st->codecpar->codec_type == AVMEDIA_TYPE_SUBTITLE || st->codecpar->codec_type == AVMEDIA_TYPE_DATA) - val |= 0x04; - *q++ = val; - *q++ = flags; - *q++ = header_len; - if (pts != AV_NOPTS_VALUE) { - write_pts(q, flags >> 6, pts); - q += 5; - } - if (dts != AV_NOPTS_VALUE && pts != AV_NOPTS_VALUE && dts != pts) { - write_pts(q, 1, dts); - q += 5; - } - if (pes_extension && st->codecpar->codec_id == AV_CODEC_ID_DIRAC) { - flags = 0x01; /* set PES_extension_flag_2 */ - *q++ = flags; - *q++ = 0x80 | 0x01; /* marker bit + extension length */ - /* Set the stream ID extension flag bit to 0 and - * write the extended stream ID. */ - *q++ = 0x00 | 0x60; - } - /* For Blu-ray AC3 Audio Setting extended flags */ - if (ts->m2ts_mode && - pes_extension && - st->codecpar->codec_id == AV_CODEC_ID_AC3) { - flags = 0x01; /* set PES_extension_flag_2 */ + flags = 0; + if (pts != AV_NOPTS_VALUE) { + header_len += 5; + flags |= 0x80; + } + if (dts != AV_NOPTS_VALUE && pts != AV_NOPTS_VALUE && dts != pts) { + header_len += 5; + flags |= 0x40; + } + if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && + st->codecpar->codec_id == AV_CODEC_ID_DIRAC) { + /* set PES_extension_flag */ + pes_extension = 1; + flags |= 0x01; + + /* One byte for PES2 extension flag + + * one byte for extension length + + * one byte for extension id */ + header_len += 3; + } + /* for Blu-ray AC3 Audio the PES Extension flag should be as follow + * otherwise it will not play sound on blu-ray + */ + if (ts->m2ts_mode && + st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO && + st->codecpar->codec_id == AV_CODEC_ID_AC3) { + /* set PES_extension_flag */ + pes_extension = 1; + flags |= 0x01; + header_len += 3; + } + if (is_dvb_teletext) { + pes_header_stuffing_bytes = 0x24 - header_len; + header_len = 0x24; + } + len = payload_size + header_len + 3; + /* 3 extra bytes should be added to DVB subtitle payload: 0x20 0x00 at the beginning and trailing 0xff */ + if (is_dvb_subtitle) { + len += 3; + payload_size++; + } + if (len > 0xffff) + len = 0; + if (ts->omit_video_pes_length && st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { + len = 0; + } + *q++ = len >> 8; + *q++ = len; + val = 0x80; + /* data alignment indicator is required for subtitle and data streams */ + if (st->codecpar->codec_type == AVMEDIA_TYPE_SUBTITLE || st->codecpar->codec_type == AVMEDIA_TYPE_DATA) + val |= 0x04; + *q++ = val; *q++ = flags; - *q++ = 0x80 | 0x01; /* marker bit + extension length */ - *q++ = 0x00 | 0x71; /* for AC3 Audio (specifically on blue-rays) */ - } + *q++ = header_len; + if (pts != AV_NOPTS_VALUE) { + write_pts(q, flags >> 6, pts); + q += 5; + } + if (dts != AV_NOPTS_VALUE && pts != AV_NOPTS_VALUE && dts != pts) { + write_pts(q, 1, dts); + q += 5; + } + if (pes_extension && st->codecpar->codec_id == AV_CODEC_ID_DIRAC) { + flags = 0x01; /* set PES_extension_flag_2 */ + *q++ = flags; + *q++ = 0x80 | 0x01; /* marker bit + extension length */ + /* Set the stream ID extension flag bit to 0 and + * write the extended stream ID. */ + *q++ = 0x00 | 0x60; + } + /* For Blu-ray AC3 Audio Setting extended flags */ + if (ts->m2ts_mode && + pes_extension && + st->codecpar->codec_id == AV_CODEC_ID_AC3) { + flags = 0x01; /* set PES_extension_flag_2 */ + *q++ = flags; + *q++ = 0x80 | 0x01; /* marker bit + extension length */ + *q++ = 0x00 | 0x71; /* for AC3 Audio (specifically on blue-rays) */ + } - if (is_dvb_subtitle) { - /* First two fields of DVB subtitles PES data: - * data_identifier: for DVB subtitle streams shall be coded with the value 0x20 - * subtitle_stream_id: for DVB subtitle stream shall be identified by the value 0x00 */ - *q++ = 0x20; - *q++ = 0x00; - } - if (is_dvb_teletext) { - memset(q, 0xff, pes_header_stuffing_bytes); - q += pes_header_stuffing_bytes; - } + if (is_dvb_subtitle) { + /* First two fields of DVB subtitles PES data: + * data_identifier: for DVB subtitle streams shall be coded with the value 0x20 + * subtitle_stream_id: for DVB subtitle stream shall be identified by the value 0x00 */ + *q++ = 0x20; + *q++ = 0x00; + } + if (is_dvb_teletext) { + memset(q, 0xff, pes_header_stuffing_bytes); + q += pes_header_stuffing_bytes; + } } else { len = payload_size; *q++ = len >> 8; From patchwork Thu Apr 22 12:03:11 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: zheng qian X-Patchwork-Id: 27211 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:5014:0:0:0:0:0 with SMTP id e20csp530323iob; Thu, 22 Apr 2021 05:27:56 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyaaLx8tqDPskCm4lV7Of37kiGhN5D0rSm+tN7a78T0wYnDzB///Q+jw5txvmX/Pomf6CxV X-Received: by 2002:a17:906:d922:: with SMTP id rn2mr3201145ejb.165.1619094476518; Thu, 22 Apr 2021 05:27:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1619094476; cv=none; d=google.com; s=arc-20160816; b=dGIsiXwjMcIz7yDkhdtAkuWSTRXq4zMBGL+koMuI5CX6EQb1DpvtYhMRSr5iNSd2/q 8b9JiHHlfju2dAP3ovrXV610FUKxsHIS6qsZRMZIe7+cfjlkaUMeA8RFzgHSRNjA9Wqy 9x/0xCwJUD1N66OF/dYKIB+UsHOv5FV/MH3VDUAPWrcZfesbveDVWstxlrgZEJQ79kOt Ktwzi/Qo0WqJ5rCLjoN78iUQsEAQy2XeGr+c/WRSyL+wq6xbcKOpVAijM4Zpq/wPQuSb heu8wqfmj0DA2WGsc0Y3lJso7jCL69GElNb5CN+tCLOpiW4k8it3rAKN0raCWgn2XY6K kefg== 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:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=UzZ4jrMtovKsUd+ndjBD/uMPgeeIXgydELv6moElYd8=; b=CnDNRY3ecSGtkelJnWp1p8UlSzw6EKo24DJ3Rk8B5Umw/nB7/zLvo3zO3K0DuI/s5V qz+vrTVDw2mydAla33U5paIJRBoskbzW4qSHny7RXTTw8KlzB+WS/79UidkbFtbnXzjL V/D+AVA9+urv/urb8R9YIPt3Z1JI0Jqb4Th6rOFvdF8+aQ5RIveOKYKpMNLu8Up1AxHx abnWm8YJajIBeB/VniqKoKG5zgZDI5yUzfZqSxcUk8WL+9UwILh8TwTsSynoomL+Sm0Q RxsxEeaB1dCv4q2ALMlw7f/R4mkPRM7SVm8u0MTgcNl86Atd+N0w1GOPrqRnNi4zoPO7 CUTQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@xqq-im.20150623.gappssmtp.com header.s=20150623 header.b="YGRjIZe/"; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id b18si2136179edr.597.2021.04.22.05.27.56; Thu, 22 Apr 2021 05:27:56 -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=@xqq-im.20150623.gappssmtp.com header.s=20150623 header.b="YGRjIZe/"; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 06380689E94; Thu, 22 Apr 2021 15:27:53 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qv1-f43.google.com (mail-qv1-f43.google.com [209.85.219.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 87955680204 for ; Thu, 22 Apr 2021 15:27:46 +0300 (EEST) Received: by mail-qv1-f43.google.com with SMTP id l2so3967005qvb.7 for ; Thu, 22 Apr 2021 05:27:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xqq-im.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=n34sDuRqtjd6m4wlWl8Ro9PG6Cum5O2xC0SZ3FRmZdA=; b=YGRjIZe/24fUYz60Zt57s+73dku16qZ+GXf3+ceLxKb4zP3yDvCd2OOSgkKI5dYlkj CHj+6IXhJg7ZBWc2p4ac9HXeffkBh9ycvpjZayP6fcMhIxbDGCxsE5y3jvpYXlj3wrAx gQYaQ46yQxuxONVNN+bo/QFncI86HBWAkWVDdf6eNKqkX34zF4MHLYBd4S333HmUvmor PBkDtuz0F/0YpnwNkAslsZb7w76eSCHkT3cVNqDFMlY/0isufMRKMr9bsHtvtMhG1ZND Kn/ZRyxNUHyGZ7x83y+dsGpJ9LkYPtze7yWDKUsHpGBp+rb1HVLXTs2X52//aR7CEBBj EPEg== 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=n34sDuRqtjd6m4wlWl8Ro9PG6Cum5O2xC0SZ3FRmZdA=; b=J7wnB2yyY9CZ6/SEayB8vplKRqGSRQ5GhvS4FFCpBXQ0UoxlCUAkSYrigrd3Mw9TN4 mzEGpIhNSfa7TLejDKuNTKlUmXxs/ZKQ6L9cFboOTXRgh7nojEjGcyo/pYcKvTWMC5l/ A57UmuliEn8cc2G3YqZrN1KoBvyOOhRGi1oavlDOOmWdpsQ0Lm4G4MHHRycIR6nycLP0 ymAeDX5A1ttZoeIqejAH4AUvuRS4cmzwq0GWr48Hshcz1SraRQCutsuLkyLhBu0DjJIQ 92F982TUgI9STzkfEjEtZ9PeDQPSJBxHEVTi/gwrKaX6/IAYGdU3OL0XEiOYhjdOyC2b /z+Q== X-Gm-Message-State: AOAM5316mLxy5swubibHe5CAt+/bg19IiWAJ5CdSTv63/IyzIqZBDBH3 5ApNdXL+h9MUsxhu6JXaJf2kOw33xB/xbapP X-Received: by 2002:a17:902:9a84:b029:ea:e627:f7c2 with SMTP id w4-20020a1709029a84b02900eae627f7c2mr3323609plp.57.1619093020133; Thu, 22 Apr 2021 05:03:40 -0700 (PDT) Received: from zhengqian-xps.lan (ngn-nat1.v4.open.ad.jp. [202.222.12.138]) by smtp.gmail.com with ESMTPSA id l3sm4787667pju.44.2021.04.22.05.03.37 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 22 Apr 2021 05:03:38 -0700 (PDT) From: zheng qian To: ffmpeg-devel@ffmpeg.org Date: Thu, 22 Apr 2021 21:03:11 +0900 Message-Id: <20210422120311.10294-3-xqq@xqq.im> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210422120311.10294-1-xqq@xqq.im> References: <1245c8f2-93d4-6153-68d8-2351fab30cd4@gmail.com> <20210422120311.10294-1-xqq@xqq.im> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 3/3] avformat/mpegtsenc: Write stream_id into PES after stream_id decision 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: zheng qian Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 34p35PSlSBEl Since stream_id will have effect on the existences of PES header fields like PTS/DTS, it should be better to guarantee stream_id variable to be identical with exact written value. Signed-off-by: zheng qian --- libavformat/mpegtsenc.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c index 967f98931d..525c68ffd1 100644 --- a/libavformat/mpegtsenc.c +++ b/libavformat/mpegtsenc.c @@ -1445,28 +1445,28 @@ static void mpegts_write_pes(AVFormatContext *s, AVStream *st, is_dvb_teletext = 0; if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { if (st->codecpar->codec_id == AV_CODEC_ID_DIRAC) - *q++ = STREAM_ID_EXTENDED_STREAM_ID; + stream_id = STREAM_ID_EXTENDED_STREAM_ID; else - *q++ = STREAM_ID_VIDEO_STREAM_0; + stream_id = STREAM_ID_VIDEO_STREAM_0; } else if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO && (st->codecpar->codec_id == AV_CODEC_ID_MP2 || st->codecpar->codec_id == AV_CODEC_ID_MP3 || st->codecpar->codec_id == AV_CODEC_ID_AAC)) { - *q++ = STREAM_ID_AUDIO_STREAM_0; + stream_id = STREAM_ID_AUDIO_STREAM_0; } else if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO && st->codecpar->codec_id == AV_CODEC_ID_AC3 && ts->m2ts_mode) { - *q++ = STREAM_ID_EXTENDED_STREAM_ID; + stream_id = STREAM_ID_EXTENDED_STREAM_ID; } else if (st->codecpar->codec_type == AVMEDIA_TYPE_DATA && st->codecpar->codec_id == AV_CODEC_ID_TIMED_ID3) { - *q++ = STREAM_ID_PRIVATE_STREAM_1; + stream_id = STREAM_ID_PRIVATE_STREAM_1; } else if (st->codecpar->codec_type == AVMEDIA_TYPE_DATA) { - *q++ = stream_id != -1 ? stream_id : STREAM_ID_METADATA_STREAM; + stream_id = stream_id != -1 ? stream_id : STREAM_ID_METADATA_STREAM; if (stream_id == STREAM_ID_PRIVATE_STREAM_1) /* asynchronous KLV */ pts = dts = AV_NOPTS_VALUE; } else { - *q++ = STREAM_ID_PRIVATE_STREAM_1; + stream_id = STREAM_ID_PRIVATE_STREAM_1; if (st->codecpar->codec_type == AVMEDIA_TYPE_SUBTITLE) { if (st->codecpar->codec_id == AV_CODEC_ID_DVB_SUBTITLE) { is_dvb_subtitle = 1; @@ -1475,6 +1475,7 @@ static void mpegts_write_pes(AVFormatContext *s, AVStream *st, } } } + *q++ = stream_id; header_len = 0; if (stream_id != 0xBC && // program_stream_map