From patchwork Sat Nov 3 02:52:09 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jun Zhao X-Patchwork-Id: 10906 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 3D5A444E011 for ; Sat, 3 Nov 2018 04:52:45 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id AAB3668A989; Sat, 3 Nov 2018 04:52:16 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl1-f193.google.com (mail-pl1-f193.google.com [209.85.214.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8476168A989 for ; Sat, 3 Nov 2018 04:52:09 +0200 (EET) Received: by mail-pl1-f193.google.com with SMTP id c13-v6so1794028plz.13 for ; Fri, 02 Nov 2018 19:52:42 -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:in-reply-to:references; bh=YzSYJXx7SoFiNYgZPrl91bgoIRoqkd9/RMCHBz/tKQQ=; b=sRlRUWvsQRFPvtiDNscMT/zyL2D/8XqhEQbuh2+9jSRNKuPmwywqWP5YmjcoD7WSDQ KmDyur23L0W/s4XUd8KlN8W+c6ByjST/z+f/mvX0NVNcqCH09nBh3AvY3ijU0EDpyl5x eIKzfulsYGDmi6CYwkiSJosJf7BUxBYce0naaAIDU5HNNbOPAfL6eofcRYjBF28mFPZY cOHVui/8Wy6sOL08aDj8UCpO/mHxVikbs62+uc12UnqixjZF/heMxZzgpmClfQeSGOQt tmSkyBmY+zdgGSwfFYZb8/cdxEbr1dxqfhJC8npeG9uArBGbXQH/rqyucYlyA/4bbC1L df7w== 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:in-reply-to :references; bh=YzSYJXx7SoFiNYgZPrl91bgoIRoqkd9/RMCHBz/tKQQ=; b=mUSZWAksz1TSxAsYrr6e18N6KlqVacU9eKHgLxIU3Fl1xiuytWGbRD/XFlk8huWSxf 0T3UUVcERK7HZhaCIJupywrbLrQlGgK5kaHehKK8BaMlbxYqTU6N1KW/YmqDrRia8ISv rG5udcgVAiuSjNY/2SPECeUtNXXKKsR++KspCssJ+s4MNEPSGo5Gg3ZxwgbE14jlIhFA p7b2NQU3gko00yHz7XNBcWABGHDha/IXOx2zsXIn96GgC4IPmtYmrsrfGCHvEyUVGUEc 25O0HHcM1wGgjRP2y9Wqul4D+2r/XCK4+fj7k17OrNw7C2tL2d52Ig9/D8Tsq6gJAgIR 0rBQ== X-Gm-Message-State: AGRZ1gL/AHzZQPUhxXDAJLLIGkKm7xCU0ph7wS75AdTJKc8/p66hPiOa WWvH8fzZ6enrnVj6SOfLuTXeScer X-Google-Smtp-Source: AJdET5casQKzlO3dWWNuwwG4nRBHXC6osW6brclw2dCOj6sKNUWnimUjDwK9csZFU3Lf011HLtMsMA== X-Received: by 2002:a17:902:6113:: with SMTP id t19-v6mr13849200plj.84.1541213560768; Fri, 02 Nov 2018 19:52:40 -0700 (PDT) Received: from localhost.localdomain ([47.90.47.25]) by smtp.gmail.com with ESMTPSA id e127-v6sm33803195pfe.142.2018.11.02.19.52.39 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 02 Nov 2018 19:52:39 -0700 (PDT) From: Jun Zhao To: ffmpeg-devel@ffmpeg.org Date: Sat, 3 Nov 2018 10:52:09 +0800 Message-Id: <1541213532-23882-5-git-send-email-mypopydev@gmail.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1541213532-23882-1-git-send-email-mypopydev@gmail.com> References: <1541213532-23882-1-git-send-email-mypopydev@gmail.com> Subject: [FFmpeg-devel] [PATCH 4/7] lavc/vaapi_encode_h264: Enable sliding window control. 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: Jun Zhao , Jun Zhao MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Sliding window control is a feature to reduce the instant bitrate fluctuation, and occasional big frame size for intra and scene change frames are allowed. And the fluctuation level can be controlled by max bit rate. Signed-off-by: Jun Zhao --- libavcodec/vaapi_encode_h264.c | 13 +++++++++++++ 1 files changed, 13 insertions(+), 0 deletions(-) diff --git a/libavcodec/vaapi_encode_h264.c b/libavcodec/vaapi_encode_h264.c index 060277b..5219522 100644 --- a/libavcodec/vaapi_encode_h264.c +++ b/libavcodec/vaapi_encode_h264.c @@ -59,6 +59,7 @@ typedef struct VAAPIEncodeH264Context { int profile; int level; int mb_rate_control; + int sliding_window; // Derived settings. int mb_width; @@ -903,6 +904,16 @@ static av_cold int vaapi_encode_h264_bit_rate_control(AVCodecContext *avctx) "supported with this VAAPI version.\n"); #endif } + + if (priv->sliding_window) { +#if VA_CHECK_VERSION(1, 1, 0) + ctx->rc_params.rc.rc_flags.bits.frame_tolerance_mode = priv->sliding_window; +#else + av_log(avctx, AV_LOG_WARNING, "The sliding window is not " + "supported with this VAAPI version.\n"); +#endif + } + return 0; } @@ -1022,6 +1033,8 @@ static const AVOption vaapi_encode_h264_options[] = { OFFSET(quality), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, FLAGS }, { "mb_rate_control", "MB level bitrate control (only supported on GEN9+)", OFFSET(mb_rate_control), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, FLAGS, "mb_rate_control" }, + { "sliding_window", "Use sliding window to reduce the instant bitrate fluctuations", + OFFSET(sliding_window), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, FLAGS, "sliding_window" }, { "coder", "Entropy coder type", OFFSET(coder), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, FLAGS, "coder" }, { "cavlc", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, INT_MIN, INT_MAX, FLAGS, "coder" },