Message ID | 1595766367-8861-2-git-send-email-mypopydev@gmail.com |
---|---|
State | Accepted |
Headers | show |
Series | [FFmpeg-devel,1/5] lavc/libkvazaar: fix framerate setting | expand |
Context | Check | Description |
---|---|---|
andriy/default | pending | |
andriy/make | success | Make finished |
andriy/make_fate | success | Make fate finished |
On Sun, Jul 26, 2020 at 8:26 PM Jun Zhao <mypopydev@gmail.com> wrote: > > From: Jun Zhao <barryjzhao@tencent.com> > > Respecting the framerate in the libopenh264enc codec context. > > Both the libx264 and libx264 encoders already contain similar logic > to first check the framerate before falling back to the timebase. > > Signed-off-by: Jun Zhao <barryjzhao@tencent.com> > --- > libavcodec/libopenh264enc.c | 11 ++++++++++- > 1 file changed, 10 insertions(+), 1 deletion(-) > > diff --git a/libavcodec/libopenh264enc.c b/libavcodec/libopenh264enc.c > index f63aa52..cf48566 100644 > --- a/libavcodec/libopenh264enc.c > +++ b/libavcodec/libopenh264enc.c > @@ -156,7 +156,16 @@ static av_cold int svc_encode_init(AVCodecContext *avctx) > > (*s->encoder)->GetDefaultParams(s->encoder, ¶m); > > - param.fMaxFrameRate = 1/av_q2d(avctx->time_base); > + if (avctx->framerate.num > 0 && avctx->framerate.den > 0) { > + param.fMaxFrameRate = av_q2d(avctx->framerate); > + } else { > + if (avctx->ticks_per_frame > INT_MAX / avctx->time_base.num) { > + av_log(avctx, AV_LOG_ERROR, > + "Could not set framerate for libopenh264enc: integer overflow\n"); > + return AVERROR(EINVAL); > + } > + param.fMaxFrameRate = 1.0 / av_q2d(avctx->time_base) / FFMAX(avctx->ticks_per_frame, 1); > + } > param.iPicWidth = avctx->width; > param.iPicHeight = avctx->height; > param.iTargetBitrate = avctx->bit_rate > 0 ? avctx->bit_rate : TARGET_BITRATE_DEFAULT; > -- > 2.7.4 ping ?
On Wed, 5 Aug 2020, mypopy@gmail.com wrote: > On Sun, Jul 26, 2020 at 8:26 PM Jun Zhao <mypopydev@gmail.com> wrote: >> >> From: Jun Zhao <barryjzhao@tencent.com> >> >> Respecting the framerate in the libopenh264enc codec context. >> >> Both the libx264 and libx264 encoders already contain similar logic >> to first check the framerate before falling back to the timebase. >> >> Signed-off-by: Jun Zhao <barryjzhao@tencent.com> >> --- >> libavcodec/libopenh264enc.c | 11 ++++++++++- >> 1 file changed, 10 insertions(+), 1 deletion(-) >> >> diff --git a/libavcodec/libopenh264enc.c b/libavcodec/libopenh264enc.c >> index f63aa52..cf48566 100644 >> --- a/libavcodec/libopenh264enc.c >> +++ b/libavcodec/libopenh264enc.c >> @@ -156,7 +156,16 @@ static av_cold int svc_encode_init(AVCodecContext *avctx) >> >> (*s->encoder)->GetDefaultParams(s->encoder, ¶m); >> >> - param.fMaxFrameRate = 1/av_q2d(avctx->time_base); >> + if (avctx->framerate.num > 0 && avctx->framerate.den > 0) { >> + param.fMaxFrameRate = av_q2d(avctx->framerate); >> + } else { >> + if (avctx->ticks_per_frame > INT_MAX / avctx->time_base.num) { >> + av_log(avctx, AV_LOG_ERROR, >> + "Could not set framerate for libopenh264enc: integer overflow\n"); >> + return AVERROR(EINVAL); >> + } >> + param.fMaxFrameRate = 1.0 / av_q2d(avctx->time_base) / FFMAX(avctx->ticks_per_frame, 1); >> + } >> param.iPicWidth = avctx->width; >> param.iPicHeight = avctx->height; >> param.iTargetBitrate = avctx->bit_rate > 0 ? avctx->bit_rate : TARGET_BITRATE_DEFAULT; >> -- >> 2.7.4 > ping ? LGTM // Martin
On Wed, Aug 5, 2020 at 4:26 PM Martin Storsjö <martin@martin.st> wrote: > > On Wed, 5 Aug 2020, mypopy@gmail.com wrote: > > > On Sun, Jul 26, 2020 at 8:26 PM Jun Zhao <mypopydev@gmail.com> wrote: > >> > >> From: Jun Zhao <barryjzhao@tencent.com> > >> > >> Respecting the framerate in the libopenh264enc codec context. > >> > >> Both the libx264 and libx264 encoders already contain similar logic > >> to first check the framerate before falling back to the timebase. > >> > >> Signed-off-by: Jun Zhao <barryjzhao@tencent.com> > >> --- > >> libavcodec/libopenh264enc.c | 11 ++++++++++- > >> 1 file changed, 10 insertions(+), 1 deletion(-) > >> > >> diff --git a/libavcodec/libopenh264enc.c b/libavcodec/libopenh264enc.c > >> index f63aa52..cf48566 100644 > >> --- a/libavcodec/libopenh264enc.c > >> +++ b/libavcodec/libopenh264enc.c > >> @@ -156,7 +156,16 @@ static av_cold int svc_encode_init(AVCodecContext *avctx) > >> > >> (*s->encoder)->GetDefaultParams(s->encoder, ¶m); > >> > >> - param.fMaxFrameRate = 1/av_q2d(avctx->time_base); > >> + if (avctx->framerate.num > 0 && avctx->framerate.den > 0) { > >> + param.fMaxFrameRate = av_q2d(avctx->framerate); > >> + } else { > >> + if (avctx->ticks_per_frame > INT_MAX / avctx->time_base.num) { > >> + av_log(avctx, AV_LOG_ERROR, > >> + "Could not set framerate for libopenh264enc: integer overflow\n"); > >> + return AVERROR(EINVAL); > >> + } > >> + param.fMaxFrameRate = 1.0 / av_q2d(avctx->time_base) / FFMAX(avctx->ticks_per_frame, 1); > >> + } > >> param.iPicWidth = avctx->width; > >> param.iPicHeight = avctx->height; > >> param.iTargetBitrate = avctx->bit_rate > 0 ? avctx->bit_rate : TARGET_BITRATE_DEFAULT; > >> -- > >> 2.7.4 > > ping ? > > LGTM > > // Martin Applied and fixed typo in commit message (Both the libx264 and libx264 => Both the libx264 and libx265), thx
diff --git a/libavcodec/libopenh264enc.c b/libavcodec/libopenh264enc.c index f63aa52..cf48566 100644 --- a/libavcodec/libopenh264enc.c +++ b/libavcodec/libopenh264enc.c @@ -156,7 +156,16 @@ static av_cold int svc_encode_init(AVCodecContext *avctx) (*s->encoder)->GetDefaultParams(s->encoder, ¶m); - param.fMaxFrameRate = 1/av_q2d(avctx->time_base); + if (avctx->framerate.num > 0 && avctx->framerate.den > 0) { + param.fMaxFrameRate = av_q2d(avctx->framerate); + } else { + if (avctx->ticks_per_frame > INT_MAX / avctx->time_base.num) { + av_log(avctx, AV_LOG_ERROR, + "Could not set framerate for libopenh264enc: integer overflow\n"); + return AVERROR(EINVAL); + } + param.fMaxFrameRate = 1.0 / av_q2d(avctx->time_base) / FFMAX(avctx->ticks_per_frame, 1); + } param.iPicWidth = avctx->width; param.iPicHeight = avctx->height; param.iTargetBitrate = avctx->bit_rate > 0 ? avctx->bit_rate : TARGET_BITRATE_DEFAULT;