On Thu, Aug 27, 2015 at 11:02:44AM +0200, Sven Dueking wrote: > > -----Ursprüngliche Nachricht----- > > Von: ffmpeg-devel [mailto:ffmpeg-devel-boun...@ffmpeg.org] Im Auftrag > > von Sven Dueking > > Gesendet: Freitag, 21. August 2015 10:18 > > An: ffmpeg-devel@ffmpeg.org > > Cc: Sven Dueking > > Betreff: [FFmpeg-devel] [PATCH] QSV : Added look ahead rate control > > mode > > > > From: Sven Dueking <s...@nablet.com> > > > > --- > > libavcodec/qsvenc.c | 31 +++++++++++++++++++++++++++++-- > > libavcodec/qsvenc.h | 8 ++++++++ > > libavcodec/qsvenc_h264.c | 12 ++++++++++++ > > 3 files changed, 49 insertions(+), 2 deletions(-) > > > > diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c index > > 1532258..1aeab03 100644 > > --- a/libavcodec/qsvenc.c > > +++ b/libavcodec/qsvenc.c > > @@ -107,8 +107,16 @@ static int init_video_param(AVCodecContext *avctx, > > QSVEncContext *q) > > q->param.mfx.RateControlMethod = MFX_RATECONTROL_CBR; > > ratecontrol_desc = "constant bitrate (CBR)"; > > } else if (!avctx->rc_max_rate) { > > - q->param.mfx.RateControlMethod = MFX_RATECONTROL_AVBR; > > - ratecontrol_desc = "average variable bitrate (AVBR)"; > > +#if QSV_VERSION_ATLEAST(1,7) > > + if (q->look_ahead) { > > + q->param.mfx.RateControlMethod = MFX_RATECONTROL_LA; > > + ratecontrol_desc = "lookahead (LA)"; > > + } else > > +#endif > > + { > > + q->param.mfx.RateControlMethod = MFX_RATECONTROL_AVBR; > > + ratecontrol_desc = "average variable bitrate (AVBR)"; > > + } > > } else { > > q->param.mfx.RateControlMethod = MFX_RATECONTROL_VBR; > > ratecontrol_desc = "variable bitrate (VBR)"; @@ -132,6 +140,9 > > @@ static int init_video_param(AVCodecContext *avctx, QSVEncContext *q) > > > > break; > > case MFX_RATECONTROL_AVBR: > > +#if QSV_VERSION_ATLEAST(1,7) > > + case MFX_RATECONTROL_LA: > > +#endif > > q->param.mfx.TargetKbps = avctx->bit_rate / 1000; > > q->param.mfx.Convergence = q->avbr_convergence; > > q->param.mfx.Accuracy = q->avbr_accuracy; > > @@ -151,6 +162,22 @@ static int init_video_param(AVCodecContext *avctx, > > QSVEncContext *q) > > > > q->extparam[0] = (mfxExtBuffer *)&q->extco; > > > > +#if QSV_VERSION_ATLEAST(1,6) > > + q->extco2.Header.BufferId = MFX_EXTBUFF_CODING_OPTION2; > > + q->extco2.Header.BufferSz = sizeof(q->extco2); > > + > > +#if QSV_VERSION_ATLEAST(1,7) > > + // valid value range is from 10 to 100 inclusive > > + // to instruct the encoder to use the default value this > > should be set to zero > > + q->extco2.LookAheadDepth = q->look_ahead_depth != 0 ? > > FFMAX(10, q->look_ahead_depth) : 0; > > +#endif > > +#if QSV_VERSION_ATLEAST(1,8) > > + q->extco2.LookAheadDS = q->look_ahead_downsampling; > > +#endif > > + > > + q->extparam[1] = (mfxExtBuffer *)&q->extco2; > > + > > +#endif > > q->param.ExtParam = q->extparam; > > q->param.NumExtParam = FF_ARRAY_ELEMS(q->extparam); > > } > > diff --git a/libavcodec/qsvenc.h b/libavcodec/qsvenc.h index > > 2316488..2a21f82 100644 > > --- a/libavcodec/qsvenc.h > > +++ b/libavcodec/qsvenc.h > > @@ -50,7 +50,12 @@ typedef struct QSVEncContext { > > mfxFrameAllocRequest req; > > > > mfxExtCodingOption extco; > > +#if QSV_VERSION_ATLEAST(1,6) > > + mfxExtCodingOption2 extco2; > > + mfxExtBuffer *extparam[2]; > > +#else > > mfxExtBuffer *extparam[1]; > > +#endif > > > > AVFifoBuffer *async_fifo; > > > > @@ -62,6 +67,9 @@ typedef struct QSVEncContext { > > int avbr_accuracy; > > int avbr_convergence; > > int pic_timing_sei; > > + int look_ahead; > > + int look_ahead_depth; > > + int look_ahead_downsampling; > > > > char *load_plugins; > > } QSVEncContext; > > diff --git a/libavcodec/qsvenc_h264.c b/libavcodec/qsvenc_h264.c index > > b15f6b2..b569efe 100644 > > --- a/libavcodec/qsvenc_h264.c > > +++ b/libavcodec/qsvenc_h264.c > > @@ -71,6 +71,18 @@ static const AVOption options[] = { > > { "avbr_convergence", "Convergence of the AVBR ratecontrol", > > OFFSET(qsv.avbr_convergence), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, > > INT_MAX, VE }, > > { "pic_timing_sei", "Insert picture timing SEI with > > pic_struct_syntax element", OFFSET(qsv.pic_timing_sei), > > AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, VE }, > > > > +#if QSV_VERSION_ATLEAST(1,7) > > + { "look_ahead", "Use VBR algorithm with look ahead", > > OFFSET(qsv.look_ahead), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, VE > > }, > > + { "look_ahead_depth", "Depth of look ahead in number frames", > > +OFFSET(qsv.look_ahead_depth), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 100, > > VE > > +}, #endif > > + > > +#if QSV_VERSION_ATLEAST(1,8) > > + { "look_ahead_downsampling", NULL, > > OFFSET(qsv.look_ahead_downsampling), AV_OPT_TYPE_INT, { .i64 = > > MFX_LOOKAHEAD_DS_UNKNOWN }, MFX_LOOKAHEAD_DS_UNKNOWN, > > MFX_LOOKAHEAD_DS_2x, VE, "look_ahead_downsampling" }, > > + { "unknown" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = > > MFX_LOOKAHEAD_DS_UNKNOWN }, INT_MIN, INT_MAX, VE, > > "look_ahead_downsampling" }, > > + { "off" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = > > MFX_LOOKAHEAD_DS_OFF }, INT_MIN, INT_MAX, VE, > > "look_ahead_downsampling" }, > > + { "2x" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = > > MFX_LOOKAHEAD_DS_2x }, INT_MIN, INT_MAX, VE, > > "look_ahead_downsampling" }, > > +#endif > > + > > { "profile", NULL, OFFSET(qsv.profile), AV_OPT_TYPE_INT, { .i64 = > > MFX_PROFILE_UNKNOWN }, 0, INT_MAX, VE, "profile" }, > > { "unknown" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = > > MFX_PROFILE_UNKNOWN }, INT_MIN, INT_MAX, VE, "profile" }, > > { "baseline", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = > > MFX_PROFILE_AVC_BASELINE }, INT_MIN, INT_MAX, VE, "profile" }, > > -- > > 1.8.3.1 > > Hi Michael, > > sorry to bother you, is this patch still not ok ?
Iam not QSV maintainer, indeed i still dont have a setup to test QSV, the QSV maintainer should review this patch, or is he still on vacation ? [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Many that live deserve death. And some that die deserve life. Can you give it to them? Then do not be too eager to deal out death in judgement. For even the very wise cannot see all ends. -- Gandalf
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel