Message ID | 1588065363-7104-1-git-send-email-linjie.fu@intel.com |
---|---|
Headers | show |
Series | enhancement for libopenh264 | expand |
On Tue, 28 Apr 2020, Linjie Fu wrote: > It would be 200kbps bitrate with gop size = 12 by default > which generated too many IDR frames in rather low bit rate. > The quality would be poor. > > Set these default values to -1 to check whether it's specified > by user explicitly. > > Use 2Mbps bitrate as nvenc sugguested, and leave gop size > untouched in libopenh264. > > Signed-off-by: Linjie Fu <linjie.fu@intel.com> > --- > libavcodec/libopenh264enc.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/libavcodec/libopenh264enc.c b/libavcodec/libopenh264enc.c > index 1b6b53a..0951412 100644 > --- a/libavcodec/libopenh264enc.c > +++ b/libavcodec/libopenh264enc.c > @@ -37,6 +37,8 @@ > #define SM_SIZELIMITED_SLICE SM_DYN_SLICE > #endif > > +#define TARGET_BITRATE_DEFAULT 2*1000*1000 > + > typedef struct SVCContext { > const AVClass *av_class; > ISVCEncoder *encoder; > @@ -132,7 +134,7 @@ FF_ENABLE_DEPRECATION_WARNINGS > param.fMaxFrameRate = 1/av_q2d(avctx->time_base); > param.iPicWidth = avctx->width; > param.iPicHeight = avctx->height; > - param.iTargetBitrate = avctx->bit_rate; > + param.iTargetBitrate = avctx->bit_rate > 0 ? avctx->bit_rate : TARGET_BITRATE_DEFAULT; > param.iMaxBitrate = FFMAX(avctx->rc_max_rate, avctx->bit_rate); > param.iRCMode = RC_QUALITY_MODE; > // QP = 0 is not well supported, so clip to (1, 51) > @@ -148,7 +150,8 @@ FF_ENABLE_DEPRECATION_WARNINGS > param.bEnableFrameSkip = s->skip_frames; > param.bEnableLongTermReference = 0; > param.iLtrMarkPeriod = 30; > - param.uiIntraPeriod = avctx->gop_size; > + if (avctx->gop_size) > + param.uiIntraPeriod = avctx->gop_size; This should be gop_size > 0, or maybe >= 0. Otherwise we'll end up setting the default -1. // Martin
> From: Martin Storsjö <martin@martin.st> > Sent: Tuesday, April 28, 2020 18:29 > To: FFmpeg development discussions and patches <ffmpeg- > devel@ffmpeg.org> > Cc: Fu, Linjie <linjie.fu@intel.com> > Subject: Re: [FFmpeg-devel] [PATCH v5 2/5] lavc/libopenh264enc: add > default gop size and bit rate > > On Tue, 28 Apr 2020, Linjie Fu wrote: > > > It would be 200kbps bitrate with gop size = 12 by default > > which generated too many IDR frames in rather low bit rate. > > The quality would be poor. > > > > Set these default values to -1 to check whether it's specified > > by user explicitly. > > > > Use 2Mbps bitrate as nvenc sugguested, and leave gop size > > untouched in libopenh264. > > > > Signed-off-by: Linjie Fu <linjie.fu@intel.com> > > --- > > libavcodec/libopenh264enc.c | 9 +++++++-- > > 1 file changed, 7 insertions(+), 2 deletions(-) > > > > diff --git a/libavcodec/libopenh264enc.c b/libavcodec/libopenh264enc.c > > index 1b6b53a..0951412 100644 > > --- a/libavcodec/libopenh264enc.c > > +++ b/libavcodec/libopenh264enc.c > > @@ -37,6 +37,8 @@ > > #define SM_SIZELIMITED_SLICE SM_DYN_SLICE > > #endif > > > > +#define TARGET_BITRATE_DEFAULT 2*1000*1000 > > + > > typedef struct SVCContext { > > const AVClass *av_class; > > ISVCEncoder *encoder; > > @@ -132,7 +134,7 @@ FF_ENABLE_DEPRECATION_WARNINGS > > param.fMaxFrameRate = 1/av_q2d(avctx->time_base); > > param.iPicWidth = avctx->width; > > param.iPicHeight = avctx->height; > > - param.iTargetBitrate = avctx->bit_rate; > > + param.iTargetBitrate = avctx->bit_rate > 0 ? avctx->bit_rate : > TARGET_BITRATE_DEFAULT; > > param.iMaxBitrate = FFMAX(avctx->rc_max_rate, avctx- > >bit_rate); > > param.iRCMode = RC_QUALITY_MODE; > > // QP = 0 is not well supported, so clip to (1, 51) > > @@ -148,7 +150,8 @@ FF_ENABLE_DEPRECATION_WARNINGS > > param.bEnableFrameSkip = s->skip_frames; > > param.bEnableLongTermReference = 0; > > param.iLtrMarkPeriod = 30; > > - param.uiIntraPeriod = avctx->gop_size; > > + if (avctx->gop_size) > > + param.uiIntraPeriod = avctx->gop_size; > > This should be gop_size > 0, or maybe >= 0. Otherwise we'll end up setting > the default -1. > Ops, fixed and thanks for pointing this out.