From patchwork Wed Jan 12 22:49:20 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Fabian 'Xaymar' Dirks X-Patchwork-Id: 33280 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp5047105iog; Wed, 12 Jan 2022 14:49:56 -0800 (PST) X-Google-Smtp-Source: ABdhPJx7/9r09zOLBtG+QnVk1FgIBFWQyKe8b/PttS+oFT1LZOAXY7TgkO7jgkCC2OUagZZKmeWT X-Received: by 2002:a17:907:6d1b:: with SMTP id sa27mr1484902ejc.182.1642027796493; Wed, 12 Jan 2022 14:49:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642027796; cv=none; d=google.com; s=arc-20160816; b=Yive2LywZXOVwM6FFOB1n/Y7WGXItZmIZ3Tpo74eroB0yCzJPHB4hoygE3BaMAWvf6 vH0lOG/W5RegeYo7GBv76cVBVC2trI705mVi7fY9BMycIHqL8v9P4XXMjl5WI9wZI2Fp Guj69LenFMAardk+4QuHkjlYW/3RqLOpZRsykKa69ySBYA3ThoXCmLzYZWZNJeiBWf42 G+KLSNDEmH8x1wLKns8nzj4MaCp9m1InRL4HwpxzaGmU4SMO2Y2uNEp60gUnuw6g7uLe yjt7FH7KVZHSQ7+fcyCZaIU2ez1G8xV73//S15NwPXzHbonReFJUkraNiaRq9Q7oA+tw MKzg== 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:message-id:date:to:from :dkim-signature:delivered-to; bh=Kbbr4fQ8e37gjYqRNt86t5GTfpGVyK+289gIj6L3epw=; b=ltPZl12mHEvRaYE+TexJqDW5zHhLTRMqFYxuMXHFKHRoqiJxGlNoPb5hUzaCn9HKId /enCQvk+ubhlOYcKPdRobQIboiWBIB8GvgSbclNuqjGG0XSUvI46K+YECZCGC5nwYv+J zUKCmUA8hYxmpC9acAcgV5YatC9NxowAXRklxAbsxZxOIZ3dUDN11sBAfCpUq1MZ4OG+ U9gDCNZcplZQvo7oj2RZP6qHfjnjahXX3odqyt0fVGhR2Endna6A6AfMValiHUqVxvXK nPxE0HFDWoLlWGN0sNgTAFEmLRi3OWDJ4P5IP+Fz6ZzGxbzwFJbBRX2cDs4Q6kz64ZJr GgZg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@xaymar.com header.s=2021 header.b=EXQ6CzUV; 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=xaymar.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id e16si755773edz.161.2022.01.12.14.49.55; Wed, 12 Jan 2022 14:49:56 -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=@xaymar.com header.s=2021 header.b=EXQ6CzUV; 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=xaymar.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D23CB68ADF2; Thu, 13 Jan 2022 00:49:50 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail.xaymar.com (xaymar.com [95.217.118.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1BDD26899A7 for ; Thu, 13 Jan 2022 00:49:44 +0200 (EET) Received: from localhost.localdomain (unknown [IPv6:2a02:8106:c:6a00:ccbc:cf2c:5bb9:d3cf]) by mail.xaymar.com (Postfix) with ESMTPSA id 50F7C6133E; Wed, 12 Jan 2022 23:49:43 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=xaymar.com; s=2021; t=1642027783; bh=es+dcS19tb957fiODIdmb+URFxFBmNcWR3wdF8ZSWuI=; h=From:To:Cc:Subject:Date:From; b=EXQ6CzUVrcdtZQPuEBqW/scSnaMS+nPLmGSZGpYCbm6Y5Lrx6GxyE3p2bbwlsJHh1 Ef3tPpDixuKFVE04mN2vsgRIOFLGW3D/gFUqH2aSgzPYMONwZc/dJPNCvxceilZkA4 2iS+HvZO/Ac89hLAZqcU/PIU+spSOfE/NqJP9gUSnoY8iwN+Gttfv/mdhFIZqmmbEi xTnQwdQxVs/CcVAmmXRG27RfVAxYWo/qxac0Hy5H/sR5ZLNhhlKi54AgVBKn/ve/UH alsoGUpwHQWlMJrJBQU5pktC64PWSRNR/MrPZAmDqUrxlRI/Db/q+NHTf8DTQuMbpo 0Dp61nqoBbHXY+yrki/JrNCnHKU2T5aqzextry/Iw9SKZZRSHdbjF3rdIfKo7/kfnw orIdY8thUxekpMKSJkWGDqt8OXgvUoIvCKRapuJfQT6YmZ+KwUws9gc74hahsqXIrB 4v+fIVwpheBAmmXVW0B/qg1v39+HGFhLOgEs4f6vbhrjAM0VHDLxIwtB1BNWCOsY8G RjptAvlncfbY3rVvnKVuY3zUrSyaocITFdF8to4pJs7Tg/xZKb2RjQlFmcQjaH5cas dcpWqji09pT6qmTTYpCOZat81bi6eTT4e0Je730XD/LRY+arlic2aM0SmcM7SlIL4D kkjz9BNvDfRcNjd+0jPg= From: Michael Fabian 'Xaymar' Dirks To: ffmpeg-devel@ffmpeg.org Date: Wed, 12 Jan 2022 23:49:20 +0100 Message-Id: <96117e46dbb4032a02d92c178ea4cc979203a0d3.1642027745.git.michael.dirks@xaymar.com> X-Mailer: git-send-email 2.34.1.windows.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/5] avcodec: Require AMF SDK v1.4.23 or newer 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: Michael Fabian 'Xaymar' Dirks Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: ZZUy6bDC7Czu Increasing the minimum AMF SDK version allows us to support more recent hardware and drivers, which is necessary to fix some of the discrepancies between older and newer drivers on AMD hardware with FFmpeg. --- configure | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure b/configure index 1413122d87..515ec1a50f 100755 --- a/configure +++ b/configure @@ -6969,7 +6969,7 @@ fi enabled amf && check_cpp_condition amf "AMF/core/Version.h" \ - "(AMF_VERSION_MAJOR << 48 | AMF_VERSION_MINOR << 32 | AMF_VERSION_RELEASE << 16 | AMF_VERSION_BUILD_NUM) >= 0x0001000400090000" + "AMF_FULL_VERSION >= AMF_MAKE_FULL_VERSION(1, 4, 23, 0)" # Funny iconv installations are not unusual, so check it after all flags have been set if enabled libc_iconv; then From patchwork Wed Jan 12 22:49:21 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Fabian 'Xaymar' Dirks X-Patchwork-Id: 33281 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp5047167iog; Wed, 12 Jan 2022 14:50:06 -0800 (PST) X-Google-Smtp-Source: ABdhPJwT+/NotKaRebpicXJum7Cmg/w/R7y3OYQnpJgujzQ325Z95cdTHo41yzYqyepCzm3vbq/5 X-Received: by 2002:a05:6402:2813:: with SMTP id h19mr1657576ede.365.1642027806082; Wed, 12 Jan 2022 14:50:06 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642027806; cv=none; d=google.com; s=arc-20160816; b=IG4c612n+Lh8PiwGPDME8WAXu/EM4/frAzafuaqSd1tMJ4sj7D2akHfnN6+ESWfTNa /oFhgX4txEq2Yp/DRTfAXaOLb/EM95S1DrNg2rtKEdMpeExUqgvWSc3rSNAfUBjDwViy fUZ9qOXNfDYuiMTqNpSuIVn1Wc1AS1eaMpUrFH3/XfsXNOHFK06tbF0eqvHtwkPR54xY gjH6oBKewfti4/tRF0UMCa/jSNKtb+V64Y+izCkR7kptXfAnL7WpgvjJy40jv2/xczAM oTPI4OaxAg6sdMfnB4o95ig06vr1nWiabzXzfhCcGp1tmK6zOpTnZE9ixAm7jBmwpev8 jqLQ== 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:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=0tSYlgYLrop1BJrt4jM+dfdhEv/z9v0WEn8tLFDPHOs=; b=o75mk68XDwPENio3iIhbW0ouyB0LBRvRfiQ/BHcPNtk1jseC2n5YMnRzCpWF1HVQC2 LoqLBJjU+FNgi/YVgHDH7aw3kEscexsWbYEGlobli1k7aNO4RqXV4i3gUaSEX7awEhv1 PReuELYmFNgD5R4pMy+vHNzhqDrKmewGUJEWQOW2EIOEgBbUP5rZYEcdh4rGrziiI9/m 7pUhjAB2hj3AaBrvgW/4e1zdnvH7FcAy7HOlcFEf0ugJ9wbUmdWf7XvhFPUvswufOrHP 6b7UaP4o1YTCSwRTTgdgRJ0xrgMJ0Pe6snlvyJRq94rGpXMQ4C2PasQOaYnNskl2BKFV 92NA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@xaymar.com header.s=2021 header.b=EudoQXCp; 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=xaymar.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id f19si608618edd.39.2022.01.12.14.50.05; Wed, 12 Jan 2022 14:50:06 -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=@xaymar.com header.s=2021 header.b=EudoQXCp; 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=xaymar.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0D97368A7ED; Thu, 13 Jan 2022 00:49:52 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail.xaymar.com (xaymar.com [95.217.118.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 801FD6899A7 for ; Thu, 13 Jan 2022 00:49:44 +0200 (EET) Received: from localhost.localdomain (unknown [IPv6:2a02:8106:c:6a00:ccbc:cf2c:5bb9:d3cf]) by mail.xaymar.com (Postfix) with ESMTPSA id AA39961341; Wed, 12 Jan 2022 23:49:43 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=xaymar.com; s=2021; t=1642027783; bh=b/353aHdmaIO4F2oI1ltV0rxbVBJuKPzo2XyoI4pcUg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=EudoQXCpsaIjoKd8F22KG4SifWbUtqNfwyMI1XMhsfD4x6+nKMxUTQ+opsKGrdE+Y ZU1PbzpcYJsmPBhubdoNhrm7NRMKb8vcUkn9ARMNzX/vG+/GWPHYoBzumg8Hta/Xk+ notLU2ELYJGrwHQXnvz5v9rTEMJEP7+wTc/brNfH7rBpNELalxQ5fekYebzJSqMhRX ik4vyJmcp0K+fKV0HL98rK6wsSKDitI7nQB5Zhd+D5LG4DggGAYOK7I1WP0tFNTCBw rB3nPB9ois1u+DukU48/xNyWdthHNnl0BCYCe135lG9VWrRM2ufOmOLA2+eURMqiFs dey2dixmjUmGhnbuf9gGG4DhzkLm//PljzAwQBy6SXQzrsypexKHM1NPpQKJXcuMyQ sVUkTNlx2hFq5g+MbOY7G9gB0xOPian+4aUQQIwIJez/+SURmlqQ+Mdbex1yLr72Af O6xcKOWXnnec9+DI2XiuUKUZn3a3IYdgB8FkO/Y3B8KJmbyxt73OeZbYVLnVnBGhml W3U4flWqjsxFornNzLWPZ+XtGMjYRcXQ2+xalxkGG9NbAFXS3B9SXDNxRSXjQlDrFW TlgM1stSdwZCfNu5fL5vKvL5aoz08IyY7FICtoGPoputtTSjJ5/YYmyacC2bLtNF92 OShPaRBcww137QRrbIEw= From: Michael Fabian 'Xaymar' Dirks To: ffmpeg-devel@ffmpeg.org Date: Wed, 12 Jan 2022 23:49:21 +0100 Message-Id: X-Mailer: git-send-email 2.34.1.windows.1 In-Reply-To: <96117e46dbb4032a02d92c178ea4cc979203a0d3.1642027745.git.michael.dirks@xaymar.com> References: <96117e46dbb4032a02d92c178ea4cc979203a0d3.1642027745.git.michael.dirks@xaymar.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/5] avcodec/amfenc: Set all color metadata for AMF 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: Michael Fabian 'Xaymar' Dirks Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: URJktCTjtfZZ Fixes the color information in the output from the AMD encoder being wrong, which led to weird transcoding results. This problem appeared out of thin air, and I've been unable to tie it to a specific driver that supports my hardware. Unfortunately this requires AMF SDK version 1.4.23 or later, but it should still work fine on older drivers. Theoretical support for HDR encoding is also now possible, although the implementation is not complete. I have no clear idea on how to generate AMFs HDR metadata structure, or where to even take this information from. --- libavcodec/amfenc.h | 1 + libavcodec/amfenc_h264.c | 48 +++++++++++++++++++++++++++++++++++++- libavcodec/amfenc_hevc.c | 50 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 98 insertions(+), 1 deletion(-) diff --git a/libavcodec/amfenc.h b/libavcodec/amfenc.h index 358b2ef778..951e529362 100644 --- a/libavcodec/amfenc.h +++ b/libavcodec/amfenc.h @@ -21,6 +21,7 @@ #include +#include #include #include diff --git a/libavcodec/amfenc_h264.c b/libavcodec/amfenc_h264.c index aeca99f7c6..009378e9f1 100644 --- a/libavcodec/amfenc_h264.c +++ b/libavcodec/amfenc_h264.c @@ -137,6 +137,8 @@ static av_cold int amf_encode_init_h264(AVCodecContext *avctx) AMFRate framerate; AMFSize framesize = AMFConstructSize(avctx->width, avctx->height); int deblocking_filter = (avctx->flags & AV_CODEC_FLAG_LOOP_FILTER) ? 1 : 0; + amf_int64 color_depth; + amf_int64 color_profile; if (avctx->framerate.num > 0 && avctx->framerate.den > 0) { framerate = AMFConstructRate(avctx->framerate.num, avctx->framerate.den); @@ -194,10 +196,54 @@ static av_cold int amf_encode_init_h264(AVCodecContext *avctx) AMF_ASSIGN_PROPERTY_RATIO(res, ctx->encoder, AMF_VIDEO_ENCODER_ASPECT_RATIO, ratio); } - /// Color Range (Partial/TV/MPEG or Full/PC/JPEG) + // Color Metadata + /// Color Range (Support for older Drivers) if (avctx->color_range == AVCOL_RANGE_JPEG) { AMF_ASSIGN_PROPERTY_BOOL(res, ctx->encoder, AMF_VIDEO_ENCODER_FULL_RANGE_COLOR, 1); + } else { + AMF_ASSIGN_PROPERTY_BOOL(res, ctx->encoder, AMF_VIDEO_ENCODER_FULL_RANGE_COLOR, 0); + } + /// Color Space & Depth + color_depth = AMF_COLOR_BIT_DEPTH_8; + color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_UNKNOWN; + switch (avctx->colorspace) { + case AVCOL_SPC_SMPTE170M: + if (avctx->color_range == AVCOL_RANGE_JPEG) { + color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_FULL_601; + } else { + color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_601; + } + break; + case AVCOL_SPC_BT709: + if (avctx->color_range == AVCOL_RANGE_JPEG) { + color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_FULL_709; + } else { + color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_709; + } + break; + case AVCOL_SPC_BT2020_NCL: + case AVCOL_SPC_BT2020_CL: + // !FIXME: Verify that this is correct on Hardware supporting it. + // !FIXME: Figure out how to decide on bit depth. + if (avctx->color_range == AVCOL_RANGE_JPEG) { + color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_FULL_2020; + color_depth = AMF_COLOR_BIT_DEPTH_10; + } else { + color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_2020; + color_depth = AMF_COLOR_BIT_DEPTH_10; + } + break; } + AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_COLOR_BIT_DEPTH, color_depth); + AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_INPUT_COLOR_PROFILE, color_profile); + AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_OUTPUT_COLOR_PROFILE, color_profile); + /// Color Transfer Characteristics (AMF matches ISO/IEC) + AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_INPUT_TRANSFER_CHARACTERISTIC, (amf_int64)avctx->color_trc); + AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_OUTPUT_TRANSFER_CHARACTERISTIC, (amf_int64)avctx->color_trc); + /// Color Primaries (AMF matches ISO/IEC) + AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_INPUT_COLOR_PRIMARIES, (amf_int64)avctx->color_primaries); + AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_OUTPUT_COLOR_PRIMARIES, (amf_int64)avctx->color_primaries); + /// !TODO: AMF HDR Metadata generation // autodetect rate control method if (ctx->rate_control_mode == AMF_VIDEO_ENCODER_RATE_CONTROL_METHOD_UNKNOWN) { diff --git a/libavcodec/amfenc_hevc.c b/libavcodec/amfenc_hevc.c index 79541b9b2f..900e1482b4 100644 --- a/libavcodec/amfenc_hevc.c +++ b/libavcodec/amfenc_hevc.c @@ -104,6 +104,8 @@ static av_cold int amf_encode_init_hevc(AVCodecContext *avctx) AMFRate framerate; AMFSize framesize = AMFConstructSize(avctx->width, avctx->height); int deblocking_filter = (avctx->flags & AV_CODEC_FLAG_LOOP_FILTER) ? 1 : 0; + amf_int64 color_depth; + amf_int64 color_profile; if (avctx->framerate.num > 0 && avctx->framerate.den > 0) { framerate = AMFConstructRate(avctx->framerate.num, avctx->framerate.den); @@ -152,6 +154,54 @@ static av_cold int amf_encode_init_hevc(AVCodecContext *avctx) AMFRatio ratio = AMFConstructRatio(avctx->sample_aspect_ratio.num, avctx->sample_aspect_ratio.den); AMF_ASSIGN_PROPERTY_RATIO(res, ctx->encoder, AMF_VIDEO_ENCODER_HEVC_ASPECT_RATIO, ratio); } + + // Color Metadata + /// Color Range (Support for older Drivers) + if (avctx->color_range == AVCOL_RANGE_JPEG) { + AMF_ASSIGN_PROPERTY_BOOL(res, ctx->encoder, AMF_VIDEO_ENCODER_HEVC_NOMINAL_RANGE, 1); + } else { + AMF_ASSIGN_PROPERTY_BOOL(res, ctx->encoder, AMF_VIDEO_ENCODER_HEVC_NOMINAL_RANGE, 0); + } + /// Color Space & Depth + color_depth = AMF_COLOR_BIT_DEPTH_8; + color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_UNKNOWN; + switch (avctx->colorspace) { + case AVCOL_SPC_SMPTE170M: + if (avctx->color_range == AVCOL_RANGE_JPEG) { + color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_FULL_601; + } else { + color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_601; + } + break; + case AVCOL_SPC_BT709: + if (avctx->color_range == AVCOL_RANGE_JPEG) { + color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_FULL_709; + } else { + color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_709; + } + break; + case AVCOL_SPC_BT2020_NCL: + case AVCOL_SPC_BT2020_CL: + // !FIXME: Verify that this is correct on Hardware supporting it. + // !FIXME: Figure out how to decide on bit depth. + if (avctx->color_range == AVCOL_RANGE_JPEG) { + color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_FULL_2020; + color_depth = AMF_COLOR_BIT_DEPTH_10; + } else { + color_profile = AMF_VIDEO_CONVERTER_COLOR_PROFILE_2020; + color_depth = AMF_COLOR_BIT_DEPTH_10; + } + break; + } + AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_HEVC_COLOR_BIT_DEPTH, color_depth); + AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_HEVC_INPUT_COLOR_PROFILE, color_profile); + AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_HEVC_OUTPUT_COLOR_PROFILE, color_profile); + /// Color Transfer Characteristics (AMF matches ISO/IEC) + AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_HEVC_INPUT_TRANSFER_CHARACTERISTIC, (amf_int64)avctx->color_trc); + AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_HEVC_OUTPUT_TRANSFER_CHARACTERISTIC, (amf_int64)avctx->color_trc); + /// Color Primaries (AMF matches ISO/IEC) + AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_HEVC_INPUT_COLOR_PRIMARIES, (amf_int64)avctx->color_primaries); + AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_HEVC_OUTPUT_COLOR_PRIMARIES, (amf_int64)avctx->color_primaries); // Picture control properties AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_HEVC_NUM_GOPS_PER_IDR, ctx->gops_per_idr); From patchwork Wed Jan 12 22:49:22 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Fabian 'Xaymar' Dirks X-Patchwork-Id: 33282 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp5047249iog; Wed, 12 Jan 2022 14:50:15 -0800 (PST) X-Google-Smtp-Source: ABdhPJxmvDkp56fUInodIHsBfpZWCTxaZBEME+knO5UF4SNe8QqUlNAs01mf60usQMQPN3J6w90H X-Received: by 2002:a17:906:15d5:: with SMTP id l21mr1461727ejd.287.1642027815161; Wed, 12 Jan 2022 14:50:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642027815; cv=none; d=google.com; s=arc-20160816; b=F0pgET9od57zMU6C5ycfz/8AoFGH7QwAVI+j0xeYh2msvWtIeKyaWDrPpg4sOMbo87 ZnYxqrz3gpjShMhzODd8jDlIRNrQE4sTDJYO/+WlLjF7ZWBcjJR77CN9l4/R0Zyhbrrm Uj9Wg8zCyWMlzlB9a+gHnRR+1lQzQ2bzlD9dH8QqeyuGN24+WRo2MzR7BxubkAAKxue0 4BNagv1t3c+H5Ok7mT4G3/L0GgZT44Fldeuu8gwaekV66+9evWWJo4zj8Rffe5lu6XKn 7Z3sLyAiegp1sYYA3nvsmEKQhZJp9YaMUjGIbkLg8sRoINB6RY2syi3iDiqfeUBYUWLL iZow== 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:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=80pLuZfIcSnJfOx3JKBi0p4sIEopvpgqAne80pwuEMY=; b=Zg7uLQXEwIk78ecXHRoOzBxu63olt4Wk0R1T5fJ+0gGZve17uqgcCj9W08Uza2PbTR CWK0qQ7T3eDxVq0Lr5tJLc7yJrDgs9ZqUvLaVzXNSWRL614OpYJerKrmQV97mAgcZsVP UnERf2iZ1yYsVoFqWtoDeix7f06uM/UlqBXRQ+lH8OhiwEmaZTDO8iz55OHaMca/l4jS dpbp++nlkahhtBduQ5bEtMI+JNA6WdYxeCjzg97ZLb/blrKQ4kn69wDceETWzS6wD/tt 6fxxryfOCL3eLynjs8iR0Y2aArCF7lWXj+nkIMBFeatVzW5eSmgU2N38aPW2twGIU86R CHUg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@xaymar.com header.s=2021 header.b=GI6lE7Xq; 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=xaymar.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id g11si682245edb.410.2022.01.12.14.50.14; Wed, 12 Jan 2022 14:50:15 -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=@xaymar.com header.s=2021 header.b=GI6lE7Xq; 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=xaymar.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1519D68AEBC; Thu, 13 Jan 2022 00:49:53 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail.xaymar.com (xaymar.com [95.217.118.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A570A68A7ED for ; Thu, 13 Jan 2022 00:49:44 +0200 (EET) Received: from localhost.localdomain (unknown [IPv6:2a02:8106:c:6a00:ccbc:cf2c:5bb9:d3cf]) by mail.xaymar.com (Postfix) with ESMTPSA id 0523D61345; Wed, 12 Jan 2022 23:49:43 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=xaymar.com; s=2021; t=1642027784; bh=4p3Ej1hUausvEsAon47ZrorCzvVIb8v7AAg1QTABrVE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GI6lE7Xq+LEbjzSTgPjqo3wk2vSW9ZazUJATt14u+fjhqtubSpXk/HbHK9buig41U lvRMHJzNkGSeS2jWlnwDdRBBF2mzGdiKYm/j6tsY+2o9lH4PJsQgXnxBf40dcBcslt L16ABB8kod7G86hLJksSQ6LPuT8jrr9mb9KmgGYrAoAboBa5u76XfOMSbMXioMQ5lJ zIvXfy0VD1yWOp5OyQo1w+dW7pRKWeztG9rzahduYdwXZY/ObpZoroTznKW7tbdmaV u0RIUpQQ8jisjIIYJhU2IZ2+tlg1QO5y57ubFOasEYIfaQdDERPfu0lNwy/Zs6bxC6 pZ8Xr2QytGuFOtnWdt9xljqleW8wShRboxD0G3bUughkrND+o1VWhTGIyYW2jl0gNA UWGaUchPEOQzPR8d4Wb3VPKLy6q9WrCbBCpePLMgZxjYnENLl59UATG3+LBUZNoM+N AgOPIKEo4RibGWWl1jVKH7W5t85BF9VHmbooDK8yGHUp6GangjO/Dxb6yKWpxrj6UE Xdhe97e1DG09JjVBnmeswf3RzIOr1KAN4uWOycjSu3Kj9Vgji4XyL5n3mfrC5c2Tcw 0AAC/AjZFhxBh+xO9tHoP7prk3+1S/5M46Wrjvdt00KQoI6SR9lEuXBAL752NIW02N 0on7SO7IA+Wb2sfzltXk= From: Michael Fabian 'Xaymar' Dirks To: ffmpeg-devel@ffmpeg.org Date: Wed, 12 Jan 2022 23:49:22 +0100 Message-Id: <495c5779c25bb0e2058abf161eb3ad4baf8760e6.1642027745.git.michael.dirks@xaymar.com> X-Mailer: git-send-email 2.34.1.windows.1 In-Reply-To: <96117e46dbb4032a02d92c178ea4cc979203a0d3.1642027745.git.michael.dirks@xaymar.com> References: <96117e46dbb4032a02d92c178ea4cc979203a0d3.1642027745.git.michael.dirks@xaymar.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/5] avcodec/amfenc: Add the new usage presets 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: Michael Fabian 'Xaymar' Dirks Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: r9IwKsYJk2iC These enable some new features that otherwise require another AMF component to be loaded. Requires AMF SDK 1.4.23 or newer. --- libavcodec/amfenc_h264.c | 12 +++++++----- libavcodec/amfenc_hevc.c | 6 ++++-- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/libavcodec/amfenc_h264.c b/libavcodec/amfenc_h264.c index 009378e9f1..afac97a968 100644 --- a/libavcodec/amfenc_h264.c +++ b/libavcodec/amfenc_h264.c @@ -28,11 +28,13 @@ static const AVOption options[] = { // Static /// Usage - { "usage", "Encoder Usage", OFFSET(usage), AV_OPT_TYPE_INT, { .i64 = AMF_VIDEO_ENCODER_USAGE_TRANSCONDING }, AMF_VIDEO_ENCODER_USAGE_TRANSCONDING, AMF_VIDEO_ENCODER_USAGE_WEBCAM, VE, "usage" }, - { "transcoding", "Generic Transcoding", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_USAGE_TRANSCONDING }, 0, 0, VE, "usage" }, - { "ultralowlatency","", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_USAGE_ULTRA_LOW_LATENCY }, 0, 0, VE, "usage" }, - { "lowlatency", "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_USAGE_LOW_LATENCY }, 0, 0, VE, "usage" }, - { "webcam", "Webcam", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_USAGE_WEBCAM }, 0, 0, VE, "usage" }, + { "usage", "Encoder Usage", OFFSET(usage), AV_OPT_TYPE_INT, { .i64 = AMF_VIDEO_ENCODER_USAGE_TRANSCODING }, AMF_VIDEO_ENCODER_USAGE_TRANSCODING, AMF_VIDEO_ENCODER_USAGE_LOW_LATENCY_HIGH_QUALITY, VE, "usage" }, + { "transcoding", "Generic Transcoding", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_USAGE_TRANSCODING }, 0, 0, VE, "usage" }, + { "ultralowlatency", "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_USAGE_ULTRA_LOW_LATENCY }, 0, 0, VE, "usage" }, + { "lowlatency", "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_USAGE_LOW_LATENCY }, 0, 0, VE, "usage" }, + { "webcam", "Webcam", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_USAGE_WEBCAM }, 0, 0, VE, "usage" }, + { "highquality", "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_USAGE_HIGH_QUALITY }, 0, 0, VE, "usage" }, + { "lowlatency_highqquality", "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_USAGE_LOW_LATENCY_HIGH_QUALITY }, 0, 0, VE, "usage" }, /// Profile, { "profile", "Profile", OFFSET(profile),AV_OPT_TYPE_INT, { .i64 = AMF_VIDEO_ENCODER_PROFILE_MAIN }, AMF_VIDEO_ENCODER_PROFILE_BASELINE, AMF_VIDEO_ENCODER_PROFILE_CONSTRAINED_HIGH, VE, "profile" }, diff --git a/libavcodec/amfenc_hevc.c b/libavcodec/amfenc_hevc.c index 900e1482b4..b7fee950f6 100644 --- a/libavcodec/amfenc_hevc.c +++ b/libavcodec/amfenc_hevc.c @@ -24,11 +24,13 @@ #define OFFSET(x) offsetof(AmfContext, x) #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM static const AVOption options[] = { - { "usage", "Set the encoding usage", OFFSET(usage), AV_OPT_TYPE_INT, { .i64 = AMF_VIDEO_ENCODER_HEVC_USAGE_TRANSCONDING }, AMF_VIDEO_ENCODER_HEVC_USAGE_TRANSCONDING, AMF_VIDEO_ENCODER_HEVC_USAGE_WEBCAM, VE, "usage" }, - { "transcoding", "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_HEVC_USAGE_TRANSCONDING }, 0, 0, VE, "usage" }, + { "usage", "Set the encoding usage", OFFSET(usage), AV_OPT_TYPE_INT, { .i64 = AMF_VIDEO_ENCODER_HEVC_USAGE_TRANSCODING }, AMF_VIDEO_ENCODER_HEVC_USAGE_TRANSCODING, AMF_VIDEO_ENCODER_HEVC_USAGE_LOW_LATENCY_HIGH_QUALITY, VE, "usage" }, + { "transcoding", "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_HEVC_USAGE_TRANSCODING }, 0, 0, VE, "usage" }, { "ultralowlatency","", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_HEVC_USAGE_ULTRA_LOW_LATENCY }, 0, 0, VE, "usage" }, { "lowlatency", "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_HEVC_USAGE_LOW_LATENCY }, 0, 0, VE, "usage" }, { "webcam", "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_HEVC_USAGE_WEBCAM }, 0, 0, VE, "usage" }, + { "highquality", "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_HEVC_USAGE_HIGH_QUALITY }, 0, 0, VE, "usage" }, + { "lowlatency_highqquality", "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_HEVC_USAGE_LOW_LATENCY_HIGH_QUALITY }, 0, 0, VE, "usage" }, { "profile", "Set the profile (default main)", OFFSET(profile), AV_OPT_TYPE_INT,{ .i64 = AMF_VIDEO_ENCODER_HEVC_PROFILE_MAIN }, AMF_VIDEO_ENCODER_HEVC_PROFILE_MAIN, AMF_VIDEO_ENCODER_HEVC_PROFILE_MAIN, VE, "profile" }, { "main", "", 0, AV_OPT_TYPE_CONST,{ .i64 = AMF_VIDEO_ENCODER_HEVC_PROFILE_MAIN }, 0, 0, VE, "profile" }, From patchwork Wed Jan 12 22:49:23 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Fabian 'Xaymar' Dirks X-Patchwork-Id: 33283 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp5047317iog; Wed, 12 Jan 2022 14:50:24 -0800 (PST) X-Google-Smtp-Source: ABdhPJypEWzWIpQKDc8oVPlxSMLmwy12aMW0tWUHzWSZqHNQBM7dPSyEvbZ8ezRlN2jOFxMhL8FO X-Received: by 2002:a05:6402:4249:: with SMTP id g9mr1586354edb.321.1642027824723; Wed, 12 Jan 2022 14:50:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642027824; cv=none; d=google.com; s=arc-20160816; b=nuIYiMxH8UTy7LtNW+7oG1r3kCjfbPMjRepX+UredJ17YQSvD6yfjT0ZCBZC5Md++C xUBOuFBqTqoggbSeODlUnGYjBZWYcXT5I0rIXjP5EfO3kD7EtdebYKPuWrz421rOaSd1 ENiwDclZRkQH/X/pMefsEG1jAftkh3ZHLp1+0woiDS7mABYv+JSTMtb3qrwiYEYVIhl9 1V9aFCO5AU1iLW8pyL69QlyAdFWKHQQ3YX9v4m2UGP75dly9GJvtimfT15KTbHPn8+Fr hD/xlIpLdJ7mdMzeoMP4CdvEG2y7HqD7y0lRhn+8H48LwetV3OJzWw8SBI23RSl6KQz3 +KwA== 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:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=h/vsjq/GxiJMISY9YbOMIbxRL96u8I00kgmH/sf6xbg=; b=c3yQMNq/yUVhdfxI5ewaUrljubZJ0rR9WR758EqzOXBn56zEBXFW/Q9VfYBGUhhDeA qz4qLqDUYtjW4f6TgB7FUl0zZoJFzMWLi495FW9Km8o+7SxrG4x72Z1mBrgSf17EUSmf B4a16kz//WMupt5wN1ZQkt602ovu/ewHHklQSTNfbc9QvSVEIS+q9NfFOTAbhcY0abMX hPArlTKoMyfSo4j1pE8ceu7owvP1bviVvuKdk7kcnD2fJUKG+2R55eAJ8bb0nlonjhSK 1NG7WxlO9Cm5hB9vqGdBf/Avsu7KgMyCMaQgnpWK1iCTPvCuYgdXmJFcIA03GTfsp40O l9iA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@xaymar.com header.s=2021 header.b=D1zSTERH; 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=xaymar.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id sh8si563270ejc.733.2022.01.12.14.50.24; Wed, 12 Jan 2022 14:50:24 -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=@xaymar.com header.s=2021 header.b=D1zSTERH; 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=xaymar.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 13D8368AED0; Thu, 13 Jan 2022 00:49:54 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail.xaymar.com (xaymar.com [95.217.118.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1394968A744 for ; Thu, 13 Jan 2022 00:49:45 +0200 (EET) Received: from localhost.localdomain (unknown [IPv6:2a02:8106:c:6a00:ccbc:cf2c:5bb9:d3cf]) by mail.xaymar.com (Postfix) with ESMTPSA id 5639961346; Wed, 12 Jan 2022 23:49:44 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=xaymar.com; s=2021; t=1642027784; bh=jCMcoq2J8mxwWESCN67o5ifaZ8XsMjzR1Z5VPEB5KWk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=D1zSTERHLdeJDQs2xtLHqs0IGU1JJygXyF5btYIfQlEbEsvdbn6le1CcDBA+1jDOi 6NHrydNYuWYsFQ7ORqj6e3hkwCBLa0EjT+tyufjRNJMfZGtpY1nhogCTmU6VcBU4ug 3/zpC/KJMHzdmP4zmN96y5oY1g+U81WbqsMG2nwat/C/r+NEZyBXcTBlC9GJptjR9B oQh+6fjvibXTLxBGG3+SdQ7VhG9Ku5erA+Q5FLpaJSmzo/vl/adffwtksp5MkjSFgx ibipyhlc54tAQapOBEq0pS7+vxKqgsgtNgsChtn1qv9+vTV4JpVe2iSrfe9qyvv73w wZjYQHpgrgGABD+rngKNG2G+MkEJv7+KBRlkexEMB2ABt+Xyqcc1DkR1ARAHF7YQEk L+eBOV37ISLHlmh5edy+u/ctD74GtIZsNKVmLWV2Y47YIRswdna2B8eK+Lj2rATNWW B/qpFR8M21n7xamjlUPTN7J6j35fh39/4KfN7bFMeFTPGK6KbUDXUfJ738q0z/TkIY T7Ppi10+iyBiOZ4e6Xty5MxPPtpW7wkt3CJKVuUZQg03Xx2MP9n1HjNnUnisvHkGfE KB+MCcz1oqc62Dx+NqcJl6wMN3Wl00qZkZ6sA+aqcgGdWmfQx6p7fKLIf8aaJMPRTX MgjZ2KxGPFmeDLta8paM= From: Michael Fabian 'Xaymar' Dirks To: ffmpeg-devel@ffmpeg.org Date: Wed, 12 Jan 2022 23:49:23 +0100 Message-Id: <4c5c5017d96a602ad4d6ead5bd1122d0a7b7ac33.1642027745.git.michael.dirks@xaymar.com> X-Mailer: git-send-email 2.34.1.windows.1 In-Reply-To: <96117e46dbb4032a02d92c178ea4cc979203a0d3.1642027745.git.michael.dirks@xaymar.com> References: <96117e46dbb4032a02d92c178ea4cc979203a0d3.1642027745.git.michael.dirks@xaymar.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/5] avcodec/amfenc: Add "High Motion Quality Boost" option 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: Michael Fabian 'Xaymar' Dirks Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: W2HrnwraGR7Z This option was missing from amfenc, and is now available. --- libavcodec/amfenc.h | 3 +++ libavcodec/amfenc_h264.c | 2 ++ libavcodec/amfenc_hevc.c | 3 ++- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/libavcodec/amfenc.h b/libavcodec/amfenc.h index 951e529362..f47e6a1200 100644 --- a/libavcodec/amfenc.h +++ b/libavcodec/amfenc.h @@ -108,6 +108,9 @@ typedef struct AmfContext { int me_quarter_pel; int aud; + // Unclear options, have different behavior based on codec. + int hmqb; + // HEVC - specific options int gops_per_idr; diff --git a/libavcodec/amfenc_h264.c b/libavcodec/amfenc_h264.c index afac97a968..87a3bb6a73 100644 --- a/libavcodec/amfenc_h264.c +++ b/libavcodec/amfenc_h264.c @@ -86,6 +86,7 @@ static const AVOption options[] = { { "filler_data", "Filler Data Enable", OFFSET(filler_data), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, { "vbaq", "Enable VBAQ", OFFSET(enable_vbaq), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, { "frame_skipping", "Rate Control Based Frame Skip", OFFSET(skip_frame), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, + { "hmqb", "High Motion Quality Boost", OFFSET(hmqb), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, /// QP Values { "qp_i", "Quantization Parameter for I-Frame", OFFSET(qp_i), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 51, VE }, @@ -331,6 +332,7 @@ static av_cold int amf_encode_init_h264(AVCodecContext *avctx) AMF_ASSIGN_PROPERTY_BOOL(res, ctx->encoder, AMF_VIDEO_ENCODER_ENFORCE_HRD, !!ctx->enforce_hrd); AMF_ASSIGN_PROPERTY_BOOL(res, ctx->encoder, AMF_VIDEO_ENCODER_FILLER_DATA_ENABLE, !!ctx->filler_data); AMF_ASSIGN_PROPERTY_BOOL(res, ctx->encoder, AMF_VIDEO_ENCODER_RATE_CONTROL_SKIP_FRAME_ENABLE, !!ctx->skip_frame); + AMF_ASSIGN_PROPERTY_BOOL(res, ctx->encoder, AMF_VIDEO_ENCODER_HIGH_MOTION_QUALITY_BOOST_ENABLE, !!ctx->hmqb); if (ctx->rate_control_mode == AMF_VIDEO_ENCODER_RATE_CONTROL_METHOD_CONSTANT_QP) { AMF_ASSIGN_PROPERTY_BOOL(res, ctx->encoder, AMF_VIDEO_ENCODER_ENABLE_VBAQ, 0); if (ctx->enable_vbaq) diff --git a/libavcodec/amfenc_hevc.c b/libavcodec/amfenc_hevc.c index b7fee950f6..565be9bad9 100644 --- a/libavcodec/amfenc_hevc.c +++ b/libavcodec/amfenc_hevc.c @@ -74,6 +74,7 @@ static const AVOption options[] = { { "gops_per_idr", "GOPs per IDR 0-no IDR will be inserted", OFFSET(gops_per_idr), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, INT_MAX, VE }, { "preanalysis", "Enable preanalysis", OFFSET(preanalysis), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE}, { "vbaq", "Enable VBAQ", OFFSET(enable_vbaq), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE}, + { "hmqb", "High Motion Quality Boost", OFFSET(hmqb), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, { "enforce_hrd", "Enforce HRD", OFFSET(enforce_hrd), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE}, { "filler_data", "Filler Data Enable", OFFSET(filler_data), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE}, { "max_au_size", "Maximum Access Unit Size for rate control (in bits)", OFFSET(max_au_size), AV_OPT_TYPE_INT,{ .i64 = 0 }, 0, INT_MAX, VE}, @@ -231,7 +232,6 @@ static av_cold int amf_encode_init_hevc(AVCodecContext *avctx) } } - AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD, ctx->rate_control_mode); if (avctx->rc_buffer_size) { AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_HEVC_VBV_BUFFER_SIZE, avctx->rc_buffer_size); @@ -253,6 +253,7 @@ static av_cold int amf_encode_init_hevc(AVCodecContext *avctx) } else { AMF_ASSIGN_PROPERTY_BOOL(res, ctx->encoder, AMF_VIDEO_ENCODER_HEVC_ENABLE_VBAQ, !!ctx->enable_vbaq); } + AMF_ASSIGN_PROPERTY_BOOL(res, ctx->encoder, AMF_VIDEO_ENCODER_HEVC_HIGH_MOTION_QUALITY_BOOST_ENABLE, !!ctx->hmqb); AMF_ASSIGN_PROPERTY_BOOL(res, ctx->encoder, AMF_VIDEO_ENCODER_HEVC_MOTION_HALF_PIXEL, ctx->me_half_pel); AMF_ASSIGN_PROPERTY_BOOL(res, ctx->encoder, AMF_VIDEO_ENCODER_HEVC_MOTION_QUARTERPIXEL, ctx->me_quarter_pel); From patchwork Wed Jan 12 22:49:24 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Fabian 'Xaymar' Dirks X-Patchwork-Id: 33284 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp5047437iog; Wed, 12 Jan 2022 14:50:35 -0800 (PST) X-Google-Smtp-Source: ABdhPJyLB8VtwJ5VggRBpCgW/WpT6kPtm71qOT21TbeZtR26JWjGUoe8KkuZHO0Z0fj8O4/tMJf7 X-Received: by 2002:a05:6402:41a:: with SMTP id q26mr1641356edv.387.1642027834806; Wed, 12 Jan 2022 14:50:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642027834; cv=none; d=google.com; s=arc-20160816; b=GLFPk9LcrHxRVZZrsSHPf7mbZto3fmQK1xk1hdJ6teUcQ46UBN5jqeRsH5gWQh/yyq YielenZrj9kU6NQ8rAYaJGDS7Af8c+PZ8nWiFtGxjOasnAB59BAgpncg8VT12C9qkWsa bUMq6OrcnvHZ/Q2eGW198Yf19QrA9j0XsHonI/2difYKuHI2HMvb9+ES7is+Ig9nODmN rQcPjYFsPEVUpyo/UT89p35+rm+zf1sbnHVVKv+oAiRreoT6/x04eXt6+js8QxeFl3Jw 1/X1ZoBB+Q51tyv9oIqpT/MegGmcKq5y+ULiqo9DX+lKRATpDmXRuMAOzPl6zMmeKySO Y1Xw== 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:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=GkQNhiqjOM20ZKm/zEKMwOhq9CGstYG35pjFRK7M5rA=; b=GSerY9qUM48ny+uTyYo1Cdlm3BsERWMLelvKSTEHFZRvQmQT3RDqA5mlVj94opR3Tj qoZp4DaLrCAQGxK4njR4obF0HK1G4hy+ON3WRLTaL0fdw9ZPBa6crQAWUwertmJpOFjD gnkmxMhCRykm4OX+znNXWzQ/gJzs0QOCXlh1v37PcjRS4hO+AtQ/SZqFQxE87S/ozVAi lwAe++MWSQJaKC3a3MrOTuRnUjT1BFGvh9CJ/9oDt9le0h/oKl5ZhHtSul0hSZBITRcT NJld201vAIJxmDUoDPsc9HIVHjZ/j625rGQ2cKxLcD/6vD90L+Y5N8WmNwxQJUh1M7Ou rfxQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@xaymar.com header.s=2021 header.b=FGmV1IqL; 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=xaymar.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id b9si696865ede.104.2022.01.12.14.50.34; Wed, 12 Jan 2022 14:50:34 -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=@xaymar.com header.s=2021 header.b=FGmV1IqL; 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=xaymar.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D5E5868AEBF; Thu, 13 Jan 2022 00:49:54 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail.xaymar.com (xaymar.com [95.217.118.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6648A68A744 for ; Thu, 13 Jan 2022 00:49:45 +0200 (EET) Received: from localhost.localdomain (unknown [IPv6:2a02:8106:c:6a00:ccbc:cf2c:5bb9:d3cf]) by mail.xaymar.com (Postfix) with ESMTPSA id A5AFA61362; Wed, 12 Jan 2022 23:49:44 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=xaymar.com; s=2021; t=1642027784; bh=vpnCay5zaQG2EdvYec/Hhyuw6WOs/VBg1u0TlvwzzZg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=FGmV1IqLZvCuZV0ScH9vWy3ZLa1wylA+WMO7SOiOhndc9Kl95CGNLvCnorL1eFBkf a46L8BL7k4mbnupGJ0Wq8OJBRdlQzfrtr9O6G156OloxXRs4VezNc+LPvp0w+TPwiR h04ArCb4QDdgRh/w1L1qg2xLRMROJmuoZ5L3cW7g9U61NtBuzSFfxEFh+VVU/cYNC7 2hxtKWS+xvBnjBqqLR+6yN3r2tEHpdyksSQyd0VIbWv5XpF0d9ywwYIFT4Qc/kjb3x 3Ks4g4oPtsHMKwsjGXrcX19SpLgW4eSaGIdC3ouYwZSOERhhu1zVokjIRufm2BxFeB uVhXWuvUV5VEIzkq2XmkXs8QXobQOYJDTRVx3ihLqxZRtXMwQSjx7DSD+qnK85ZTdM ED4CIspNkVTto0ic1fNR0KypD3DXQ0nU7oWmyQ9hEdiWjHKIco58jDAl11a6U8UoZJ fnbfZws3dtUSSXR3N02esXpmiggErPVT7C3Kb7vCU+aOmfFc5iu2rbNEbmEB3+m11T S3L1sQ/+YQk9m1lkF1tbZ1aIFFSTyv4puUNIxlcfAOzENVg5dxmTcFQxdPDgIFruRO zfmwwL0SMsIKoUxhcyGjc83NDOL+IAMq8ziHEUkUsAa9KO2qg30IuInvlOXOIl9t/L Dv9GvBhSRn8ANW/njte4= From: Michael Fabian 'Xaymar' Dirks To: ffmpeg-devel@ffmpeg.org Date: Wed, 12 Jan 2022 23:49:24 +0100 Message-Id: <20bf6e347e33a39c8685335750b6e83002129124.1642027745.git.michael.dirks@xaymar.com> X-Mailer: git-send-email 2.34.1.windows.1 In-Reply-To: <96117e46dbb4032a02d92c178ea4cc979203a0d3.1642027745.git.michael.dirks@xaymar.com> References: <96117e46dbb4032a02d92c178ea4cc979203a0d3.1642027745.git.michael.dirks@xaymar.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/5] avcodec/amfenc: Add missing profiles 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: Michael Fabian 'Xaymar' Dirks Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: ha8I72mpWcwP Adds the missing profiles to the '-help encoder=xxx_amf' list, even if the user may never need these. --- libavcodec/amfenc_h264.c | 11 ++++++----- libavcodec/amfenc_hevc.c | 1 + 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/libavcodec/amfenc_h264.c b/libavcodec/amfenc_h264.c index 87a3bb6a73..ae21c60357 100644 --- a/libavcodec/amfenc_h264.c +++ b/libavcodec/amfenc_h264.c @@ -37,11 +37,12 @@ static const AVOption options[] = { { "lowlatency_highqquality", "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_USAGE_LOW_LATENCY_HIGH_QUALITY }, 0, 0, VE, "usage" }, /// Profile, - { "profile", "Profile", OFFSET(profile),AV_OPT_TYPE_INT, { .i64 = AMF_VIDEO_ENCODER_PROFILE_MAIN }, AMF_VIDEO_ENCODER_PROFILE_BASELINE, AMF_VIDEO_ENCODER_PROFILE_CONSTRAINED_HIGH, VE, "profile" }, - { "main", "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_PROFILE_MAIN }, 0, 0, VE, "profile" }, - { "high", "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_PROFILE_HIGH }, 0, 0, VE, "profile" }, - { "constrained_baseline", "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_PROFILE_CONSTRAINED_BASELINE }, 0, 0, VE, "profile" }, - { "constrained_high", "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_PROFILE_CONSTRAINED_HIGH }, 0, 0, VE, "profile" }, + { "profile", "Profile", OFFSET(profile), AV_OPT_TYPE_INT, { .i64 = AMF_VIDEO_ENCODER_PROFILE_MAIN }, AMF_VIDEO_ENCODER_PROFILE_BASELINE, AMF_VIDEO_ENCODER_PROFILE_CONSTRAINED_HIGH, VE, "profile" }, + { "baseline", "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_PROFILE_BASELINE }, 0, 0, VE, "profile" }, + { "main", "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_PROFILE_MAIN }, 0, 0, VE, "profile" }, + { "high", "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_PROFILE_HIGH }, 0, 0, VE, "profile" }, + { "constrained_baseline", "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_PROFILE_CONSTRAINED_BASELINE }, 0, 0, VE, "profile" }, + { "constrained_high", "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_PROFILE_CONSTRAINED_HIGH }, 0, 0, VE, "profile" }, /// Profile Level { "level", "Profile Level", OFFSET(level), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 62, VE, "level" }, diff --git a/libavcodec/amfenc_hevc.c b/libavcodec/amfenc_hevc.c index 565be9bad9..a69f37e7b1 100644 --- a/libavcodec/amfenc_hevc.c +++ b/libavcodec/amfenc_hevc.c @@ -34,6 +34,7 @@ static const AVOption options[] = { { "profile", "Set the profile (default main)", OFFSET(profile), AV_OPT_TYPE_INT,{ .i64 = AMF_VIDEO_ENCODER_HEVC_PROFILE_MAIN }, AMF_VIDEO_ENCODER_HEVC_PROFILE_MAIN, AMF_VIDEO_ENCODER_HEVC_PROFILE_MAIN, VE, "profile" }, { "main", "", 0, AV_OPT_TYPE_CONST,{ .i64 = AMF_VIDEO_ENCODER_HEVC_PROFILE_MAIN }, 0, 0, VE, "profile" }, + { "main10", "", 0, AV_OPT_TYPE_CONST,{ .i64 = AMF_VIDEO_ENCODER_HEVC_PROFILE_MAIN_10 }, 0, 0, VE, "profile" }, { "profile_tier", "Set the profile tier (default main)", OFFSET(tier), AV_OPT_TYPE_INT,{ .i64 = AMF_VIDEO_ENCODER_HEVC_TIER_MAIN }, AMF_VIDEO_ENCODER_HEVC_TIER_MAIN, AMF_VIDEO_ENCODER_HEVC_TIER_HIGH, VE, "tier" }, { "main", "", 0, AV_OPT_TYPE_CONST, { .i64 = AMF_VIDEO_ENCODER_HEVC_TIER_MAIN }, 0, 0, VE, "tier" },