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 E138E49466 for ; Tue, 12 Mar 2024 15:00:49 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DF50668CF9D; Tue, 12 Mar 2024 17:00:46 +0200 (EET) Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04olkn2034.outbound.protection.outlook.com [40.92.75.34]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3886468CC90 for ; Tue, 12 Mar 2024 17:00:41 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=S3LiI7CbOalKucXkJAbj0prvNytMx0HdPxp5EKxYrW1poQpnLcMF5UCrZEgPUcfgTmuUUJtx02c5xSzHnJrqtvLXnayZgPx0StNeihci5/4VGLwqkeH/fYDM0zYCKyA5Nuyy/Ua9LGGilTYZ/0krk8zF2K/ejTb+bKIDUqtEtBSoa1ijrt3YIZAWc8GLEeBzzGMqJ5jBwkZZcEl/Kg7eHKj/4aQBMJM89Trf0CseYyNjdLOTw0R63tVSiBFyMOIY3QpYGGC+MqneKL62+HIJDHicKlBgju/8CgV6E6EGAJODcWobNbUOH5uLFDXkAGZEWa37V9hpoHADl422IBZLew== 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=Vv+n6XCDELJpHf/GHz4869VhPvOJQjMWZKMQbwZpC9s=; b=lZfDgswbipM64mC8yxNwLpGLULZL3PYfnGGYFAJwWlbuwUOXifQRo8c9pqINhqUwDb7npDDhuQWEED92s5E9A96D8UE8y5H8gkrytxs6pYe2EpiT4WnZYU/RPOZoiGuXsAtdTnbfYmOrmJRt2DrVqDg1qbG2acpKDzribk/v/v3KqLdgLCMk9ZYY1YgKM7WQXxhXHizM/QvMtUMmSz//2+Kr51QGiOySJIFsvkLpqJ2h9NcYYixi4qxz5eVj7CqJnxEX39i1T5Gv/VcTudJu/EYl6NGWw5musf1CbYWRTG24bXRY9z9fNRFSS4B2XpL1wb+AQ/L20kJMAAAUy+Nn2A== 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=Vv+n6XCDELJpHf/GHz4869VhPvOJQjMWZKMQbwZpC9s=; b=m26VxInyl1xKAbLjRvF7KP/T9yWoZuwhOQknuN3cAMhODhMfBWnlxjaJBf8soQErQdxs7F2c7biNjnCRKbCmgvrz8dLgjyYaDxP9xzzWb7dKnsFSHZMHC3hoSFVeEVQyFhURwlJStKfPGBXN4c92/BvPYuqkIcFT+aL4ZbDq4LjGOA41KQxNWZW5CeLONfqDQCOi+l3QVZWFuBs26myrnJGH1Ozi4BBA/7euXFeku0esT8CKbYffnC629CgooETAVjNRTR5KRdR9k7+xPkksHtsVUnHSSNT35ii4aJv7/x5lEYp3/VN1atY0TEyQW61lM66mGAKb3fmrO98meoyUSw== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by DU0P250MB0457.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:345::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7362.36; Tue, 12 Mar 2024 15:00:39 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::228d:8c6f:ed10:82eb]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::228d:8c6f:ed10:82eb%7]) with mapi id 15.20.7362.035; Tue, 12 Mar 2024 15:00:39 +0000 Message-ID: Date: Tue, 12 Mar 2024 16:00:37 +0100 User-Agent: Mozilla Thunderbird Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: From: Andreas Rheinhardt In-Reply-To: X-TMN: [KpZBkBhyXVxUjRnjM+Hf5HNt3CencFwdGuIbnKOyEVk=] X-ClientProxiedBy: ZR0P278CA0122.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:20::19) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <113f0d6b-532f-4326-92ff-4e036f0db256@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|DU0P250MB0457:EE_ X-MS-Office365-Filtering-Correlation-Id: 27c0f070-f31a-4e9c-006d-08dc42a52e1c X-MS-Exchange-SLBlob-MailProps: Cq7lScuPrnoAVlBsXi+5fhTy15sn7KFJZtMCvXf0aI+0PUxcFpBF5PfHwbClrUQts8GI9lvubvsmnlrZBzhnqMfbzenjwIpfkkIIgbqU/syEfR/bV9ylx6o5vAjMQ/+iMdO/NUPCR0UNYKbtd3raMk0ablrQMcKJvqZzonE+smNh8ZwZ3QBVJGBYozMglbRpwxuMfnPYWg8HrnUk4g2O6+bQbvA5UXgP2YpDHZ2hR9URQSwHVhR1TIhTO7GoLdeIMyXrKyfm6g/MYVPvwsH6x1ctgDD8xPij0SPJFfIlxX1E/Lgu/riBevukQOqiXb1iY3pYGG+kjgy0+mWnVCUGpufLa7MHlCxXV2LI2GsotDhreGHwjW7TfOxhchC/WQzEyzA0+lPU5UZWSGQw/wusLUP04mN8xLwJ1y9mQ+J8beOtq0PX6CIJlyLYwy7jNXSusAjUBSZNdpcukCksWX4SlE5ny9QkCs3Cq5wwMyf1YNND/MklB1TtpLsZqkpt2gRngjyAVCIAv8NqvfLb9hJzGkh3brjXK0OvePiyRf6H6qrcYrjOM2FPm9/1ETj864aFXeJ9wfRq6whZQ3p+y6fDtHvgk+YP5U3UqBZt+EHmRlrT3Do2EJ7b1yoCdhyvU5SROffUodAw91w2BhKvIw0dSGaCAHTtBJ2/+CNP9Sx+p+DJ0yAnB3VQOeg8NO6OBNJQ+0G5SZqtVVCmUKPq+VwN3aYl9xP1fjigGugNdyE+8oTeEJHaaG/fcQ6zU7BHclVeLFaIbqFLDMA= X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: YHuKiSnE4aa8oLQsG+8383NoCWP3ZgObe8l3lBC9nyUWDiHSoeaJCqMiTcPRFb5rYrZ5kZVGSS3j9GM1MJFGg7+0rDkussD15LVM/7bb8nLwM4gRAxTsIfXh/4HUxouEW7ePmJM4F6tSqBkD68tC9d3AtOq55mWA8E/3mDE1jaV7vhQxQMkGLNDeNd43CeEEOXFRhGokY3VBvcE6QgNOtTs/hpklcIvCxA8M93pnn/0rNILNt4QZ0KMLontWUfqWerzWexnF9gUyurl5pP9r2fwwHm5hGD0fbGVrzp3jDcAZ746m5pFTlWdfDj2p/Q8ZY3/driLsDZGY1byZLr+ZR/VuOcyNgvWz6k55yWjJjUTgjen+qbmLNtS2RIXM5IpgrMKA7dnii+++GzK7AuOmDOqxLUl+QCIvngEhlOxHV5Tx2jj+W+52dSBcQXBO/qBoNjG84NbXxK6MtPW9La6PozjR43Im87XwEQrVES11d98gSB6oXDBHbRCQdlU8y1v4IiBw1LbGd7LpCa0D5/ZBI/ofn17rUOnLzMqov55879Mx4RrxFJNKdSSENFXTFCiJ X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?bFJDeXdGbThVZldzQWxuaklDL2JuQUNEOTBtSWNzMnI5MlhkdTNOUFhPdXpk?= =?utf-8?B?ZEo4dXVQd3FDNnBqM2ZaQVhpZkFtODlsMXBMU2JxS1lJNkIwOEVrTnlxRkNv?= =?utf-8?B?MWdsZ0wrdUJaTjI5S2ZIZElOTmlTY01xOW8wQzh6c2sydGxPdUFyYTNISUZC?= =?utf-8?B?M3ZrZjJ2eFNvejdzbEk0SjlXblRRdUFiUUw4TFpzMWhkRjZVc00yWVhDN3Vw?= =?utf-8?B?UjczZ0hsaEdkcWEvOTVTVVQ0Vmg5MEVjU2VvMDNqTnlvRkFIUTk3K0lJZjE0?= =?utf-8?B?VXVnVEl5cVlKQlR0Zkt3WjRTQzllMjh2ODY5b0IzQW92TFpCOWFTUHA4VWRM?= =?utf-8?B?d3VIUjlIUWhiZ3JJc013M0x6eTJqU1d0VHBZbXBVTk1QVDdnQkJFRUNKc0Rv?= =?utf-8?B?MXdnWXpYdVdoTDlIbzh2aUtJRlMyb2U5aE9kWTdyRVU3eHBlNWU4Z2djaUlO?= =?utf-8?B?SDZFR3FIdGl4dnNuMzIwUS9wSU5YN051d2RPK0lkeVNPQTQ3QnQxbitadyt4?= =?utf-8?B?QndsanE0S0d2V2VWNVRQOGs1KzIxekVERVJHYmJ3RzZlR2pHYkt4OE9oM2d0?= =?utf-8?B?RzlWVUNicnBEZlZYZENoTHlmNG85ejFQN3ZUeURRamNiTnVsL1hjS0lSUjBo?= =?utf-8?B?Lzk4aTEyQmlGU3I3QlYzRE5YVS9Mc1F0ZHYzYU51a3ZuTlFETUFiamdhMlBS?= =?utf-8?B?andBSnZDN1JOYktxUzBXZitvTENCVGY2eFlQY0tKeWNMNWxnS2YzdWZDSVc3?= =?utf-8?B?L2JIbXNyUzRUbFJTNzVVOW9CZnZBS0JYOVNuaHM0cm1DS2k4L3ZXcDcyS0RS?= =?utf-8?B?NG4ydmJlRnlDREc1UDE5UnBqV3lnVXRvV3RGUTlmTm5aWTg0R3N1UExwOFF6?= =?utf-8?B?aXFLSzJEK0Z0Rk0ySHh0WVZOaFp4Nmx3TFF1YWQ5WVFNMG1PWFdDZ0lFTlFU?= =?utf-8?B?ZUZEM3Y3WmdkU2pzSmRCdjdvajB0S2c3aEF6emVOWVEzWnZYUm9WWXNVaXNX?= =?utf-8?B?N0JhS0VBTGp2RExSVkRDTWNwTjFFelE0a2txdVdOcGxhMnhUVG0xMkpPVnVS?= =?utf-8?B?enNRVTNtZnhpRDBzdS82Zk9YQWUrbEIvT0R0N3A3VUNLMjEzNDZwdDVJdnpz?= =?utf-8?B?SEdmM210Z0l2eXhJRGZIOHRjOHJ3UkJ3clFkdHNrZzJ6ZlZSSWtyOW4wTm5I?= =?utf-8?B?ZTJJcU1EZjRJVWNSVDFPcTRJR0xCc3BBYThwSGJMRVlzZXR3YU1HSTJhakdM?= =?utf-8?B?ckFJbDdHTmNwa0dGK0h3dnlCcmhMcS9WTUxhczgwOWNSM3JBWUJNOHdZNFJR?= =?utf-8?B?eWcxMVB6T0JiRXBsNDVDdHNqNEdaRjh3NGQ2K0ZFYlRCZ1huUE54VGFWODdj?= =?utf-8?B?OGxXZWRseWphV2JZcGFBK1RsWkZLcHN5aE9GYVB4N1hYSHJNOFpmeWxFSnRV?= =?utf-8?B?ck9hcFpEdXBCaWhYcTVyYVRxcjIwUHZzNGxQNldaRldSVUt3clVESGJBdGl2?= =?utf-8?B?TXZ0Qk1JWHVudHdYKzh2ZWxqOW9QVXNxemgzVm91ZVArM25DZnpNTjhYYlV5?= =?utf-8?B?QlU1SzNQemlaNVBMOHU2WmxCdHp3cmE1NHpvZFM0YUZQLzdXYUIzcTlqYWRa?= =?utf-8?B?a1d1SWErdTNXWlRveHZqWm5tS2JGQWo2c08reW43RlhXdlYwazE2djErNm9p?= =?utf-8?B?TlVIckxKajlXdnRqZjRNMHo3YmtOY1IyTUp1OC9qRFZPdzg2UVNPMHVBPT0=?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 27c0f070-f31a-4e9c-006d-08dc42a52e1c X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Mar 2024 15:00:39.3657 (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: DU0P250MB0457 Subject: Re: [FFmpeg-devel] [PATCH v4] avcodec/libx264: fix extradata when config annexb=0 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 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: Zhao Zhili: > From: Zhao Zhili > > --- > v4: Fix missing SEI in set_avcc_extradata > v3: Remove unnecessary inclusion > > configure | 2 +- > libavcodec/libx264.c | 153 ++++++++++++++++++++++++++++++++++++------- > 2 files changed, 130 insertions(+), 25 deletions(-) > > diff --git a/configure b/configure > index db7dc89755..24cb897d28 100755 > --- a/configure > +++ b/configure > @@ -3491,7 +3491,7 @@ libwebp_encoder_deps="libwebp" > libwebp_anim_encoder_deps="libwebp" > libx262_encoder_deps="libx262" > libx264_encoder_deps="libx264" > -libx264_encoder_select="atsc_a53" > +libx264_encoder_select="atsc_a53 h264parse" > libx264rgb_encoder_deps="libx264" > libx264rgb_encoder_select="libx264_encoder" > libx265_encoder_deps="libx265" > diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c > index 10d646bd76..e7d16997d2 100644 > --- a/libavcodec/libx264.c > +++ b/libavcodec/libx264.c > @@ -34,6 +34,7 @@ > #include "avcodec.h" > #include "codec_internal.h" > #include "encode.h" > +#include "h264_ps.h" > #include "internal.h" > #include "packet_internal.h" > #include "atsc_a53.h" > @@ -865,6 +866,131 @@ static int convert_pix_fmt(enum AVPixelFormat pix_fmt) > return 0; > } > > +static int save_sei(AVCodecContext *avctx, x264_nal_t *nal) > +{ > + X264Context *x4 = avctx->priv_data; > + > + av_log(avctx, AV_LOG_INFO, "%s\n", nal->p_payload + 25); > + x4->sei_size = nal->i_payload; > + x4->sei = av_malloc(x4->sei_size); > + if (!x4->sei) > + return AVERROR(ENOMEM); > + > + memcpy(x4->sei, nal->p_payload, nal->i_payload); > + > + return 0; > +} > + > +static int set_avcc_extradata(AVCodecContext *avctx, x264_nal_t *nal, int nnal) > +{ > + X264Context *x4 = avctx->priv_data; > + x264_nal_t *sps_nal = NULL; > + x264_nal_t *pps_nal = NULL; > + uint8_t *p, *sps; > + int ret; > + > + /* We know it's in the order of SPS/PPS/SEI, but it's not documented in x264 API. > + * The x264 param i_sps_id implies there is a single pair of SPS/PPS. > + */ > + for (int i = 0; i < nnal; i++) { > + switch (nal[i].i_type) { > + case NAL_SPS: > + sps_nal = &nal[i]; > + break; > + case NAL_PPS: > + pps_nal = &nal[i]; > + break; > + case NAL_SEI: > + ret = save_sei(avctx, &nal[i]); > + if (ret < 0) > + return ret; > + break; > + } > + } > + if (!sps_nal || !pps_nal) > + return AVERROR_EXTERNAL; > + > + avctx->extradata_size = sps_nal->i_payload + pps_nal->i_payload + 7; > + avctx->extradata = av_mallocz(avctx->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE); > + if (!avctx->extradata) > + return AVERROR(ENOMEM); > + > + // Now create AVCDecoderConfigurationRecord > + p = avctx->extradata; > + // Skip size part > + sps = sps_nal->p_payload + 4; > + *p++ = 1; // version > + *p++ = sps[1]; // AVCProfileIndication > + *p++ = sps[2]; // profile_compatibility > + *p++ = sps[3]; // AVCLevelIndication > + *p++ = 0xFF; > + *p++ = 0xE0 | 0x01; // 3 bits reserved (111) + 5 bits number of sps > + memcpy(p, sps_nal->p_payload + 2, sps_nal->i_payload - 2); > + // Make sps has AV_INPUT_BUFFER_PADDING_SIZE padding, so it can be used > + // with GetBitContext > + sps = p + 2; > + p += sps_nal->i_payload - 2; > + *p++ = 1; > + memcpy(p, pps_nal->p_payload + 2, pps_nal->i_payload - 2); > + p += pps_nal->i_payload - 2; > + > + if (sps[3] != 66 && sps[3] != 77 && sps[3] != 88) { > + GetBitContext gbc; > + H264ParamSets ps = { 0 }; > + > + init_get_bits8(&gbc, sps, sps_nal->i_payload - 4); > + skip_bits(&gbc, 8); > + ret = ff_h264_decode_seq_parameter_set(&gbc, avctx, &ps, 1); ff_h264_decode_seq_parameter_set() expects to read from a GetBitContext whose buffer has already been stripped of 0x03 escape bytes. Your buffer hasn't and therefore it is possible for this function to return an error even when the input is fine. > + if (ret < 0) > + return ret; > + > + ps.sps = ps.sps_list[x4->params.i_sps_id]; > + *p++ = 0xFC | ps.sps->chroma_format_idc; > + *p++ = 0xF8 | (ps.sps->bit_depth_luma - 8); > + *p++ = 0xF8 | (ps.sps->bit_depth_chroma - 8); > + *p++ = 0; > + ff_h264_ps_uninit(&ps); > + } > + av_assert0(avctx->extradata + avctx->extradata_size >= p); > + avctx->extradata_size = p - avctx->extradata; > + > + return 0; > +} > + > +static int set_extradata(AVCodecContext *avctx) > +{ > + X264Context *x4 = avctx->priv_data; > + x264_nal_t *nal; > + uint8_t *p; > + int nnal, s; > + > + s = x264_encoder_headers(x4->enc, &nal, &nnal); > + if (s < 0) > + return AVERROR_EXTERNAL; > + > + if (!x4->params.b_annexb) > + return set_avcc_extradata(avctx, nal, nnal); > + > + avctx->extradata = p = av_mallocz(s + AV_INPUT_BUFFER_PADDING_SIZE); > + if (!p) > + return AVERROR(ENOMEM); > + > + for (int i = 0; i < nnal; i++) { > + /* Don't put the SEI in extradata. */ > + if (nal[i].i_type == NAL_SEI) { > + s = save_sei(avctx, &nal[i]); > + if (s < 0) > + return s; > + continue; > + } > + memcpy(p, nal[i].p_payload, nal[i].i_payload); > + p += nal[i].i_payload; > + } > + avctx->extradata_size = p - avctx->extradata; > + > + return 0; > +} > + > #define PARSE_X264_OPT(name, var)\ > if (x4->var && x264_param_parse(&x4->params, name, x4->var) < 0) {\ > av_log(avctx, AV_LOG_ERROR, "Error parsing option '%s' with value '%s'.\n", name, x4->var);\ > @@ -1233,30 +1359,9 @@ FF_ENABLE_DEPRECATION_WARNINGS > return AVERROR_EXTERNAL; > > if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER) { > - x264_nal_t *nal; > - uint8_t *p; > - int nnal, s, i; > - > - s = x264_encoder_headers(x4->enc, &nal, &nnal); > - avctx->extradata = p = av_mallocz(s + AV_INPUT_BUFFER_PADDING_SIZE); > - if (!p) > - return AVERROR(ENOMEM); > - > - for (i = 0; i < nnal; i++) { > - /* Don't put the SEI in extradata. */ > - if (nal[i].i_type == NAL_SEI) { > - av_log(avctx, AV_LOG_INFO, "%s\n", nal[i].p_payload+25); > - x4->sei_size = nal[i].i_payload; > - x4->sei = av_malloc(x4->sei_size); > - if (!x4->sei) > - return AVERROR(ENOMEM); > - memcpy(x4->sei, nal[i].p_payload, nal[i].i_payload); > - continue; > - } > - memcpy(p, nal[i].p_payload, nal[i].i_payload); > - p += nal[i].i_payload; > - } > - avctx->extradata_size = p - avctx->extradata; > + ret = set_extradata(avctx); > + if (ret < 0) > + return ret; > } > > cpb_props = ff_encode_add_cpb_side_data(avctx); _______________________________________________ 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".