diff mbox series

[FFmpeg-devel,2/5] lavc/libopenh264enc: use framerate if available

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

Checks

Context Check Description
andriy/default pending
andriy/make success Make finished
andriy/make_fate success Make fate finished

Commit Message

Jun Zhao July 26, 2020, 12:26 p.m. UTC
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(-)

Comments

mypopy@gmail.com Aug. 5, 2020, 8:22 a.m. UTC | #1
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, &param);
>
> -    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 ?
Martin Storsjö Aug. 5, 2020, 8:26 a.m. UTC | #2
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, &param);
>>
>> -    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
mypopy@gmail.com Aug. 5, 2020, 9:35 a.m. UTC | #3
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, &param);
> >>
> >> -    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 mbox series

Patch

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, &param);
 
-    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;