it actually should fail-down to VBR but we have VBR already exposed.

LGTM , no other objection(s) ?

On Tue, Jan 30, 2018 at 11:07 AM, Zhong Li <zhong...@intel.com> wrote:

> AVBR is supported from API 1.3 but only available for Windows
>
> Signed-off-by: Zhong Li <zhong...@intel.com>
> ---
>  libavcodec/qsvenc.c | 17 ++++++++++++++---
>  libavcodec/qsvenc.h |  2 ++
>  2 files changed, 16 insertions(+), 3 deletions(-)
>
> diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c
> index 24d9ec4..16d942f 100644
> --- a/libavcodec/qsvenc.c
> +++ b/libavcodec/qsvenc.c
> @@ -84,7 +84,9 @@ static const struct {
>      { MFX_RATECONTROL_CBR,     "CBR" },
>      { MFX_RATECONTROL_VBR,     "VBR" },
>      { MFX_RATECONTROL_CQP,     "CQP" },
> +#if QSV_HAVE_AVBR
>      { MFX_RATECONTROL_AVBR,    "AVBR" },
> +#endif
>  #if QSV_HAVE_LA
>      { MFX_RATECONTROL_LA,      "LA" },
>  #endif
> @@ -163,11 +165,14 @@ static void dump_video_param(AVCodecContext *avctx,
> QSVEncContext *q,
>      } else if (info->RateControlMethod == MFX_RATECONTROL_CQP) {
>          av_log(avctx, AV_LOG_VERBOSE, "QPI: %"PRIu16"; QPP: %"PRIu16";
> QPB: %"PRIu16"\n",
>                 info->QPI, info->QPP, info->QPB);
> -    } else if (info->RateControlMethod == MFX_RATECONTROL_AVBR) {
> +    }
> +#if QSV_HAVE_AVBR
> +    else if (info->RateControlMethod == MFX_RATECONTROL_AVBR) {
>          av_log(avctx, AV_LOG_VERBOSE,
>                 "TargetKbps: %"PRIu16"; Accuracy: %"PRIu16"; Convergence:
> %"PRIu16"\n",
>                 info->TargetKbps, info->Accuracy, info->Convergence);
>      }
> +#endif
>  #if QSV_HAVE_LA
>      else if (info->RateControlMethod == MFX_RATECONTROL_LA
>  #if QSV_HAVE_LA_HRD
> @@ -333,10 +338,14 @@ static int select_rc_mode(AVCodecContext *avctx,
> QSVEncContext *q)
>      else if (avctx->rc_max_rate == avctx->bit_rate) {
>          rc_mode = MFX_RATECONTROL_CBR;
>          rc_desc = "constant bitrate (CBR)";
> -    } else if (!avctx->rc_max_rate) {
> +    }
> +#if QSV_HAVE_AVBR
> +    else if (!avctx->rc_max_rate) {
>          rc_mode = MFX_RATECONTROL_AVBR;
>          rc_desc = "average variable bitrate (AVBR)";
> -    } else {
> +    }
> +#endif
> +    else {
>          rc_mode = MFX_RATECONTROL_VBR;
>          rc_desc = "variable bitrate (VBR)";
>      }
> @@ -522,11 +531,13 @@ static int init_video_param(AVCodecContext *avctx,
> QSVEncContext *q)
>          q->param.mfx.QPB = av_clip(quant * fabs(avctx->b_quant_factor) +
> avctx->b_quant_offset, 0, 51);
>
>          break;
> +#if QSV_HAVE_AVBR
>      case MFX_RATECONTROL_AVBR:
>          q->param.mfx.TargetKbps  = avctx->bit_rate / 1000;
>          q->param.mfx.Convergence = q->avbr_convergence;
>          q->param.mfx.Accuracy    = q->avbr_accuracy;
>          break;
> +#endif
>  #if QSV_HAVE_LA
>      case MFX_RATECONTROL_LA:
>          q->param.mfx.TargetKbps  = avctx->bit_rate / 1000;
> diff --git a/libavcodec/qsvenc.h b/libavcodec/qsvenc.h
> index 088a61d..725651e 100644
> --- a/libavcodec/qsvenc.h
> +++ b/libavcodec/qsvenc.h
> @@ -46,10 +46,12 @@
>  #define QSV_HAVE_LA_HRD QSV_VERSION_ATLEAST(1, 11)
>
>  #if defined(_WIN32)
> +#define QSV_HAVE_AVBR   QSV_VERSION_ATLEAST(1, 3)
>  #define QSV_HAVE_ICQ    QSV_VERSION_ATLEAST(1, 8)
>  #define QSV_HAVE_VCM    QSV_VERSION_ATLEAST(1, 8)
>  #define QSV_HAVE_QVBR   QSV_VERSION_ATLEAST(1, 11)
>  #else
> +#define QSV_HAVE_AVBR   0
>  #define QSV_HAVE_ICQ    0
>  #define QSV_HAVE_VCM    0
>  #define QSV_HAVE_QVBR   0
> --
> 1.8.3.1
>
> _______________________________________________
> libav-devel mailing list
> libav-devel@libav.org
> https://lists.libav.org/mailman/listinfo/libav-devel
_______________________________________________
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to