From patchwork Tue Aug 13 00:25:38 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aman Karmani X-Patchwork-Id: 14451 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 B59A344945F for ; Tue, 13 Aug 2019 03:32:49 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9421E68AB74; Tue, 13 Aug 2019 03:32:49 +0300 (EEST) 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 96E4668AB72 for ; Tue, 13 Aug 2019 03:32:42 +0300 (EEST) Received: by mail-pl1-f193.google.com with SMTP id bj8so1509960plb.4 for ; Mon, 12 Aug 2019 17:32:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tmm1-net.20150623.gappssmtp.com; s=20150623; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=aDeWHt1tdStP4xWhW0jiG2JbLYEomVno3NfD8g8nfsQ=; b=PhONxIiETGW0lbUmuY7ZhDRiczaiCwjJfL3NxUlJiwhOacV90GpklDTEFlu8wLD532 XgraDf47uCuw6uGCFZVooEwy3QffiTuWEU2OKmod0hxhksCXD8SqLB5kh7ygjzxlgLMt YXhlHGiV3AUMlQPrzMQG2dQhLd4jSgoESPXAaXcxnW0B1+jFLfKQFcNFT05eoy5SSEZl rFizRS8dAcVNULtg2lQf8h0RIDAIL9D+gcNIWAnBxpTXQhC4GntXyZAGoC/U/Gj2IMYZ RYxRw8WVksb12GhNfbjo+ytwAdOtV+hLmy7oJlHyPRgczNypL/01tzx3nRJsxpsgXnrv L5Ng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=aDeWHt1tdStP4xWhW0jiG2JbLYEomVno3NfD8g8nfsQ=; b=qXuMFfOnIJl2TiCO/fxnU8YokP2OKoeMb6r5sI6TLKoa64odUh2vdXMai7ENP9OFfZ PI3a4MJflOjJvGb28eHnEEX9qjJmScnfjoLTG2uhOdMN811n7qcOiCy4X16XpO6W4znC 0VrnG4gQveEhXin35xWwNELf7FaGJMP/G7HFOoE3vF4Uz2ZwnTDkZ1NBBa5Bi7wMzDs1 g4VvbqPTfmih8A0KCdoAfHH1xfRELLYGHX/KO7r3MTJTXiEbKeRAyp/BUtVNECiags4S ImwHC7Fq41s7KIGGPC4ls1HnaB0vA5taU2Drm9xVJf8GZ0BG15WieSHJm5kAxoIjqhkI Coow== X-Gm-Message-State: APjAAAWHNG1tl45rV3H9U5zdGSmhQb1E+IoZD+jQqp9zwVgk53V0wnSM edzXbgqRb9cX2kRYwsbMPuHPdBCZ0h4= X-Google-Smtp-Source: APXvYqwBooduaWWOLQ+Ip0CGbrisFzFMtkAAjJk0iA2GxGyhF9Ma7Rr9lULjs7cuAHPspWfBiOQezg== X-Received: by 2002:a17:902:1105:: with SMTP id d5mr32341244pla.197.1565655955229; Mon, 12 Aug 2019 17:25:55 -0700 (PDT) Received: from localhost.localdomain (ip184-189-221-177.sb.sd.cox.net. [184.189.221.177]) by smtp.gmail.com with ESMTPSA id q63sm139305959pfb.81.2019.08.12.17.25.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 12 Aug 2019 17:25:54 -0700 (PDT) From: Aman Gupta To: ffmpeg-devel@ffmpeg.org Date: Mon, 12 Aug 2019 17:25:38 -0700 Message-Id: <20190813002538.90687-2-ffmpeg@tmm1.net> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190813002538.90687-1-ffmpeg@tmm1.net> References: <20190813002538.90687-1-ffmpeg@tmm1.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/2] vaapi_encode: work-around VBR driver bug in Intel Broxton/CherryView 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: sw@jkqxz.net, Aman Gupta , linjie.fu@intel.com Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Aman Gupta The hardware encoder on these chipsets produces very low bitrates in VBR mode if it receives VAEncMiscParameterTypeRateControl more than once. /cc intel/intel-vaapi-driver#480 Signed-off-by: Aman Gupta --- libavcodec/vaapi_encode.c | 8 +++++++- libavutil/hwcontext_vaapi.c | 10 ++++++++++ libavutil/hwcontext_vaapi.h | 6 ++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/libavcodec/vaapi_encode.c b/libavcodec/vaapi_encode.c index 231efba6cc..a5f46cdee0 100644 --- a/libavcodec/vaapi_encode.c +++ b/libavcodec/vaapi_encode.c @@ -163,7 +163,7 @@ static int vaapi_encode_issue(AVCodecContext *avctx, VAAPIEncodeContext *ctx = avctx->priv_data; VAAPIEncodeSlice *slice; VAStatus vas; - int err, i; + int err, i, send_global_params; char data[MAX_PARAM_BUFFER_SIZE]; size_t bit_len; av_unused AVFrameSideData *sd; @@ -236,6 +236,12 @@ static int vaapi_encode_issue(AVCodecContext *avctx, if (pic->type == PICTURE_TYPE_IDR) { for (i = 0; i < ctx->nb_global_params; i++) { + if (pic->encode_order != 0 && + ctx->global_params_type[i] == VAEncMiscParameterTypeRateControl && + ctx->hwctx->driver_quirks & AV_VAAPI_DRIVER_QUIRK_RC_PARAMS_ONCE) { + // send VAEncMiscParameterTypeRateControl only once to affected drivers + continue; + } err = vaapi_encode_make_misc_param_buffer(avctx, pic, ctx->global_params_type[i], ctx->global_params[i], diff --git a/libavutil/hwcontext_vaapi.c b/libavutil/hwcontext_vaapi.c index cf117640f2..a206ce8880 100644 --- a/libavutil/hwcontext_vaapi.c +++ b/libavutil/hwcontext_vaapi.c @@ -323,6 +323,16 @@ static const struct { "Splitted-Desktop Systems VDPAU backend for VA-API", AV_VAAPI_DRIVER_QUIRK_SURFACE_ATTRIBUTES, }, + { + "Intel Broxton", + "Intel(R) Broxton", + AV_VAAPI_DRIVER_QUIRK_RC_PARAMS_ONCE, + }, + { + "Intel CherryView", + "Intel(R) CherryView", + AV_VAAPI_DRIVER_QUIRK_RC_PARAMS_ONCE, + }, }; static int vaapi_device_init(AVHWDeviceContext *hwdev) diff --git a/libavutil/hwcontext_vaapi.h b/libavutil/hwcontext_vaapi.h index 0b2e071cb3..ea4181fab0 100644 --- a/libavutil/hwcontext_vaapi.h +++ b/libavutil/hwcontext_vaapi.h @@ -58,6 +58,12 @@ enum { * and the results of the vaQuerySurfaceAttributes() call will be faked. */ AV_VAAPI_DRIVER_QUIRK_SURFACE_ATTRIBUTES = (1 << 3), + + /** + * The driver does not react well to receiving global parameters with + * every IDR frame. + */ + AV_VAAPI_DRIVER_QUIRK_RC_PARAMS_ONCE = (1 << 4), }; /**