From patchwork Tue Aug 20 11:04:29 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lance Wang X-Patchwork-Id: 14610 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id DC56444825A for ; Tue, 20 Aug 2019 14:04:48 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B7B4568A472; Tue, 20 Aug 2019 14:04:48 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf1-f193.google.com (mail-pf1-f193.google.com [209.85.210.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D2F6C68A0FA for ; Tue, 20 Aug 2019 14:04:41 +0300 (EEST) Received: by mail-pf1-f193.google.com with SMTP id i30so3174745pfk.9 for ; Tue, 20 Aug 2019 04:04:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=aR0nLbLlU1anBqJtowFPeLaXEhRfGMSMX9cPLFJZwuA=; b=WQgRSaAoX3uozOoqJ4vFCaFhiCdlMD/zlwLEl2zVzEgazEigMh1Ad4gRcjtnMQnCK6 yAPC1a56sL0CK1EX11dkyj5HvKsf6g87LB146ZYOn4+wQIXonTrSbrplDUNv4b/2D4tr bwNtpSfs3WLrD/IBVL+Y4CEnTUcFpk8elg2vpc3pSyHNnGlZCKw2xVZ90e490HyT5+mU P+Rhi/obkLNJeLzlK+wBxKFmZt7KQMOfqhUDxPZRpl/k0v8nDN8S2k+a5lwZqN3Z4tP1 jfdWHpEZ78MjYouEsxleb1IJI/loQ6RgHFmWweFSsfgcN6eMvt6CQNONNutpq3l6uCwK TWrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=aR0nLbLlU1anBqJtowFPeLaXEhRfGMSMX9cPLFJZwuA=; b=LRWw/gDAYqTRbqnrWFTOaRTkyE+EfeksSU+v4cccfLBITBsIIhHIx923EMn/qNZYKO iv9JAPR+DRXpZ6DVQRUAcxMPkJCHe/1xdnxX7Wt4xP/fPPEUAwg2Cih+jU6lGPMHLtNj Yl+2Ep28pQToUVJVpynvxCMQaQhRR/RiHiaWH7p4tgv5nvfyKSWFQ9GVROyjr9v3rNH9 hnMrJsiVmkt4WtaWkof/x5CB7MnQkSOGUJK2MXlsay5YZum05W53Xt9qxs8BKmoDtNem YLpH7lOJ7yzEmtY4stPluc5CfBWjnnXXv7CD/zQQqotgvBoNsk7JRYOJR2o/XH5ZNXGt +5lw== X-Gm-Message-State: APjAAAUtRX5ub1lONteU/nXLqWuA3RKSn31XCAPHkAmWxx+CL9DoeuKy dZzGHp6Ydjc+/nLE77G2+xyIJ7vx X-Google-Smtp-Source: APXvYqwD4r2jtZNh+JZwjohys7ubMJ/Y+DYhtZpWSQGH1rT1CULlvpt18kHDNfMol/mcFIPzAdnDpA== X-Received: by 2002:a63:1749:: with SMTP id 9mr24735441pgx.0.1566299079659; Tue, 20 Aug 2019 04:04:39 -0700 (PDT) Received: from vpn.localdomain ([47.90.99.151]) by smtp.gmail.com with ESMTPSA id o4sm51470478pje.28.2019.08.20.04.04.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 20 Aug 2019 04:04:38 -0700 (PDT) From: lance.lmwang@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Tue, 20 Aug 2019 19:04:29 +0800 Message-Id: <20190820110430.26908-1-lance.lmwang@gmail.com> X-Mailer: git-send-email 2.9.5 Subject: [FFmpeg-devel] [PATCH v1 1/2] avcodec/videotoolboxenc: add H264 Extended profile and level X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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: Limin Wang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Limin Wang Signed-off-by: Limin Wang --- libavcodec/videotoolboxenc.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/libavcodec/videotoolboxenc.c b/libavcodec/videotoolboxenc.c index d76bb7f646..b16b056f6c 100644 --- a/libavcodec/videotoolboxenc.c +++ b/libavcodec/videotoolboxenc.c @@ -80,6 +80,8 @@ static struct{ CFStringRef kVTProfileLevel_H264_High_5_1; CFStringRef kVTProfileLevel_H264_High_5_2; CFStringRef kVTProfileLevel_H264_High_AutoLevel; + CFStringRef kVTProfileLevel_H264_Extended_5_0; + CFStringRef kVTProfileLevel_H264_Extended_AutoLevel; CFStringRef kVTProfileLevel_HEVC_Main_AutoLevel; CFStringRef kVTProfileLevel_HEVC_Main10_AutoLevel; @@ -137,6 +139,8 @@ static void loadVTEncSymbols(){ GET_SYM(kVTProfileLevel_H264_High_5_1, "H264_High_5_1"); GET_SYM(kVTProfileLevel_H264_High_5_2, "H264_High_5_2"); 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_HEVC_Main_AutoLevel, "HEVC_Main_AutoLevel"); GET_SYM(kVTProfileLevel_HEVC_Main10_AutoLevel, "HEVC_Main10_AutoLevel"); @@ -154,6 +158,7 @@ typedef enum VT_H264Profile { H264_PROF_BASELINE, H264_PROF_MAIN, H264_PROF_HIGH, + H264_PROF_EXTENDED, H264_PROF_COUNT } VT_H264Profile; @@ -704,6 +709,14 @@ static bool get_vt_h264_profile_level(AVCodecContext *avctx, compat_keys.kVTProfileLevel_H264_High_5_2; break; } break; + case H264_PROF_EXTENDED: + switch (vtctx->level) { + case 0: *profile_level_val = + compat_keys.kVTProfileLevel_H264_Extended_AutoLevel; break; + case 50: *profile_level_val = + compat_keys.kVTProfileLevel_H264_Extended_5_0; break; + } + break; } if (!*profile_level_val) { @@ -2531,6 +2544,7 @@ static const AVOption h264_options[] = { { "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" }, { "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" },