> -----Original Message----- > From: Li, Zhong > Sent: Thursday, November 1, 2018 15:16 > To: FFmpeg development discussions and patches <ffmpeg- > de...@ffmpeg.org> > Cc: Fu, Linjie <linjie...@intel.com> > Subject: RE: [FFmpeg-devel] [PATCH] avcodec/qsvenc: add VDENC support > for H264 and HEVC > > > From: ffmpeg-devel [mailto:ffmpeg-devel-boun...@ffmpeg.org] On > Behalf > > Of Linjie Fu > > Sent: Thursday, November 1, 2018 10:59 AM > > To: ffmpeg-devel@ffmpeg.org > > Cc: Fu, Linjie <linjie...@intel.com> > > Subject: [FFmpeg-devel] [PATCH] avcodec/qsvenc: add VDENC support for > > H264 and HEVC > > > > Add VDENC(lowpower mode) support for QSV h264 and HEVC with the > > limitation of MSDK API verion greater than 1.15. > > Should be "version", not "verion" > IMHO, API version limitation is not necessary in the commit message since it > is quite clear in the code > > > > > It's an experimental function(like lowpower in vaapi) with some limitations: > > - CBR/VBR require HuC which should be explicitly loaded via i915 module > > parameter(i915.enable_guc=2 for >=4.16) > > 4.16 is not a clear message, should be Linux kernel version >= 4.16. > > > - HEVC VDENC was supported >= ICE LAKE > > > > use option "-low_power 1" to enable VDENC. > > > > Signed-off-by: Linjie Fu <linjie...@intel.com> > > --- > > libavcodec/qsvenc.c | 3 +++ > > libavcodec/qsvenc.h | 2 ++ > > libavcodec/qsvenc_h264.c | 3 +++ > > libavcodec/qsvenc_hevc.c | 3 +++ > > 4 files changed, 11 insertions(+) > > > > diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c index > > 948751daf4..7a031297fe 100644 > > --- a/libavcodec/qsvenc.c > > +++ b/libavcodec/qsvenc.c > > @@ -464,6 +464,9 @@ static int init_video_param(AVCodecContext *avctx, > > QSVEncContext *q) > > } > > } > > > > +#if QSV_HAVE_VDENC > > + q->param.mfx.LowPower = q->low_power ? > > MFX_CODINGOPTION_ON:MFX_CODINGOPTION_OFF; > > +#endif > > q->param.mfx.CodecProfile = q->profile; > > q->param.mfx.TargetUsage = avctx->compression_level; > > q->param.mfx.GopPicSize = FFMAX(0, avctx->gop_size); > > diff --git a/libavcodec/qsvenc.h b/libavcodec/qsvenc.h index > > 50cc4267e7..a396aa7d3f 100644 > > --- a/libavcodec/qsvenc.h > > +++ b/libavcodec/qsvenc.h > > @@ -44,6 +44,7 @@ > > #define QSV_HAVE_LA QSV_VERSION_ATLEAST(1, 7) > > #define QSV_HAVE_LA_DS QSV_VERSION_ATLEAST(1, 8) #define > > QSV_HAVE_LA_HRD QSV_VERSION_ATLEAST(1, 11) > > +#define QSV_HAVE_VDENC QSV_VERSION_ATLEAST(1, 15) > > > > #if defined(_WIN32) || defined(__CYGWIN__) > > #define QSV_HAVE_AVBR QSV_VERSION_ATLEAST(1, 3) > > @@ -162,6 +163,7 @@ typedef struct QSVEncContext { > > int recovery_point_sei; > > > > int a53_cc; > > + int low_power; > > > > #if QSV_HAVE_MF > > int mfmode; > > diff --git a/libavcodec/qsvenc_h264.c b/libavcodec/qsvenc_h264.c index > > 07c9d64e6b..483faf832b 100644 > > --- a/libavcodec/qsvenc_h264.c > > +++ b/libavcodec/qsvenc_h264.c > > @@ -153,6 +153,9 @@ static const AVOption options[] = { > > { "off" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = > > MFX_MF_DISABLED }, INT_MIN, INT_MAX, VE, "mfmode" }, > > { "auto" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = > > MFX_MF_AUTO }, INT_MIN, INT_MAX, VE, "mfmode" }, > > #endif > > +#if QSV_HAVE_VDENC > > + { "low_power", "low power mode for encoder h264_qsv", > > Since it is a h264_qsv private option, it is no need to add the comment "for > encoder h264_qsv " > I prefer "enable low power mode (experimental, many limitations by mfx > version, HW platform, BRC modes, etc.)" > > > OFFSET(qsv.low_power), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, > > 1, VE }, > > Should be AV_OPT_TYPE_BOOL. > > > +#endif > > > > { NULL }, > > }; > > diff --git a/libavcodec/qsvenc_hevc.c b/libavcodec/qsvenc_hevc.c index > > 4339b316a3..cfe3674f0f 100644 > > --- a/libavcodec/qsvenc_hevc.c > > +++ b/libavcodec/qsvenc_hevc.c > > @@ -243,6 +243,9 @@ static const AVOption options[] = { > > { "main", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = > > MFX_PROFILE_HEVC_MAIN }, INT_MIN, INT_MAX, VE, "profile" }, > > { "main10", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = > > MFX_PROFILE_HEVC_MAIN10 }, INT_MIN, INT_MAX, VE, "profile" }, > > { "mainsp", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = > > MFX_PROFILE_HEVC_MAINSP }, INT_MIN, INT_MAX, VE, "profile" }, > > +#if QSV_HAVE_VDENC > > + { "low_power", "low power mode for encoder hevc_qsv", > > +OFFSET(qsv.low_power), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE }, > > +#endif > > Should be AV_OPT_TYPE_BOOL as above. > > > > > { NULL }, > > }; > > -- > > 2.17.1
Thanks for the comments, and I modified the patch as suggestions. Will send a [V2] patch. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel