From patchwork Wed Jan 12 23:17: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: 33288 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp5065381iog; Wed, 12 Jan 2022 15:18:35 -0800 (PST) X-Google-Smtp-Source: ABdhPJzmVMyUh1fN2EGX/PxXZ2jzieftHh3S+bgtYoNyOS3LZzb12osqJW9RrpBwF1o/vMFKM9E+ X-Received: by 2002:a17:906:7945:: with SMTP id l5mr1540423ejo.82.1642029515255; Wed, 12 Jan 2022 15:18:35 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642029515; cv=none; d=google.com; s=arc-20160816; b=wh3oG4xQhCYBLi4DsGiFjRbAk9ad+GJWa0bO+ct580+UO3gSfE8OfC2MsL09Rkch+Z LWiQqpDyvFelrr1qv8KTZQ9xqpp5hxPCPKIxGtHeM2ly6PRrE7udYKaKuwm3ovGqYJvk e2WXA823CWXmJMMMsXhizkGIUocPQqJjNuUk47ypB0UgI4EKpc2Ox8BZ9L2Js7WTtsG2 7ZtZEpPLhXsGCnNhFkOkWZke/T6RoJhp+/T4TFzkakLyPAJomrNJKd0n1fNuW6EikTgK k7qrmrG7o02HwbyipYMS5QMymk2AQU4Lh3R1zqjF9SmQUxwfLmT3V9UITxNWzo1z0g3A WO7A== 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=DqaS+PIgkjvb7YOQA5B2nmZrR70ME/00nWc7BCAXQ6k=; b=j+O1K5qqBTrHfIO+2EkQbMFwueLyfYv1iHfAYRNdKmBU510h015E5HA/cQENishnCo 9MgSt5sXc5Grjf9hmxa5rISrFcI+Zd0iSj+Pp/9uSoEtGyNwFw7Gr/mnNwxrEqzPHByQ rsWLP/al5t7sZUO7IP9f8ux4q9Z0knquYLCO0TQ+HzGlqm/ju/HKYfGmVvJrdNQGdhF2 ObzBDXTdU6VUJzPB5jvLeqyEDL/7yxtPjzPVihcLDxoLITppEzpQ1+pyVV5KHmuQXzOa huulySiQKlt40k/xWHdZTc1z//i/xZqRf2ina2rWYc3Bl/oObWlDkS2B+pd5vtgP3Ake JITw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@xaymar.com header.s=2021 header.b=DrOq9PFK; 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 hd35si510516ejc.678.2022.01.12.15.18.34; Wed, 12 Jan 2022 15:18:35 -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=DrOq9PFK; 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 C076F68AEE4; Thu, 13 Jan 2022 01:18:00 +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 AFF4768AD96 for ; Thu, 13 Jan 2022 01:17:51 +0200 (EET) Received: from localhost.localdomain (unknown [IPv6:2a02:8106:c:6a00:ccbc:cf2c:5bb9:d3cf]) by mail.xaymar.com (Postfix) with ESMTPSA id 101556133D; Thu, 13 Jan 2022 00:17:51 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=xaymar.com; s=2021; t=1642029471; bh=i9Bt8IO17xYrrcbKVVwfin6Qs0C56MpA2vEyhxl2HCc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DrOq9PFKiXQV/l5N95VI03zRqSZYLElbkKYwK3fWIRhslCTdzKP6kqbKxIQUXu++r We/7HDWVxzmVPX1y2ir1OVwXDDIo7VAXL00HmNwZ2qW9Dx+Zyye2YYSHf0Jb+Dvb5O O28uxZlQ/U7F3B+3GE3YY05O+BU2pqxY65aezy7PnhMdQNauDv9Q602PGPYlhl2jFs uG0jPkkPAtVEf5v/lCQXc++CAUOyC6VYuOcgVMmDcA6myt8lwOZCcHsWmfE0dNTTeg N6ypH/jPkYDP3MUA8wAZ13eZWC8+gn+Psni02HHo+bzTpQPibqVpjvHUiMFkWxaAE4 NKwFpBaqMdKRRsrmLrhaEBQPkrgp7bmrFJm60XRFswgepY5BCFfuvNeEe/nfnc7ZUc VsLNyHhnIpK/SnpbbHZo2ZtKN6ntJ6xC8Msrwi3RYA9jRGGnNbV+JtWC+70ZmswoQK Pml1OKoKISUL2LAegpmyIE2l/Z+zOC4iheg8aQN1rAcVyzwJsYYiEt28t2D+fnWmmN h+H+WVcW9S1yT7tit2CpkGgOuh8p6qrmYLQ2vcHahUaOJY9tZst5iHlkECx3KWshhL YPouAyPGE/kf1V9yZ73oUlcqI3AQ6+6laeBbwSa1MjOvv5tP52EZil0e96D4sxr0SZ QHZ4r5vGfOAxjjw5/THI= From: Michael Fabian 'Xaymar' Dirks To: ffmpeg-devel@ffmpeg.org Date: Thu, 13 Jan 2022 00:17:23 +0100 Message-Id: <9cbaf2a700356682713bd01b2a6df3bc8d85c228.1642029358.git.info@xaymar.com> X-Mailer: git-send-email 2.34.1.windows.1 In-Reply-To: References: 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: mWXzHDQwP5k+ From: Michael Fabian 'Xaymar' Dirks 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);