From patchwork Wed Sep 2 02:34:01 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Makoto KIMURA X-Patchwork-Id: 22058 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 C16F044B652 for ; Wed, 2 Sep 2020 05:42:38 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9CDF56881C8; Wed, 2 Sep 2020 05:42:38 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ej1-f41.google.com (mail-ej1-f41.google.com [209.85.218.41]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id F3B6B6881C8 for ; Wed, 2 Sep 2020 05:42:31 +0300 (EEST) Received: by mail-ej1-f41.google.com with SMTP id a26so4503335ejc.2 for ; Tue, 01 Sep 2020 19:42:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=SSpQoC4Q2d5YCgw1lY+Lm4ZKUuGH3PX7dBAH6xmjd60=; b=NTIBsxDAfRoZ2iTxigbIKD0DTWlG+NxeDXhaDShG1kKaRWHycIdefm9FcPa6E8PONu O06HffnwUsAXBxe3sHIFdku+dRC1n0P3Sah2oWsRAamArbMqxkDJ2suI9MXBfQqA6sux xj1SUUOWP1aJNHNAFNTghxNvHSzQIKsCmV//wvy/jQDSjwOoEFQynIWCZKSi4uKpIju1 9GYUXsjcaugJG6XnsEpjv7bGK3Rm1pnoDuwRLI2L2fxvPxl0tSwU73fYhC2gFk6TeWG9 ppy51GVhBl9pHGTtmwo+0+tsC2LgqZ4Z3nYAkgw0IN4/52PH2DKU2IFF+X/tLuo6VE+F M0hg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=SSpQoC4Q2d5YCgw1lY+Lm4ZKUuGH3PX7dBAH6xmjd60=; b=i88oyLHdWYVcGEL5Cmj9oUwwmSfaCHTpgdl7VRr9s414t3sgJIK4wkZHtl63TAJIxF 2Vl1Pa0DDpSCgbvqafr/QaUx467ImBOWjsmRJzAkvgg6oIKUHhTYqJeiBmA/CWW0OrsY WyEWVWBLaG9e6mL2DJRZnMiPiEOB04MKEkpFiBzCg+m7iySDKi/o3YM1vGQn8cicbXrw czgz3epK0+hOY7/oIRy0v/p5Zt3N1rsgr5S/qOw3XB0OtA0WivBVRnc+LV5NO4LAm5mR nHBJpkaE1rd0N6kOoEICmmeYwt5dZ2T1Mky4Hlje2cfJNbdhXzr9gYj37CkFlJYOs+xM 2DRg== X-Gm-Message-State: AOAM532YTgRD9iDGdScmSKNkKUwy3zYCba4XPcHYKT0tztFfeNsaH6qe M+/c1FLYexv+UYx7mzCIy+DCXDbmhRCaxDNuq6fedt4Ikg1Z5g== X-Google-Smtp-Source: ABdhPJxxRiitZkGLdLF5gAbRRoFJ/tMEVdmFzLDsS1OaEpWT5RF1fD0ss4I421uSDj7HVOehbeCRX7ejwzEPkmr36MU= X-Received: by 2002:a17:906:bb06:: with SMTP id jz6mr4484275ejb.248.1599014077612; Tue, 01 Sep 2020 19:34:37 -0700 (PDT) MIME-Version: 1.0 From: Makoto KIMURA Date: Wed, 2 Sep 2020 11:34:01 +0900 Message-ID: To: ffmpeg-devel@ffmpeg.org Subject: [FFmpeg-devel] bug report in QSV's QVBR rate 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Hi, I found a bug in libavcodec/qsvenc.c. You know, QSV has several bitrate control modes (CBR, VBR, .. and so on). The bug is bitrate setting in QVBR. In the original code, bitrate value is set in "mfx.MaxKbps". Actually, it must be "mfx.TargetKbps". As a result, FFmpeg's QVBR always works in quite low bitrate (ignoring user set bitrate value). Here is the patch for ffmpeg-4.3.1. (Since MaxKbos has no effects or side-effects in QVBR, we can leave it as is.) Best regards case MFX_RATECONTROL_CQP: @@ -652,6 +654,10 @@ #endif } diff --strip-trailing-cr -uNr ffmpeg-4.3.1.orig/libavcodec/qsvenc.c ffmpeg-4.3.1/libavcodec/qsvenc.c --- ffmpeg-4.3.1.orig/libavcodec/qsvenc.c 2020-07-11 19:39:30.000000000 +0900 +++ ffmpeg-4.3.1/libavcodec/qsvenc.c 2020-08-03 19:29:41.317275300 +0900 @@ -616,8 +616,10 @@ q->param.mfx.MaxKbps = max_bitrate_kbps / brc_param_multiplier; q->param.mfx.BRCParamMultiplier = brc_param_multiplier; #if QSV_HAVE_QVBR - if (q->param.mfx.RateControlMethod == MFX_RATECONTROL_QVBR) + if (q->param.mfx.RateControlMethod == MFX_RATECONTROL_QVBR) { + q->param.mfx.TargetKbps = q->param.mfx.MaxKbps; q->extco3.QVBRQuality = av_clip(avctx->global_quality, 0, 51); + } #endif break;