From patchwork Sat Nov 3 02:52:11 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jun Zhao X-Patchwork-Id: 10908 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 B777A44E011 for ; Sat, 3 Nov 2018 04:52:51 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3091668A9C4; Sat, 3 Nov 2018 04:52:23 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pg1-f195.google.com (mail-pg1-f195.google.com [209.85.215.195]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8504568A9DC for ; Sat, 3 Nov 2018 04:52:21 +0200 (EET) Received: by mail-pg1-f195.google.com with SMTP id y4so1309575pgc.12 for ; Fri, 02 Nov 2018 19:52:54 -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=poWQ4gxJTM1aCgSNA+6rcCIsvrHy5o076EmYMiRM7E4=; b=bLaekS8oRE+vWP1opDMemsGqZN/qc4N6PK6ddJpBxDRkx40hRoYw6JGYUdNEAIFWjD +7QpwkADS0oegSAsAKQpHkQ2CLckXGSL2SVkCJNf8MhuYGgKlb969+Q5m7aROq8uhpmk 0hjWDaobU9G8LyNC59IiCTP+6y14NHtseGiuj82YwK7zG7CA2AUbS+v3EhuzVSTY8f+V svsWqUH0V2WTdyxHOwVXKLZmAXhf8DnDNNvDAGESV9/zBe0FXSJGfMXa0sIcxgNR1Bwr xiQ4H4tS9khFFfrrmt4lNrbNulb7cZvqfdkeK/yg0EW+IegMn3gKYOlVHsQKg5wbmaiP sZCg== 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=poWQ4gxJTM1aCgSNA+6rcCIsvrHy5o076EmYMiRM7E4=; b=NNKKm3JegfYY4PTK/k4dEWrmdJbVcUyB0ozAfuRTRe8R764qLGVZdnWT1ek//ju3HH dBgR1Ps2ZsY31vGo8iXGuHAO8eSA2xbvWdqk3VAj7wpGlGcq2LEOLhpXc1tedC6EzFcV ZSZJDmPijaT9Cz5+Gvtwe3tZhi/ylYX0AEoC3kocQUqRR7kZT01Dn+OhEJhiYh7ymYYV 3dSmV8JCMU9yl5jW9z39OPtSgEirvWQP5XBYm/PF615/TcGWesbVfXjciXwDs7WNe3YB SdQA6lUg67yb5XTYKZku+9olmkxKPSDgBrGIhLdVe+BrEYqV5GE1L3EfUxA7wWzDhKhD E2Dw== X-Gm-Message-State: AGRZ1gKL2IdpdLtMWwsWp4BhhEFNvvVvDTvM5Si1CpISCVFJT0s4+KaK uzGk+47ne3sutglaof3a0wi1FEIj X-Google-Smtp-Source: AJdET5dzgCCmK5+QN2lr4DgbIAxD1SOEIDrtISiUcNrFUTDuptyii2PGwGa9C9mVXSNUIXabba2vXg== X-Received: by 2002:a62:8d92:: with SMTP id p18-v6mr14424895pfk.217.1541213572347; Fri, 02 Nov 2018 19:52:52 -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.50 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 02 Nov 2018 19:52:51 -0700 (PDT) From: Jun Zhao To: ffmpeg-devel@ffmpeg.org Date: Sat, 3 Nov 2018 10:52:11 +0800 Message-Id: <1541213532-23882-7-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 6/7] lavc/vaapi_encode_h265: 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_h265.c | 24 ++++++++++++++++++++++++ 1 files changed, 24 insertions(+), 0 deletions(-) diff --git a/libavcodec/vaapi_encode_h265.c b/libavcodec/vaapi_encode_h265.c index 367fa5f..2f243da 100644 --- a/libavcodec/vaapi_encode_h265.c +++ b/libavcodec/vaapi_encode_h265.c @@ -52,6 +52,7 @@ typedef struct VAAPIEncodeH265Context { int tier; int level; int sei; + int sliding_window; // Derived settings. int fixed_qp_idr; @@ -1067,6 +1068,24 @@ static av_cold int vaapi_encode_h265_configure(AVCodecContext *avctx) return 0; } + +static av_cold int vaapi_encode_h265_bit_rate_control(AVCodecContext *avctx) +{ + VAAPIEncodeContext *ctx = avctx->priv_data; + VAAPIEncodeH265Context *priv = avctx->priv_data; + + 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; +} + static const VAAPIEncodeProfile vaapi_encode_h265_profiles[] = { { FF_PROFILE_HEVC_MAIN, 8, 3, 1, 1, VAProfileHEVCMain }, { FF_PROFILE_HEVC_REXT, 8, 3, 1, 1, VAProfileHEVCMain }, @@ -1084,6 +1103,8 @@ static const VAAPIEncodeType vaapi_encode_type_h265 = { .configure = &vaapi_encode_h265_configure, + .bit_rate_control = &vaapi_encode_h265_bit_rate_control, + .sequence_params_size = sizeof(VAEncSequenceParameterBufferHEVC), .init_sequence_params = &vaapi_encode_h265_init_sequence_params, @@ -1151,6 +1172,9 @@ static const AVOption vaapi_encode_h265_options[] = { { "qp", "Constant QP (for P-frames; scaled by qfactor/qoffset for I/B)", OFFSET(qp), AV_OPT_TYPE_INT, { .i64 = 25 }, 0, 52, FLAGS }, + { "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" }, + { "aud", "Include AUD", OFFSET(aud), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, FLAGS },