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