From patchwork Wed Jan 16 14:34:45 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Fu, Linjie" X-Patchwork-Id: 11770 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 833F944CC7C for ; Wed, 16 Jan 2019 16:34:43 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id AB6AA68AA9D; Wed, 16 Jan 2019 16:34:31 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B415E68AA89 for ; Wed, 16 Jan 2019 16:34:24 +0200 (EET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 16 Jan 2019 06:34:37 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,486,1539673200"; d="scan'208";a="126325330" Received: from media_lj_kbl.sh.intel.com ([10.239.158.132]) by FMSMGA003.fm.intel.com with ESMTP; 16 Jan 2019 06:34:37 -0800 From: Linjie Fu To: ffmpeg-devel@ffmpeg.org Date: Wed, 16 Jan 2019 22:34:45 +0800 Message-Id: <20190116143445.9866-1-linjie.fu@intel.com> X-Mailer: git-send-email 2.17.1 Subject: [FFmpeg-devel] [PATCH 2/2] lavc/vaapi_encode: fix the mismatched vbvBuf size unit for mpeg2 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: Linjie Fu MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" hrd_buffer_size and hrd_initial_buffer_fullness are set in bits, while driver takes the vbvBuf size in 16 kbits. The mismatch will cause quality issue. One way to solve this issue in FFmpeg level is set the bufsize specially for mpeg2 as the unit of 16 kbits, and discard the default CBR mode in driver. Fix the quality issue in #7650. Signed-off-by: Linjie Fu --- libavcodec/vaapi_encode.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/libavcodec/vaapi_encode.c b/libavcodec/vaapi_encode.c index eda8a36299..c932d9d7fb 100644 --- a/libavcodec/vaapi_encode.c +++ b/libavcodec/vaapi_encode.c @@ -1305,9 +1305,11 @@ static av_cold int vaapi_encode_init_rate_control(AVCodecContext *avctx) if (avctx->rc_buffer_size) hrd_buffer_size = avctx->rc_buffer_size; else if (avctx->rc_max_rate > 0) - hrd_buffer_size = avctx->rc_max_rate; + hrd_buffer_size = ctx->codec->profiles->va_profile > 1 ? + avctx->rc_max_rate : avctx->rc_max_rate >> 14; else - hrd_buffer_size = avctx->bit_rate; + hrd_buffer_size = ctx->codec->profiles->va_profile > 1 ? + avctx->bit_rate : avctx->bit_rate >> 14; if (avctx->rc_initial_buffer_occupancy) { if (avctx->rc_initial_buffer_occupancy > hrd_buffer_size) { av_log(avctx, AV_LOG_ERROR, "Invalid RC buffer settings: " @@ -1318,7 +1320,7 @@ static av_cold int vaapi_encode_init_rate_control(AVCodecContext *avctx) } hrd_initial_buffer_fullness = avctx->rc_initial_buffer_occupancy; } else { - hrd_initial_buffer_fullness = hrd_buffer_size * 3 / 4; + hrd_initial_buffer_fullness = FFMAX(avctx->bit_rate, avctx->rc_max_rate) * 3 / 4; } if (avctx->rc_max_rate && avctx->rc_max_rate < avctx->bit_rate) {