From patchwork Tue Jan 30 12:49:01 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nuo Mi X-Patchwork-Id: 45904 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:8786:b0:199:de12:6fa6 with SMTP id ph6csp2130847pzb; Tue, 30 Jan 2024 04:51:30 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCXozHNs+BNnglCE1kUlkp9MRoHfcpp1VnvRx+i6Kvr5akI/pSHNfT7VghGezutalBCfq4PyZp9cLcIN72cwoQfP8ULpaO8ciNBo0A== X-Google-Smtp-Source: AGHT+IFzcqmLRJarC2w1mbPbxhBqpS10U044M3UUzCzDvc5UDijg4QUXu9DSA0J+qKMu+7YgkynQ X-Received: by 2002:a05:6402:3457:b0:55e:fc89:5d40 with SMTP id l23-20020a056402345700b0055efc895d40mr3407826edc.0.1706619089954; Tue, 30 Jan 2024 04:51:29 -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 p1-20020a05640210c100b0054bf6c62e5asi4525820edu.419.2024.01.30.04.51.29; Tue, 30 Jan 2024 04:51:29 -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=qcHctlgl; 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 CD95868D360; Tue, 30 Jan 2024 14:51:05 +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-tyzapc01olkn2061.outbound.protection.outlook.com [40.92.107.61]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4A1F368D35A for ; Tue, 30 Jan 2024 14:50:59 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dCuA43FJQV2nbky6EEz8rs64Y61HoA5X+tkBQNkYHp/x2ovg74K+xtuvwYXpx/YQgthMhZLP8vw2QhiEA1GvzjkGq8k+wiW/FfyLg/UnYj1iW45rmfjCIfZYRrVfc7CJ/qxhBVFhV1d9eaipd9B3TxpMXw+I4sDNfm+mdVdGaPGNeQHoVYGrs4kmR0V+XixE1R9moJPWLCH6n8GJsJv/tyTTzyr7lLngwQLncE+BfLm7FproGYuhguOu1YGCxP8FHAHsSgIWW2dNGkBAMGYt8lwNwYXee73XUXH3I+Hie41zr/lx2EelW1etDJJc1FlI601RAeEACDhNhJBqzbaNzg== 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=dss210u8IdWo9joIoVbhXvD3LfaFwq7wP1DSbZqWUwsD+XmROafnLAXKJ2rBwy+E431I90wDvLf1yznAfF+1K9XsJo12c7TFuAeEkFVV3SDdi3v9U/ibWDNGn9sS028nU9JVWyjSyg0FEhfpHufoj/o6adKv7HeYCdLLEMdeGUoTfDnpbsQXUcN3Ply+bXtnKxQofTn3G8guiBD7S3vZZFX9+CVRs6ej46vsgCgaDeBLGrxDAlpB2FeHT1W7YDw9h8KJmjvRRT9xNn0lChMXvL4DWGKihQ+FajCzqlo8Chd7XlskikpSBg1k+grjJuwAxwy+uN2fq+2IW0DmFUfMyg== 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=qcHctlglEqdXFp56Nw8dPqiXzUlQzKDNiBNXj5qGhfLGlj31UUssk8WlTkpCL2S8Xi2jGAlRHU2hlwspDkXdZIAbsLYolkNLuoiTsCiN/WE56hcyegSZzi5FnL1dvswL+ByuRRhcbQGa25in24FhCfsPluEoVNPrQ2D+471N/zujuquRVylmlytSwWrvqVpWZfzrP7WkvnhDi0TzFNYFilF0sGu2PoGv2CPh17JGE9/y9pmwAzH2n7cetMP5/uBRh4yLWgrnUAoIvk+MdtZhlFl2o3492i0Qol3W3Fpc2swb1GBP37TaZBuLn1EyzTo6OfMzqBJM5dATNdpjf2itnA== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by TYZPR06MB7274.apcprd06.prod.outlook.com (2603:1096:405:ab::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7228.32; Tue, 30 Jan 2024 12:50:47 +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; Tue, 30 Jan 2024 12:50:47 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Tue, 30 Jan 2024 20:49:01 +0800 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240130124903.16892-1-nuomi2021@gmail.com> References: <20240130124903.16892-1-nuomi2021@gmail.com> X-TMN: [11q2OP3lCWwbPo+mKE9kx71NJDAPpnPr] X-ClientProxiedBy: SI2PR02CA0035.apcprd02.prod.outlook.com (2603:1096:4:195::22) To TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) X-Microsoft-Original-Message-ID: <20240130124903.16892-5-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|TYZPR06MB7274:EE_ X-MS-Office365-Filtering-Correlation-Id: a3f098c8-c9c1-4ffb-71c1-08dc219214a0 X-MS-Exchange-SLBlob-MailProps: znQPCv1HvwUOfv/FaQKFvjfX5nGwqybwcEDA0DM+CYm84eDYkxYESvgY7P9A30WeHBUpVo+dKfmUvu1CVOUxTlULJ76y4CujRmQcB84JMT9ov4Oy26j0mF7+SMDPY8nrJ8yKOk5tJ78Zg5ovMR2CkXYXrAQoTbWr+/SLObfU9PMSKRjujJgo5aYK9af6SHt13kEDmZ9zZ6t0nIpH28cLwwABOH1NnAar5BdeioEd/wpYMwCQBYIQ97otbMzXPUAlZFT127f11S1pjU6z08uz6uoehLHoeQ37hAavqa7EDc+DuUz2TbSItENPWDE4U6jg6qpNtPvPeORGk3KOzOWw1CdnGmmX2aMaXlRcHlmZ5k1XKfNV0e9XNlJ4Yqc85nPppQ6V7nvLnltALwGJYIv8Z99o8HZsbM8MBHz/ommZk10cPe5qBsZxGrUdu4SubDzNzGSoYXcF5gEAdZRHAQXi56o/n4RcQJJNCRCiZHvFV/UciZiBarM1Y8UHqmXvZl9oI/msV4kD3z13Lf2Ucrx9D5bcYXBmCuuKZXKheWaeoDSBZApdCXPWoTt0Bo3XxqOivN8oonuTz6nk5brXlVCuAmt64UNrrpQXgKmF5jTu5xtcOMcTnrTFLhz2ECOMgPKF5ZvXZZA1YRqO9BsZxtGxBeZRVDBVYGI86ayEpXP2vzUCyLFuFn/Zj1vjDYbWEii19dnKIXmAbgETOSkmhdDctSOGtIa4DF962imFUdAzFlHVHLjQSKyHyW/g5DHkK8fPRnIItTEfNNE= X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: E1nbDC25Hp/x2YAZkfljEEjGcMfxzjulxfh3jzL0NBDPEcjAGPOSC33pH+hSYVhfoYmJzsVNyxsuELTDIBTBw0eI4FtEMdBRij5IIrZouSzVV+n6x9cog6fHRXn8wkZFe3GMPLM4liK8y8CJ78+p/q//wi7sQi07KhLitmEJNMYXM35rgxnZ825XLQJm/uE2Gn2GkbF1PRn5Rn82Xv8VTsSThPiUv6MUwO0q5R9XUx7egoNLptEmbYp5XauDSqffvA8GHQPJPfnxLUTRYt0Gnq6WRQ/St6HDqhpjNjGE6ysa7E9AzmlqD8IDaxCgvU03FRvcJT6d1ooFDz3NqDfVVFU91sUZAbU6QGMsL50l9LSlSvvsL6aG4idZk616x05ej4RmeWAoFhVmMrSVv8vdMOC0zy5j228zEvp+KhqSgH9BtaI0QOx/4A/h1bWYiw6QrTGlnA/b9zhEh3ithtrWNMnoL6X3zUg0NEXIkrzsHIQJ3uvtKvu3zOwZZSmlKkW4H4IWQfjb5Yq8e4oeVp3TgnKC25Br/nGzqDtGC1qJ46mE3bILamMUE2AXrU0ou8oyCXnlPQ2I4tj+7pE0/fzWj06qRSvXsqJyGI0rkNialg/iOmAayqJRigha4HM2wyr+ X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: p6YrDELPllvj82hhI5M+n1wqpx4O89P1/ZfmGRdvylHShb7G+YPqEUL/UC1x6yTxupD0zHmzH4t8LnPmY6IDgYhRrIDVSaEY4Jm5VtiImhVkbIwKrV/Aj/UbBuTdhV/6jM1D2IC+esjspHcnZnT5vzmnm+/Jo57bj+InMoe9eV6hYpoFfg9coBkyTQ5FlEmp989O9FbY2P7OspHGxW4sbd5zIKIv6ZwToXL9337eX6nTJFOXZAT+1m07o/wfKl1n/aARaVfwdvg18pypLpDFjKb+yYbMoqg1vCKokmnZRbBCvrwO37AjwkU9F1cYmU2tY9qCLZO+Ca/GAmoPPfZrcDwr0AcL3/Pz7A9wh5jVKhWL3kCJPTdwvjqwQ9HI+fINuwajsEb8dhN+ldIvwaWs8EYcjL/B1fIVEi+gG3pJO1qySKmdJwDXlCvpB3atW+Me7TQCd9fUHQs8PQeyTDtJ6bG9ZdFIJhUsqtXdNNFyf213tWBssHAsybwEezXx+MgjSS9yuumgIdWN8ZV0Ak8WuF0iKf95CHJkW+iA+3oR0kH9e7ANHF1lOerW7M5E9S+i8aK+TFt8ym8j+msGxh/Ge1PsulC4huTBz7SwzTZYmlDuUCaeU0ibq/gYgRPM2sGC8D17vje8GC84a/VW/2r7s8Ws800Z8nUJEgfXDiGj+Mfdt1cl3PDoeb9uttPXaH8u6yDn/AkzwfHgt+u5JAupQ5C56zIk/o0aFV8xVl25tiIgXLni+YkdV6VKFUgu718J7XssmtThP7G2h16eFPFuzQV64hUcqmMU+X3DnGgPKXkF71dVUODualj4L29U7fUfPoWPaz3CPgRJP9ims6S2pQPHGcQ5bL+CaqVzyCbQ8Rv/ZIUsYiQ3U8e+kCOehaFMQl/x8ehTwF5KC6fKjUn1jbacph8BZOrvRZeozak6qI5yoMIt5EgYo5GhqsEpE0DXLb/X9nQiGHfhK9voVPnJvYJFYNRgcOQf09L2XcPx3H7njzT6FL7kx7MNXXuqtzQ0l36QQMEqeRyddzn49ApG+fxXaiYN404oBolrJMr2S/zhvZF5D+x1FioKzceNapQJkZm/xzukgmGTi+PmOd3a/a0+QiNhTmIhB0P4OwS3K1lTs5PmJOAw9YwjceuAeyUZ5L/yu0sYRZfhujcMl2hOd9UznZasahY24jtuFjN+3VLruCtYxHNShYkrLZT69/JBH++o8dMO9ucPwwbfD81iCKi3nZWSEmskNgy7k9afIh3OQ8qbxOb9viWrOCwvyqRN X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a3f098c8-c9c1-4ffb-71c1-08dc219214a0 X-MS-Exchange-CrossTenant-AuthSource: TYSPR06MB6433.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Jan 2024 12:50:47.6466 (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: TYZPR06MB7274 Subject: [FFmpeg-devel] [PATCH v5 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: A7q9LhK5FyR/ --- 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;