From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id D8F8548E67 for ; Mon, 29 Jan 2024 14:55:43 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 739EB68D21B; Mon, 29 Jan 2024 16:55:15 +0200 (EET) 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: =?us-ascii?Q?A0zuSzsfiFTgFTyswv7wrGsyePp8E1quD1N2b/5V7gO79mZ7AVsvXuBFFaSE?= =?us-ascii?Q?AXVK2E9WXKD6xQuOxN/d2egYlNn89C0+Kutv/2nJklKd9gYvp+JYvuZeVbBX?= =?us-ascii?Q?C2xodPXrPEKlyXFkoxuk9axP03yGlLhP8+wuArGEcydZEFeAHNWQHk1pXTXd?= =?us-ascii?Q?dVaU8SkPsX4WtKjc5NjEktLZTMn1cbkzjMe20RlxB3p+cHtn2ViSLDHrK8TL?= =?us-ascii?Q?1RQKntPXln6zMHSSr6Ax7pjplob5oLJfLVD3MQITpcHzKuTC3rV9jteiobQX?= =?us-ascii?Q?O6N81ehGXoESFI85tiyrvXIk5raoyu7Db7Vzyw0toi3FathKoLYibXTv7SsD?= =?us-ascii?Q?/35YQ8nQ2bfhRjO2A/s/7Y4heITEdCYgY2t/LeONGOciE4J+8en1+kODkmZJ?= =?us-ascii?Q?3HT4HrIMkIExM7KCL94BLLOaybd0aKxC7qK2mo64g5pLC1FaVqmCvlRvtZJ/?= =?us-ascii?Q?IPvEwYPDRpbRCzslxRoRNG+/oqsE0u2BmR69s4i7k74LzTp6M5f8XI+nRCak?= =?us-ascii?Q?UeaC4WhIxqiWBvITvZCb06E7DnnDeei5rTqsQshKBv0Qy435dfxfIvtszqrz?= =?us-ascii?Q?1ONxyYTSeplsT7QfrQlGeZE01jdIRA4DI8bFGDat/6kg9QeQQ8Il9lbxU1vl?= =?us-ascii?Q?3Ojl9qCRLTeAAzzyGrV+wGDL9dgetEOg0I8sjqggiqmNRZHvcbMKNVudITKs?= =?us-ascii?Q?ww7XuKoq+e6ES3QkjqIa1ogbI64Gy1ox3qOWxRGgFwjeuKVkD25BORVTduyR?= =?us-ascii?Q?RVsNlQ9xTT2txMzK7oiMkuw2QSupnrcajXNj8Fw4El/M57H2AriFb/p908lk?= =?us-ascii?Q?EV2+WoZhZP1mLqaty55SuCf7YANwznIJqLhl4UQ3wA+YX25hryRBGWbNCoaG?= =?us-ascii?Q?a4jIAGa623sQuiBpR3rybJVB5NowfU1TtNscgzQbVBt5pbs4csLbWgv7SkcC?= =?us-ascii?Q?yuRN1lI6EKZN4qgEs4IUHYo8BNWHOlEspevKyyZtsmWl3Mq5i4GyLbKDvaEs?= =?us-ascii?Q?drxBCDGqu9EzvOzYQtX5fIUVoXrruJzX8HX2PRgQ39z3HjHoMuE6MKgtsJXt?= =?us-ascii?Q?QshfwE3obw88pamq8gRAaW9+WAPlJKYXg04+CIBaxa22xcjZqeUToVbyVwBm?= =?us-ascii?Q?2Igk59B7/LE69ElTgqENLCjLz7LAz5nZD9YMXj4Cxq79FmlAeC6FkmBjgiSE?= =?us-ascii?Q?2epeia1gQuSYeEh3z3xTzUwFZpsyACrgZ4hFQNsBy9rmdql0+8b5lLXHbGlP?= =?us-ascii?Q?bgugL5gOnuxcPKkdjCDM?= 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: --- 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; -- 2.25.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".