From patchwork Mon Jan 29 14:54:30 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nuo Mi X-Patchwork-Id: 45885 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:8786:b0:199:de12:6fa6 with SMTP id ph6csp1573738pzb; Mon, 29 Jan 2024 06:55:46 -0800 (PST) X-Google-Smtp-Source: AGHT+IFqlArjmgxThuQ5yZTk7lzx5CQEwlfYkaaeGsgQPP4dgdF9Kr/a1xrUNK17n/3WCdR49u7Q X-Received: by 2002:a17:906:3c18:b0:a35:2623:fc83 with SMTP id h24-20020a1709063c1800b00a352623fc83mr4973950ejg.4.1706540145859; Mon, 29 Jan 2024 06:55:45 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id lu44-20020a170906faec00b00a35fe2c3d06si91247ejb.502.2024.01.29.06.55.45; Mon, 29 Jan 2024 06:55:45 -0800 (PST) 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=@outlook.com header.s=selector1 header.b=Iz1sAw1j; arc=fail (body hash mismatch); 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=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A5F6A68D208; Mon, 29 Jan 2024 16:55:15 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from APC01-TYZ-obe.outbound.protection.outlook.com (mail-tyzapc01olkn2108.outbound.protection.outlook.com [40.92.107.108]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8A23E68D206 for ; Mon, 29 Jan 2024 16:55:09 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PRTyVD55ErBqVEqdjHu16HZMENku1Oy6SN1yNdva7PaRJRTu/PPirZKVqcjJonM1w565GPA6PWspXod8db8xJK7go2I7qs/Wo2B63fppmp3hWz8gMkfqHpZoFtww7USk32NCe6tpmgQveGrJBWobukcq7TMfpOvQET3mEleNkJAVUMWZ/zWXdizJuTPCPb6tSiIc/jaDLlk2eJ1FkLwsvpnvpLpDiLLt1xCaSzhpdGodEynR1cV/GYkzilajo9WO2JvXAcVBJdlEsfHoD28ZqWpCNKI1mrGKy1/Ro7dUg16ShXFLo17OJJNFCNsUPSRPpKRbkld2PaTiZGqnJOeKzQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=AoVBPpzW4a7aDn9D7ldoZye+f8sPOq8JYqANxf7jBSU=; b=GwBbe+NlgxsO+MB4SAZjlTsvAF7Wq3ehMfisY3+TrIvFAmQw2Il0vYjHV1r4uArOt2dDAWg0ya+95aGBc88MdswkjZ2IpzEwAtn3UPL4AU7OEIg6oib+s+baxDfsUkey8HsPKEabeaUGfuDgaBz6pb3XJoCN+gI3K83T2RhUEL9jhd6vH3p2l5L7e0HkauGBEaJdFc9e6irtEbtP3ET7TPTdkcyI6QZ9x0h5S0rMXZ4lbNg83Eh6gZsaP9yRhppMPNWd92DPbkDWojMZJYMI51XfcHWiJQKqmLhPL6qwIM9/SjaZ2Tm76efio2N//jiY5YueG3KNMdu5kGIIvRZCqA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=AoVBPpzW4a7aDn9D7ldoZye+f8sPOq8JYqANxf7jBSU=; b=Iz1sAw1jBB/hVhU8HiBAhjusekn1aQhEkyWEAn9BWlTMbGdkXPt05JngHODSE4E0YzHZ2JVqHATKfIlpfHN30eYficOPoFEXFqI8SqXSnxrraEffubjNorwiZZq8EJ2RsYCB9EdcCzW8qMS4B7+kP+pea/ZZUBd3tTOaq4k3xzHGq0++jGs/iwqxOhQ4W29e4As0AkpjyEaJhn2e5P7LzZPRuF0gKmHVqnpnm/qfRDgwuYuQ6HErJoM9OZIm8D5O4gTZeVcpI1AvB49qVIDTNG46/O1M+CgPDV7brR5vTGzbTvS5LpCbzDRqjwnKljlaaHCaLbIldvm1Cm4lftCQhQ== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by SEZPR06MB6383.apcprd06.prod.outlook.com (2603:1096:101:12c::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7228.32; Mon, 29 Jan 2024 14:54:54 +0000 Received: from TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::e139:fd7a:1b66:a3f7]) by TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::e139:fd7a:1b66:a3f7%7]) with mapi id 15.20.7228.029; Mon, 29 Jan 2024 14:54:54 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Mon, 29 Jan 2024 22:54:30 +0800 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240129145432.9053-1-nuomi2021@gmail.com> References: <20240129145432.9053-1-nuomi2021@gmail.com> X-TMN: [Wyj/C/iSn6SHA8OSLpf6VpINo1UVI5Aj] X-ClientProxiedBy: TYCP286CA0232.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:3c7::18) To TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) X-Microsoft-Original-Message-ID: <20240129145432.9053-5-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|SEZPR06MB6383:EE_ X-MS-Office365-Filtering-Correlation-Id: 831439f6-750c-4bb9-50c8-08dc20da40a5 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: M7pYUvQXIEYXMAW5m5yTq+YoSHv6a9PpIaGZFt4hNtgoCTUA07kS8XiNv3z7ZcDwF6unO6ftpKJxWZ54AAbr1LKkJdvfU57qQvKAfJhPJC2/imQtM2Px6M8gcy7EoVkP0/7RlJME31P6ntcfrHcUrWpx1S2+nQWhtoF9kZYRO4uWLrz2vIOBL9z0IIkFhZYFuMphlZWwFM44fOmgRAn8oQ3ziQHkxYh2A1tl4Ncb+OrTeXecUrN6DH0tTcmEbBdzdy9myWQlcZrmcR3EsDD9VBt9t+vkE+ny2WnlbI5kmXwrrZMoCAZNcQu60SU526TdonWVCfei0qi7FITGHf2Kvq/Ni7E3JlYpp8O2DP6EIBqFSGatR47d96iickaNJ1ZL9PlxCZ3ZgcP92IB72i2pEwWaV8LUgXA+5NJLpVBTGVPIoFpC08NnVw8NoBVnyOhn0AT46+sObiGf3S58BI+7SGr8PF49qsTmYktPYN5VkUFz8jhVA48uy8fubOxjcBhSyXfRwpa8Rk9WhM3YMa7ZZh4lghuAqS3jlpl6h+y0IB20/QmpIqoXPFKmBDpesPVqJXh5OCh3C7X/MhCpPu+Qfed4BkLPHFKv7/yd46xkWQkSwgVfjCK56iETBocevIh5 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: A0zuSzsfiFTgFTyswv7wrGsyePp8E1quD1N2b/5V7gO79mZ7AVsvXuBFFaSEAXVK2E9WXKD6xQuOxN/d2egYlNn89C0+Kutv/2nJklKd9gYvp+JYvuZeVbBXC2xodPXrPEKlyXFkoxuk9axP03yGlLhP8+wuArGEcydZEFeAHNWQHk1pXTXddVaU8SkPsX4WtKjc5NjEktLZTMn1cbkzjMe20RlxB3p+cHtn2ViSLDHrK8TL1RQKntPXln6zMHSSr6Ax7pjplob5oLJfLVD3MQITpcHzKuTC3rV9jteiobQXO6N81ehGXoESFI85tiyrvXIk5raoyu7Db7Vzyw0toi3FathKoLYibXTv7SsD/35YQ8nQ2bfhRjO2A/s/7Y4heITEdCYgY2t/LeONGOciE4J+8en1+kODkmZJ3HT4HrIMkIExM7KCL94BLLOaybd0aKxC7qK2mo64g5pLC1FaVqmCvlRvtZJ/IPvEwYPDRpbRCzslxRoRNG+/oqsE0u2BmR69s4i7k74LzTp6M5f8XI+nRCakUeaC4WhIxqiWBvITvZCb06E7DnnDeei5rTqsQshKBv0Qy435dfxfIvtszqrz1ONxyYTSeplsT7QfrQlGeZE01jdIRA4DI8bFGDat/6kg9QeQQ8Il9lbxU1vl3Ojl9qCRLTeAAzzyGrV+wGDL9dgetEOg0I8sjqggiqmNRZHvcbMKNVudITKsww7XuKoq+e6ES3QkjqIa1ogbI64Gy1ox3qOWxRGgFwjeuKVkD25BORVTduyRRVsNlQ9xTT2txMzK7oiMkuw2QSupnrcajXNj8Fw4El/M57H2AriFb/p908lkEV2+WoZhZP1mLqaty55SuCf7YANwznIJqLhl4UQ3wA+YX25hryRBGWbNCoaGa4jIAGa623sQuiBpR3rybJVB5NowfU1TtNscgzQbVBt5pbs4csLbWgv7SkcCyuRN1lI6EKZN4qgEs4IUHYo8BNWHOlEspevKyyZtsmWl3Mq5i4GyLbKDvaEsdrxBCDGqu9EzvOzYQtX5fIUVoXrruJzX8HX2PRgQ39z3HjHoMuE6MKgtsJXtQshfwE3obw88pamq8gRAaW9+WAPlJKYXg04+CIBaxa22xcjZqeUToVbyVwBm2Igk59B7/LE69ElTgqENLCjLz7LAz5nZD9YMXj4Cxq79FmlAeC6FkmBjgiSE2epeia1gQuSYeEh3z3xTzUwFZpsyACrgZ4hFQNsBy9rmdql0+8b5lLXHbGlPbgugL5gOnuxcPKkdjCDM X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 831439f6-750c-4bb9-50c8-08dc20da40a5 X-MS-Exchange-CrossTenant-AuthSource: TYSPR06MB6433.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Jan 2024 14:54:54.1094 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SEZPR06MB6383 Subject: [FFmpeg-devel] [PATCH v4 4/6] avformat/mpegtsenc: refact, remove h264, hevc magic numbers for nal_type 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: Nuo Mi Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: UxUYDditZaGr --- libavformat/mpegtsenc.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c index 5e089f2866..3872be0f46 100644 --- a/libavformat/mpegtsenc.c +++ b/libavformat/mpegtsenc.c @@ -31,6 +31,7 @@ #include "libavcodec/bytestream.h" #include "libavcodec/defs.h" #include "libavcodec/h264.h" +#include "libavcodec/hevc.h" #include "libavcodec/startcode.h" #include "avformat.h" @@ -1833,6 +1834,8 @@ static int opus_get_packet_samples(AVFormatContext *s, AVPacket *pkt) return duration; } +#define H264_NAL_TYPE(state) (state & 0x1f) +#define HEVC_NAL_TYPE(state) ((state & 0x7e) >> 1) static int mpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt) { AVStream *st = s->streams[pkt->stream_index]; @@ -1876,6 +1879,7 @@ static int mpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt) if (st->codecpar->codec_id == AV_CODEC_ID_H264) { const uint8_t *p = buf, *buf_end = p + size; const uint8_t *found_aud = NULL, *found_aud_end = NULL; + int nal_type; uint32_t state = -1; int extradd = (pkt->flags & AV_PKT_FLAG_KEY) ? st->codecpar->extradata_size : 0; int ret = ff_check_h264_startcode(s, st, pkt); @@ -1890,10 +1894,11 @@ static int mpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt) * are assumed to be available in 'extradata' if not found in-band. */ do { p = avpriv_find_start_code(p, buf_end, &state); - av_log(s, AV_LOG_TRACE, "nal %"PRId32"\n", state & 0x1f); - if ((state & 0x1f) == H264_NAL_SPS) + nal_type = H264_NAL_TYPE(state); + av_log(s, AV_LOG_TRACE, "nal %"PRId32"\n", nal_type); + if (nal_type == H264_NAL_SPS) extradd = 0; - if ((state & 0x1f) == H264_NAL_AUD) { + if (nal_type == H264_NAL_AUD) { found_aud = p - 4; // start of the 0x000001 start code. found_aud_end = p + 1; // first byte past the AUD. if (found_aud < buf) @@ -1902,10 +1907,10 @@ static int mpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt) found_aud_end = buf_end; } } while (p < buf_end - && (state & 0x1f) != H264_NAL_IDR_SLICE - && (state & 0x1f) != H264_NAL_SLICE + && nal_type != H264_NAL_IDR_SLICE + && nal_type != H264_NAL_SLICE && (extradd > 0 || !found_aud)); - if ((state & 0x1f) != H264_NAL_IDR_SLICE) + if (nal_type != H264_NAL_IDR_SLICE) extradd = 0; if (!found_aud) { @@ -1974,6 +1979,7 @@ static int mpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt) } else if (st->codecpar->codec_id == AV_CODEC_ID_HEVC) { const uint8_t *p = buf, *buf_end = p + size; uint32_t state = -1; + int nal_type; int extradd = (pkt->flags & AV_PKT_FLAG_KEY) ? st->codecpar->extradata_size : 0; int ret = check_h26x_startcode(s, st, pkt, "hevc"); if (ret < 0) @@ -1984,22 +1990,22 @@ static int mpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt) do { p = avpriv_find_start_code(p, buf_end, &state); - av_log(s, AV_LOG_TRACE, "nal %"PRId32"\n", (state & 0x7e)>>1); - if ((state & 0x7e) == 2*32) + nal_type = HEVC_NAL_TYPE(state); + av_log(s, AV_LOG_TRACE, "nal %"PRId32"\n", nal_type); + if (nal_type == HEVC_NAL_VPS) extradd = 0; - } while (p < buf_end && (state & 0x7e) != 2*35 && - (state & 0x7e) >= 2*32); + } while (p < buf_end && nal_type != HEVC_NAL_AUD && nal_type >= HEVC_NAL_VPS); - if ((state & 0x7e) < 2*16 || (state & 0x7e) >= 2*24) + if (nal_type < HEVC_NAL_BLA_W_LP || nal_type >= HEVC_NAL_RSV_VCL24) extradd = 0; - if ((state & 0x7e) != 2*35) { // AUD NAL + if (nal_type != HEVC_NAL_AUD) { // AUD NAL data = av_malloc(pkt->size + 7 + extradd); if (!data) return AVERROR(ENOMEM); memcpy(data + 7, st->codecpar->extradata, extradd); memcpy(data + 7 + extradd, pkt->data, pkt->size); AV_WB32(data, 0x00000001); - data[4] = 2*35; + data[4] = (HEVC_NAL_AUD << 1); data[5] = 1; data[6] = 0x50; // any slice type (0x4) + rbsp stop one bit buf = data;