From patchwork Sat Jan 27 04:15:11 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nuo Mi X-Patchwork-Id: 45856 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:8786:b0:199:de12:6fa6 with SMTP id ph6csp370661pzb; Fri, 26 Jan 2024 20:16:17 -0800 (PST) X-Google-Smtp-Source: AGHT+IFj3jY9VYA1OQCiWyaOlBTRqoCraoAiatg1+2/W9etHn90jZ+lFdNHh2LxCQmiK2FEtnRaP X-Received: by 2002:a5d:4e92:0:b0:336:6bf0:a005 with SMTP id e18-20020a5d4e92000000b003366bf0a005mr415749wru.92.1706328977710; Fri, 26 Jan 2024 20:16:17 -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 cx10-20020a170906c80a00b00a30f3e88390si1191330ejb.623.2024.01.26.20.16.17; Fri, 26 Jan 2024 20:16:17 -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=A81Uo5HJ; 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 E241268D185; Sat, 27 Jan 2024 06:15:44 +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-psaapc01olkn2067.outbound.protection.outlook.com [40.92.52.67]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C0C5168D17D for ; Sat, 27 Jan 2024 06:15:37 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gwXMQosJ7Eao52Hjpcvtsmg9Pfr+ZNrLgviknBMShpIUNdeQbrvd6bSF27wbTK2xTuM+aq+qitTRoNC4tSfY3kMvPbX1cCEPum57m4roWR/M+YSxNt5PLTRww2Ea7Fw0Wl2SO7NtyWcrdM2+np1fvpQ+9gABVIXCFKeHnm5y7XFVZ0b3yihqpzYiKwQUErewNEKuoVSY4ItfuMG0hPvVx2GJZiraYygeVZXTtJCuf3BqvLAuNRIm6r5qfEgwdtFlwWYwMgDv/5ze4usUu0H9XvXLY+6Wahm5lFNa09SQsT5lkrPbaO3+CLCvk5YN9bQqo9M1bK12kpEwNxsv7ocY0w== 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=H/8fTRIZULQ9pSCJRsxvxERy3WqcZrmlcAuKtDK4tTM=; b=hXDlwlPjik1CzI0YrM8RcKlcIjiCHozzswrrFXZQumz71n4j2wPRDPbzcKTx+O8pDCpt4GHp4pboxH/fk7lreinzGWEBM695Y1+q21Rgx2CMjspsU7PhykMdhnBeSadeXt/iWGYVfsx73vHlbw4rJzG74oJP2fMOIpSiNBE6fWyAclkDP18aPrvp/Xx7WT7QshlioSyBEnHXJABRJXFqpnuCyROuIMXEpEGFT0v8AnfS+UXS6zetqx7iEOB3JhjBIWJRswTDJWYsmKLI7UVinYZ4wQ/6okgNr62No5yUmFlxaJItfG1G9lkyxcighCnVJIFh0oN2LLxma9cK2hPIPQ== 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=H/8fTRIZULQ9pSCJRsxvxERy3WqcZrmlcAuKtDK4tTM=; b=A81Uo5HJGLMwKqTSNnumk2WJxv99RymWgxDsWm13mvOVIhDO+Wl0id74AHFascGwawjHNS5v4f7f4IaIZdX7aUz2IBr8WJjvZx0lNzafWqnQsaVvN2PVEtuDoR+Uh0HUKPfaNKldnNkLGXrX24BtAL7yoahQyfwITeREzluPf6OCyRj1DZJYv6yH3vUlpp4mFUkPn4vSJ08iA0nEB2ksTu/t9ygihe6wellmZl1w48ohvSx9DjsJmVXAZUlHffzm/6lR8/2rXAqLhJ1KUffYjebBNMJ5axw9xuFPZcE3yRxTqTA/hShrwVrlp6BjJnp5/AfCDd+wGBBfKBPcNIQE2Q== 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:11 +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: [a3JSRsq+dfekrXTu1dBTP1o5mCUA1AwK] 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-6-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: 4abf614e-99a2-4efc-a101-08dc1eee92d9 X-MS-Exchange-SLBlob-MailProps: znQPCv1HvwXO1xbyOgO7FIf1KJkfnrOvh5WdK17e9S9I3kfkzF+gGnKmUR1s4ncUEKhdc51tiJEBg2pKlKyPDCzPe9QNr9sjbb3et1ymOxsqt6//Ap/gcOvAwZtW5V9trpuEB2l/nLxRW4Cc85yPkmPO8M6PyTu7WvImDMeVayiqB9m7w7CDUfxoUWqJtkyEUvFGfVwgF89lANfYTN7MUWUiK1G1gdYleOBw0nm9qrWd1ezuXIksDdwc6sIYndZU/RlzikarE86HaFHCXS+7PFNTRRk72YHGvlxo145kPsPWxhzWz9+Yb5mssZCR7/Z3Pb6VEhNVRl0mXCsTjKx+4Y+dQQCxbZZ7khuRH15+f2c9GcvTewztAVR+TZ4LiyqW7836VgQUrg1C0ulo75xvaJ1nNg67MKS/IqUmvdElfjVbCth1UCzyo21ABkOkFlYkvInWGqj26t7MXoN1ZfBnko4mrk+5c5YzFmasedynxCo+yBTE0gbDOzEyLb26lB6cIEZDp2mxK4L5eBU9tVqnb3RfQhWkH4sAtZbtlraQAf8lBQ6JgG1sqZt2GFNgXBlUCbbPcb/14wJdk6vg4pVQRApaUgrh4hwj+4pViPd4GV0i6SbHEFlwR7SevWy6bh3n6oihX+Ty6GlW9mRcHz8rxHouT5OudXMTYBGowUjkIm45q+OBfiMa8D1sX/qSxXnuMtxUxnpV5/uHRKewaMpnzEAXdGCNkW+RnrFVZOxOfwXi6R1pI+CqMy4Q7uAPtxFxJdSeAxTnT2A= X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: oVl2jo8a4PosGOccW5YSzqFRUaH8ESsEib4liFaKcniQH+XEgEyxht5APD6eudqPA6+gqzUq2nFJwI/EJ/px4OFYY95WfKvJCQQa2uRHrwJ2LGbEArFywvmsD4gEFM18HZ/nYyburEOgRJ/WIrkSQ64GZGt13T8Et6reueWfuB3ixJDYQUDUa3LbkvE89GLBfzpr+q/YgigEMMB1BVKUgMiLVrTVMOdWMwdBnmovR3YKUMsTOzmtOGhs0hehiPl9NKsiJMB47n3LKymwrIVbQ3WDhRUy36EMeRyCe+VKz2LX48IqX1leg5gmlycvnS3DAJoFM9Omi2iQ7uCnj0KLeSh0938phCDqF+zUr/kG5yai3x8YVgla+JavH1odv+0GRtIfOq9sQMh9bW4K3TP8bMZ474kNEBlBi54qop1p8uhO6uNetd51j/ME/N1N3BL52wGkswl91JIFx0Xs0kH2IEhJPFlBgx2SkKG2ZNtPHceaY8TR3/12pFwj5k5O0/n4hwO3ivzsNV6URkY3InRggtyiie5H2VrLaWAErqVSGE+19Q0r9pPMYxDq/mpSBwTH5F6iVCscczTLqdAp2j/uuiaKk1W/ZA37yrXQE0ZwLwJFHFTgU1mBXIh+xo/VOiZj X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ZCMCGU4fFEy75YFyPGFqUipjzKmFpsm4dFs8W6Odbpnj0E8InfjuWO0VugbKCVNpsKVYdhSVstpdqVwpEoUO/LhaTbSp3xTPMJ5XqsegKlY7YKmdu1YIL205zbkf2eVW34rbJxf4oA8YivmL+mFMSpA61rScI+iMaXQ+Qg5vgh0SpurvPuiMY/30MqYwLlylwzbKH7l17O0BAcdL86pIss2+rQOlAS7nHzjuEqGJ8yDJG4MXEsNrSHtm1mRx8YXR1Y8D1bETZ3ksn3oUifBisYn0Rhr3bXroqT/mqH/w/kJlA8lSLWuHkB/BMCz56NTzPWuQibLjd7el30mJIe0yMKF2mV9rTd656I5XGh98UznM9y9oOP/eAkdWgZhOzlfCfD4yFTSBdlFbxwr3ov08wl8f5FitBQ4PJ+sMR0zhb9++ZuL9Qn0WntpSBXR578sb4BYFjZ00jdLSfm2RGprl0WjYXMj7XyDnjWQVT6bnqPxqLFY9+SCrghQL0B5OiPkBEQ3GxIlifMB5O18XkGtRytyL4R0YVu+jVeQ5ZoXAff7kh0XrgpvgQwQ8PIa6p78fQq6og8KHsnk66LWEsXuxB4HlCSk6sNaN968tFz9L1Aepcl5EG5VoVpuEHwZWAlrYn8Ppu/ww7T8iyGsxxteyIsPiN7BSEIf6llYy+zxqToTelEhGsH5h6pEn1S/nqqcPkZUnhMaq2+ICGWb6lAD/lFGfxnThf6+Dhx1KG2LPEtJXr/p6JNv9lVb/LXpe8pNwByzp31H55X2gGDED6ujSVtAnydYoTz++jhfFZW8sbkfg2TZGtYzIZSAE3zzh7YdLS6E+3PQuRtxcAIaGkG68BE7qvN4MPLS1iKqmUeOCKxm+VqWp0VZCDR1nbnEnmwzGXNOf7XB8/ezFb447iJV5pm57Z7GOPFFjrvQUWN0AgLrVgO6gmyjE9+BIcXwZRGUJe2xy215JEDCvSQHZFr/A/CVNpcwjei0JHHrarmnbuKuQgmtJfH5RL95G2I6zQZMKdKFVMzs0FlZuTwH+sW2yddC+Vu7Z9JK3GJyS4/h9iMDPt5j7goJZRqAyhLIcCmedooPSzlyQH3JlvUU4mnJ85mkU4/Wm30CW9b2jr9Sqq3grWiMxqjOJGxmAXCv0caYcfJfy9yhzzQLnQhZsKJ7cmLZo+CcrVytmqv3KkH5CxoaFXVKTnkvBrq5ay1sZVgSE2Kef0EfH7wGD6DuuDIoZENmT0lfeE6NziB6lcepQ2CZtOHTIO6oR1xaRWL1OMVhw X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4abf614e-99a2-4efc-a101-08dc1eee92d9 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:19.6801 (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 5/6] avformat/mpegtsenc: refact out h26x_prefix_aud 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: hEr7zD1rqJz/ --- libavformat/mpegtsenc.c | 45 +++++++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c index 0843516ee6..ff1c4de640 100644 --- a/libavformat/mpegtsenc.c +++ b/libavformat/mpegtsenc.c @@ -1834,6 +1834,21 @@ static int opus_get_packet_samples(AVFormatContext *s, AVPacket *pkt) return duration; } +static uint8_t *h26x_prefix_aud(const uint8_t *aud, const int aud_size, + const uint8_t *extra_data, const int extra_size, AVPacket *pkt, int *size) +{ + const int sz = 4; //start code size + uint8_t *data = av_malloc(pkt->size + sz + aud_size + extra_size); + if (!data) + return NULL; + AV_WB32(data, 0x00000001); + memcpy(data + sz, aud, aud_size); + memcpy(data + sz + aud_size, extra_data, extra_size); + memcpy(data + sz + aud_size + extra_size, pkt->data, pkt->size); + *size = pkt->size + sz + aud_size + extra_size; + return data; +} + #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) @@ -1915,16 +1930,14 @@ static int mpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt) if (!found_aud) { /* Prefix 'buf' with the missing AUD, and extradata if needed. */ - data = av_malloc(pkt->size + 6 + extradd); + const uint8_t aud[] = { + H264_NAL_AUD, + 0xf0, // any slice type (0xe) + rbsp stop one bit + }; + buf = data = h26x_prefix_aud(aud, FF_ARRAY_ELEMS(aud), + st->codecpar->extradata, extradd, pkt, &size); if (!data) return AVERROR(ENOMEM); - memcpy(data + 6, st->codecpar->extradata, extradd); - memcpy(data + 6 + extradd, pkt->data, pkt->size); - AV_WB32(data, 0x00000001); - data[4] = H264_NAL_AUD; - data[5] = 0xf0; // any slice type (0xe) + rbsp stop one bit - buf = data; - size = pkt->size + 6 + extradd; } else if (extradd != 0) { /* Move the AUD up to the beginning of the frame, where the H.264 * spec requires it to appear. Emit the extradata after it. */ @@ -1999,17 +2012,15 @@ static int mpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt) if (nal_type < HEVC_NAL_BLA_W_LP || nal_type >= HEVC_NAL_RSV_VCL24) extradd = 0; if (nal_type != HEVC_NAL_AUD) { // AUD NAL - data = av_malloc(pkt->size + 7 + extradd); + const uint8_t aud[] = { + (HEVC_NAL_AUD << 1), + 0x01, + 0x50, // any slice type (0x4) + rbsp stop one bit + }; + buf = data = h26x_prefix_aud(aud, FF_ARRAY_ELEMS(aud), + st->codecpar->extradata, extradd, pkt, &size); 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] = (HEVC_NAL_AUD << 1); - data[5] = 1; - data[6] = 0x50; // any slice type (0x4) + rbsp stop one bit - buf = data; - size = pkt->size + 7 + extradd; } } else if (st->codecpar->codec_id == AV_CODEC_ID_OPUS) { if (pkt->size < 2) {