From patchwork Tue May 23 02:27:45 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?b?5b6Q56aP6ZqG?= <839789740@qq.com> X-Patchwork-Id: 41789 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:c51c:b0:10c:5e6f:955f with SMTP id gm28csp244547pzb; Mon, 22 May 2023 19:28:05 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4zs0wL/poAq06UYtXDenfN6sbbuOUOCCv78lgobCc2o89NHqKvnUhC7lx1u2PFxwI9r4dM X-Received: by 2002:a17:907:2d90:b0:96f:a935:8998 with SMTP id gt16-20020a1709072d9000b0096fa9358998mr9469317ejc.39.1684808885300; Mon, 22 May 2023 19:28:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1684808885; cv=none; d=google.com; s=arc-20160816; b=nJc87I08tcqcuzC5Pb0dNYYaRxUy/3EyH5NSARxOdhiDG89DZRIdJQOXHNqdck/YNq WlDfGRPpfUvY6j1UbS5Xo/IGxzi2Os8+yLcpSRkcQZQ2MptaDORWgYer7M2LNslU9wkt VOKfbEj8iBPU5Ub7GF0eMwUWWzRcNfPCDdz0VwLsL/LvcLvlKXbwghLE3vT+ud1+T3kW /hU0YTcmXhMSnSOZ/SiMPOaQleW0evLqITSUnvDlBa/94MRWr6ecPdfxhrxumgbxPAQz IXEKe6KVOPZF8ci5NnCO22gO7YzUMs0Xh7a5v10jasEAGC31v1SOpYVrXWX8jqF/Cdvl eVxw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:date:to:from:message-id :dkim-signature:delivered-to; bh=BXA6ztPJPRCDFnD65mMuUPBqTonW1Z8PyayMGuPMZrY=; b=vWJzvx6tutUXf8YjREIMVJct4ooFFlvRJS6IYxv6XRh4KjpUS/N1Dd61DfqJdT37JX 9oU/18eqNDyumZFpg/gvzsFRb+SazLiY7Qpu2T8SoNgw9q4DAUGlgfVKP9YFRnURAS/V SbiLRVOY1vRRacJ+QI5/wdUz9aR5vwyKFtJdDvauR7trJ+xvzwgKB54JAums4S5iRmZ+ HLhx2I/ghCGYVoNXbDLlCd+lTCgbHVTWsy1a3v0dF+zTFYxYmIAIBqImUvc83rA1H3kc ZaIGYWoqAEEjhYYBUyh9WIYVdyfw4gXYKpib/eiZANu8HbW8x+ppFvv7tsV2ITK4a9+L EsEA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@qq.com header.s=s201512 header.b=EMEh1hT2; 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=QUARANTINE sp=QUARANTINE dis=NONE) header.from=qq.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id lw13-20020a170906bccd00b0096f6a911f9esi3823832ejb.249.2023.05.22.19.28.04; Mon, 22 May 2023 19:28:05 -0700 (PDT) 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=@qq.com header.s=s201512 header.b=EMEh1hT2; 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=QUARANTINE sp=QUARANTINE dis=NONE) header.from=qq.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F40CE68C0BF; Tue, 23 May 2023 05:27:59 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out203-205-221-242.mail.qq.com (out203-205-221-242.mail.qq.com [203.205.221.242]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3C77568C08B for ; Tue, 23 May 2023 05:27:52 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qq.com; s=s201512; t=1684808868; bh=wtnFFes3s9DhwxVfA0nDK8P4wJbJ2Tu8HbXYWgIpV3w=; h=From:To:Cc:Subject:Date; b=EMEh1hT2vdPIgA3STrTpXdnaOYKXpqHI+8WEm4pgXqgmo6LJZvnvRUQHAjoJVpSqo Z0qKMhf7LS2QuB7YXT5izhI4koP9MSjebsB8KPwlkpuqKw7iZmNWBukWg5Kz3IaWBh kd4o6FR8OTqbmTF+GOGyPbL74ah7wmUtfRNrNLW4= Received: from localhost.localdomain ([113.65.131.36]) by newxmesmtplogicsvrszb1-0.qq.com (NewEsmtp) with SMTP id 6EF0BC65; Tue, 23 May 2023 10:27:47 +0800 X-QQ-mid: xmsmtpt1684808867taw7smgze Message-ID: X-QQ-XMAILINFO: OZZSS56D9fAjDsm6KiT+na3T/fZzocRl4/tyMHJ4V2VGBC3zTlQ7sRghzsJ0r6 tbbRkF+DOeUOMGjSBtwondNSTI5mwaHq/0/ZfHxN0mugGEVmu8dgF6k3kmXJ2nHPt8eVg2T86A9R ZbreWKVCrKKQozgSDXJLU6E+d5bt29srrCMu7kZ2dQpU7X/UsH41xhE/HBmVLtKnKt9ZVTnno/Wv ETBhX9rJfy61bkm6kpKnW1eqaU29J9N1gMILn4sdSI36Z9SewdaoCInjdMF9xNd96dwocJ1FOo6O sM73VTSJV2bF/fcLzgsiMCtfbsI3exQ757fcys0BI+2Fge8+Esq8ScLMo/foh7S6jhTQGciXx56a 7Y1prDkWIn9VLXSuiUSSsasdIkago20HnpGIEgWGJA2WTo6Au+s4SJDiucPzQx5UxCJcgz1lXw0s 1Mml2mL14mz/HClCD/g+Cm1SxE7y7FPtiOHRmu5ugL5N6C8SBAPFD9iPTkY6TjuR2b1smPojZRJ7 R2wjUJiQDlj/EYffnZ4Ig6ehZNz8qO0eWvXRutJ+m1DkQ4DZzfqqPwMsIl1YVR9USFl75kbcK8L+ byO33+b2qCMUjCZxc1j0ESAk6rYEFgBukKM7lAmkwQIjDEk4+EyR7psmb8yVY7U3sNxmIU17ylOg WZBWFPI0MUy8LtP8ynHb3QGl8rUmAYp62ElRQPFiPExKIeUF+YtATfbXio4gUauSJ0IpDBZGMucw UF3G5WpicbTNqXqiAZsFcksIc8kbW9o1EdNJqqZ6vybcjMn6T/Rbm13e3Qf3FqxwEc4mtu1jfoyI L67oFCWgGeuVV0JdReM0+4grTY+lzzD+asfVY8bSs99f2T7jAUP7idREvDaaWIZQL8iVlKCZa6nd Y9gwL36HJ8FlEl6uWrNakvSAxeJvAkVY1uVF5Qg+eNvkvOW4A/KvxikivH3kn8zXaJVo3hKIM1VU +Aypc3g4tZO5Y/9GTlmwLaYbNZrtf9cHMoFnlTOmgO5NdpCmQ3yA== From: xufuji456 <839789740@qq.com> To: ffmpeg-devel@ffmpeg.org Date: Tue, 23 May 2023 10:27:45 +0800 X-OQ-MSGID: <20230523022745.65060-1-839789740@qq.com> X-Mailer: git-send-email 2.32.0 (Apple Git-132) MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avcodec/videotoolboxenc: add CBP/CHP profile 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: xufuji456 <839789740@qq.com> Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: GD6h33xsbaF6 The Constrained_Baseline and Constrained_High profile of H264 has available in iOS 15.0 Signed-off-by: xufuji456 <839789740@qq.com> --- libavcodec/videotoolboxenc.c | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/libavcodec/videotoolboxenc.c b/libavcodec/videotoolboxenc.c index b017c90c36..028095cd04 100644 --- a/libavcodec/videotoolboxenc.c +++ b/libavcodec/videotoolboxenc.c @@ -108,6 +108,8 @@ static struct{ CFStringRef kVTProfileLevel_H264_High_AutoLevel; CFStringRef kVTProfileLevel_H264_Extended_5_0; CFStringRef kVTProfileLevel_H264_Extended_AutoLevel; + CFStringRef kVTProfileLevel_H264_ConstrainedBaseline_AutoLevel; + CFStringRef kVTProfileLevel_H264_ConstrainedHigh_AutoLevel; CFStringRef kVTProfileLevel_HEVC_Main_AutoLevel; CFStringRef kVTProfileLevel_HEVC_Main10_AutoLevel; @@ -171,6 +173,8 @@ static void loadVTEncSymbols(void){ GET_SYM(kVTProfileLevel_H264_High_AutoLevel, "H264_High_AutoLevel"); GET_SYM(kVTProfileLevel_H264_Extended_5_0, "H264_Extended_5_0"); GET_SYM(kVTProfileLevel_H264_Extended_AutoLevel, "H264_Extended_AutoLevel"); + GET_SYM(kVTProfileLevel_H264_ConstrainedBaseline_AutoLevel, "H264_ConstrainedBaseline_AutoLevel"); + GET_SYM(kVTProfileLevel_H264_ConstrainedHigh_AutoLevel, "H264_ConstrainedHigh_AutoLevel"); GET_SYM(kVTProfileLevel_HEVC_Main_AutoLevel, "HEVC_Main_AutoLevel"); GET_SYM(kVTProfileLevel_HEVC_Main10_AutoLevel, "HEVC_Main10_AutoLevel"); @@ -193,8 +197,10 @@ static void loadVTEncSymbols(void){ typedef enum VT_H264Profile { H264_PROF_AUTO, H264_PROF_BASELINE, + H264_PROF_CONSTRAINED_BASELINE, H264_PROF_MAIN, H264_PROF_HIGH, + H264_PROF_CONSTRAINED_HIGH, H264_PROF_EXTENDED, H264_PROF_COUNT } VT_H264Profile; @@ -763,6 +769,10 @@ static bool get_vt_h264_profile_level(AVCodecContext *avctx, } break; + case H264_PROF_CONSTRAINED_BASELINE: + *profile_level_val = compat_keys.kVTProfileLevel_H264_ConstrainedBaseline_AutoLevel; + break; + case H264_PROF_MAIN: switch (vtctx->level) { case 0: *profile_level_val = @@ -805,6 +815,11 @@ static bool get_vt_h264_profile_level(AVCodecContext *avctx, compat_keys.kVTProfileLevel_H264_High_5_2; break; } break; + + case H264_PROF_CONSTRAINED_HIGH: + *profile_level_val = compat_keys.kVTProfileLevel_H264_ConstrainedHigh_AutoLevel; + break; + case H264_PROF_EXTENDED: switch (vtctx->level) { case 0: *profile_level_val = @@ -2757,10 +2772,12 @@ static const enum AVPixelFormat prores_pix_fmts[] = { #define OFFSET(x) offsetof(VTEncContext, x) static const AVOption h264_options[] = { { "profile", "Profile", OFFSET(profile), AV_OPT_TYPE_INT64, { .i64 = H264_PROF_AUTO }, H264_PROF_AUTO, H264_PROF_COUNT, VE, "profile" }, - { "baseline", "Baseline Profile", 0, AV_OPT_TYPE_CONST, { .i64 = H264_PROF_BASELINE }, INT_MIN, INT_MAX, VE, "profile" }, - { "main", "Main Profile", 0, AV_OPT_TYPE_CONST, { .i64 = H264_PROF_MAIN }, INT_MIN, INT_MAX, VE, "profile" }, - { "high", "High Profile", 0, AV_OPT_TYPE_CONST, { .i64 = H264_PROF_HIGH }, INT_MIN, INT_MAX, VE, "profile" }, - { "extended", "Extend Profile", 0, AV_OPT_TYPE_CONST, { .i64 = H264_PROF_EXTENDED }, INT_MIN, INT_MAX, VE, "profile" }, + { "baseline", "Baseline Profile", 0, AV_OPT_TYPE_CONST, { .i64 = H264_PROF_BASELINE }, INT_MIN, INT_MAX, VE, "profile" }, + { "constrained_baseline", "Constrained_Baseline Profile", 0, AV_OPT_TYPE_CONST, { .i64 = H264_PROF_CONSTRAINED_BASELINE }, INT_MIN, INT_MAX, VE, "profile" }, + { "main", "Main Profile", 0, AV_OPT_TYPE_CONST, { .i64 = H264_PROF_MAIN }, INT_MIN, INT_MAX, VE, "profile" }, + { "high", "High Profile", 0, AV_OPT_TYPE_CONST, { .i64 = H264_PROF_HIGH }, INT_MIN, INT_MAX, VE, "profile" }, + { "constrained_high", "Constrained_High Profile", 0, AV_OPT_TYPE_CONST, { .i64 = H264_PROF_CONSTRAINED_HIGH }, INT_MIN, INT_MAX, VE, "profile" }, + { "extended", "Extend Profile", 0, AV_OPT_TYPE_CONST, { .i64 = H264_PROF_EXTENDED }, INT_MIN, INT_MAX, VE, "profile" }, { "level", "Level", OFFSET(level), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 52, VE, "level" }, { "1.3", "Level 1.3, only available with Baseline Profile", 0, AV_OPT_TYPE_CONST, { .i64 = 13 }, INT_MIN, INT_MAX, VE, "level" },