From patchwork Sat Jan 27 04:15:10 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nuo Mi X-Patchwork-Id: 45855 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:8786:b0:199:de12:6fa6 with SMTP id ph6csp370633pzb; Fri, 26 Jan 2024 20:16:10 -0800 (PST) X-Google-Smtp-Source: AGHT+IG7NAM5qohvZrrbmu4vryJQfdXJeFOaneVQxoGP2H21LEm3LN3fAEPeHMzDuQNby2a9UFcw X-Received: by 2002:a05:6512:3b0e:b0:50e:7a91:7e93 with SMTP id f14-20020a0565123b0e00b0050e7a917e93mr489441lfv.44.1706328970331; Fri, 26 Jan 2024 20:16:10 -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 l26-20020a1709061c5a00b00a2f1bc99283si1280080ejg.625.2024.01.26.20.16.08; Fri, 26 Jan 2024 20:16:10 -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=T3IxCJk9; 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 AC7B768D178; Sat, 27 Jan 2024 06:15:40 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from APC01-PSA-obe.outbound.protection.outlook.com (mail-psaapc01olkn2042.outbound.protection.outlook.com [40.92.52.42]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 18F5B68D163 for ; Sat, 27 Jan 2024 06:15:34 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YbbcDwlPBerU+XYiElzsnPEILg2zZWd16Q44v315PNBHOr0zn3oY00DR3dT7gXb4m52tKqtQA1qeschoLbG2n7FPGHAdymrLz8VyU+SJajmxR4ah1BSqHup/DirPSPxJbK7i/7G3L/M4yQc+7dqa6njCVbDXn8GpMCIe+EFhDcVdKfvUFPhONDiV30b1zhIf9MylnzKKx4c57KDgEqzUcWlqfCtvWcf2C0Imzj287ZrGWJoZiH4PXaNy2mAq4RvAMCJ21YwJ7ffOsfGSSCg+MM5mwvS4ABnkJEso5QqY4h7kv5XVIMMFhugKXkDtXrYRopF7HFXqZMIXluhtO0id3g== 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=UkABw7BYFHdiCdo1wSudiaIgL7ZSC/m7SHBN+4QLJvM=; b=mVY85ZTu/6rG5KvrCSCRICfjHOlbN0bJ39ORqBSn+ApjhEd1UGN8lbhmgWu0MyNzifmUmgCs2OHJpFf2/xpv8PqubEcdem7cYqJKTTOv9E6zCVJKV2aZ3N76o5l7eBz/TnqsgKwvp0Ai8H2gsnol73DBViuYbTU0YSaYritdDPT5g71ZE7RZvk7o7Xj7dkW68Memn6cN7XZqc69svcKORWkUXy2bKrXhKDAwtZgtDuK4tbkG61TrRv0BOzMPZwd3sCKDxEd3ofesZMQapuI+YvlJqbTdvgGWfzYgH8liujBIOplgm5rDn0MiagplNXXtlg60xrORjUOUi7gcMntb7A== 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=UkABw7BYFHdiCdo1wSudiaIgL7ZSC/m7SHBN+4QLJvM=; b=T3IxCJk9+IfIM/ddxAE+hsC+FUoSzAw6u+Bp11id+/C6THd1pYt+BWGOn45Hg3ppuhFw6zRzlBnoz1KSSJnYQBLxl418QVrzebVMtkysGhf9pWeXN22KyPxBjbBfO+79o/mO6+VksqsKrnQmhX+P5k+D5/gGYQOFOMhE6uDJsPs+EDlUoeY++Pa75iMKIBYo3MINMSDtDIZt2qNxRlVh304V6DQuaUyGMLAm2g72u7rmKOLb2w0gMDQaIzCU7xviYSD2Y1iDqlzkHnpXXI8oJd8zryTCDeWi4fCpSnWm49yeDz21aR6CNJpH1+iblNnajvppzEJnPKDJeCFC1B9CNQ== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by PUZPR06MB6068.apcprd06.prod.outlook.com (2603:1096:301:112::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7228.28; Sat, 27 Jan 2024 04:15:19 +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.028; Sat, 27 Jan 2024 04:15:19 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Sat, 27 Jan 2024 12:15:10 +0800 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240127041512.14079-1-nuomi2021@gmail.com> References: <20240127041512.14079-1-nuomi2021@gmail.com> X-TMN: [tvdX6nzaz1OBJZGEIz2WAJMMOoJkXEmn] X-ClientProxiedBy: TYCP286CA0165.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:383::11) To TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) X-Microsoft-Original-Message-ID: <20240127041512.14079-5-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|PUZPR06MB6068:EE_ X-MS-Office365-Filtering-Correlation-Id: 2c74338e-f58c-4a85-8843-08dc1eee9278 X-MS-Exchange-SLBlob-MailProps: znQPCv1HvwXO1xbyOgO7FIf1KJkfnrOvEjhoGjlVazpKxTU3oNDCkScPb676CyMopMPerwzykrj7/aNO/BPWFZW0/ZNf6JaTYdqIn2yHPJM6u5N5YveZootkO46XeM+/iv0ksiQ08y5NIRYxMUKnmaOkQjQY4zVNJ3+7rEbSxxJbJDUb/5GMS5I3el+CQYULUKIQZ+gnBTsuyMnSIOheCgayjoXC7m8uTwyBCO9EbE8zH7TC9F5tH9MrQtPtmKfYvDRiT5gVdHWvNVHjof/QJk//o50vbjomhy9vd0gGQxVk4Oki4DP7PQRd53mQHU6JxFknnwo2RxPjGpywuh+Mlb809LyvPBVn5E97skKa/7oLVS1yOjW1ghdhWtJQPh7UJ4Kiy/GQ0U/B6EcV3vr9wPgwN1HteBLy1FyKUIq/0fDkV/voQTVr268c1fXL4EqdyNJAFHw7n+Y9L0X0BJnD+ocSQ6fNHRvIxanZ3I/mq5zEbCV1bnsaEgjLrdsemkvZrWbYn76a/T0AbbJElnmw/TZLAP1v+OmTUDWpJD65Gxki36yBVZ1+TMz0tWfP/55qyGSB3IyGu/LZDMrAsg2D82P8QtJeNIVGb9vVSVBWK1ajPIoLT2Lo5o8WpkfUkTyUuJMaS5VG8yNc+1RStG1gm6Xthn+LbJXedslw/zlA23pDBivRROBPtPF4o0MQ0JD0DQGIh7viUWx55BfciyADFPpWQlnYHisefpFBFq5XngOkGRvksHRJg7g5LF+BvZvyr4Osom7+RRk= X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 1/YtT+DvkW3J1rx4aSzl1LJvPnrHo5ov7MT0Q8b0EbuxfYsQj4DcjmRCWdX4kpHcfCMf5lDbnxJz3g2JUKj2zyRxkxt4lYNi+MGenOAHmzbanLAa8r7PJZBcpT8C0EL0x+g4WUkZVaKOz1Ha6rFFEYVIdoECsmj9orhck2Z23dlt7otfh1k55aUFdtphzfFiasy5+FmYSy3mBEWIuVE5ECH2DsCaTtExrQo5mX+gHVGF/m8Z8W4niBZ08AK9oBoTFUFNk/Sp0qJCAkcJv2PhV6mFLop/ffVVGMY6MQ/L1c/6DxbS1FMDAnhO+n2wwVEvnzxfHgc9/j2G11bL9JDYl+BgxxgCcMLo3FIuXwXPtLv1ajXABOkbECmcQfj8oR258acOPfQ/GIIzAqr/pdArgJyfaIx4S9K8zMs7OE0sOz6+/9tFT/1rYlzFqmQmL7kCDAg85v6kzZhw3zQvEKBr2ki/mGngp/RwHViy9o6QU88efBMIbsLPL4cpAdDRyUTprarImHKGVVhkEE30psOCo9yllgI6/XSRHojisjNjrSZFJ0ST6a7ShVXisTAEWeJVNy2ClshrsLgqokujkkD/nCqi2r3sJxtQEh9ndwE2uww5KYRMrNvZwEQqr0E/L0/3 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: XQOdn5fJAE71t/4krR0B/Hs6ulARo0DyRwGVPDRpHgonZ4qdGHib2qbjsNPncsiZOdRTrps4PMuiJ8+PSigpB9UN43s2RoPufaRZStA7le8gNvq0s96HmNM9PLtW9mnG0L3g9rUEpgJncH+HVRWkXCaVvQXcVBE9Z8OXcMPr43WWkRgEZO/tV/G+ngn7maDQICe5HRps6OOKidi4FA7lWi5YpTHcSH1LSUexRt6eQNbaISLuhMjHcfFjtHKWxofgQXCP8YHx9RtMVs2hutsgxSg3lrmsnI2L0dMiwwapG7FC14GK6+PtVNadAHYFHcRA9AWPCoZ9BH8+3bTo9iEgM+lLlJ4boPyi+09DenTS90s4G33IJYHZfm4jYb8jzHlX6SOZKi6r2xvSuZ2sRP/DDhhWpxT9fi/FCl4JTLGFZZXKVYM5jvog6M36gxMeWS2k+wY+pu4Nyh3aO00tO4hkb9eAuzQ6BUHVspkW9UU6j6euELgQ/PqlZ2Fld++q3ho1t+W4PqM++60SGWpYRzftWJaiJGvjBh73EuYdDNBEaNftwFf7S/CXC+V2i7KzX1H8tnegnvdfKH5G+sH5ISxmIVFqw5fWyui/E7TkYkL9V26rt/EVRtg5psowKA5e6McX4wgDbYPC8fxWQRS46o4/pEbI4Cq5UCOKfhUcCi1YFoZiakxa0qPbuFBFw6fWi6IYrrK8xfaO903efoBootDOIFr1dATzMg9K00X129eratNkwcW2toRCfFVWtFs1yMWU6AIj8j0Emne1IBkFXa8QVgXz41DXFTssAfIdvXXx4R9Ucf186iN8bW1q42u/TlKC4GSLHcdvRTrR2Lo90vGf78+py9+jwcgEacc3Yr/p4PLNfI2R7y8EElbNErm+4EdxmLZVR2kZd7e97ytH9kmrjt8cdCoON7SMmlu598OyEDVYx8TXm9jKs6GlzsYezSWf1GT9Oz6msovYGpEWQ9ploDFz2RK18+67QWPQL9LnElFP9kq/o8fYqR0QHlIkzXRR7lR9Oat7eWvGg3GQKrvPQD+6LrwETPOFauoy/mkfgxuaF5rMhdrLpQp+J8O2231I/w6bq2gsBaJv2EFmzcYE4b3DMzm5N14eSkqgxn18wvw5/QbxSSF2zpEe2atwnBMZ7uHvfejAiiqiPdGwXOCsW3gRGzZFj2OBhj4x+Jzndh0SSw6UCylgQZcRbGUbPDV2ijZ2lZSuGIPIWNxvBULgYw3Wokpa3JtrLcBzz8dofwhCQbbF5zwnXowdmwcYwEQD X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2c74338e-f58c-4a85-8843-08dc1eee9278 X-MS-Exchange-CrossTenant-AuthSource: TYSPR06MB6433.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jan 2024 04:15:18.9845 (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: PUZPR06MB6068 Subject: [FFmpeg-devel] [PATCH v3 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: qtCk4woK8lnF --- libavformat/mpegtsenc.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c index 01b8c8d87a..0843516ee6 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;