diff mbox series

[FFmpeg-devel] lavc/libdav1d: fix exporting framerate

Message ID 20230515082254.4461-1-anton@khirnov.net
State New
Headers show
Series [FFmpeg-devel] lavc/libdav1d: fix exporting framerate | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Anton Khirnov May 15, 2023, 8:22 a.m. UTC
Same issues as in the previous commit.
---
Updated for changes in previous patch.
---
 libavcodec/Makefile   |  2 +-
 libavcodec/libdav1d.c | 10 ++++------
 2 files changed, 5 insertions(+), 7 deletions(-)

Comments

James Almer May 15, 2023, 11:47 a.m. UTC | #1
On 5/15/2023 5:22 AM, Anton Khirnov wrote:
> Same issues as in the previous commit.
> ---
> Updated for changes in previous patch.
> ---
>   libavcodec/Makefile   |  2 +-
>   libavcodec/libdav1d.c | 10 ++++------
>   2 files changed, 5 insertions(+), 7 deletions(-)
> 
> diff --git a/libavcodec/Makefile b/libavcodec/Makefile
> index 9587e56493..4d59411662 100644
> --- a/libavcodec/Makefile
> +++ b/libavcodec/Makefile
> @@ -1086,7 +1086,7 @@ OBJS-$(CONFIG_LIBARIBCAPTION_DECODER)     += libaribcaption.o ass.o
>   OBJS-$(CONFIG_LIBCELT_DECODER)            += libcelt_dec.o
>   OBJS-$(CONFIG_LIBCODEC2_DECODER)          += libcodec2.o
>   OBJS-$(CONFIG_LIBCODEC2_ENCODER)          += libcodec2.o
> -OBJS-$(CONFIG_LIBDAV1D_DECODER)           += libdav1d.o
> +OBJS-$(CONFIG_LIBDAV1D_DECODER)           += libdav1d.o av1_parse.o
>   OBJS-$(CONFIG_LIBDAVS2_DECODER)           += libdavs2.o
>   OBJS-$(CONFIG_LIBFDK_AAC_DECODER)         += libfdk-aacdec.o
>   OBJS-$(CONFIG_LIBFDK_AAC_ENCODER)         += libfdk-aacenc.o
> diff --git a/libavcodec/libdav1d.c b/libavcodec/libdav1d.c
> index af072da681..0320ae7c6c 100644
> --- a/libavcodec/libdav1d.c
> +++ b/libavcodec/libdav1d.c
> @@ -30,6 +30,7 @@
>   #include "libavutil/opt.h"
>   
>   #include "atsc_a53.h"
> +#include "av1_parse.h"
>   #include "avcodec.h"
>   #include "bytestream.h"
>   #include "codec_internal.h"
> @@ -154,12 +155,9 @@ static void libdav1d_init_params(AVCodecContext *c, const Dav1dSequenceHeader *s
>       else
>           c->pix_fmt = pix_fmt[seq->layout][seq->hbd];
>   
> -    if (seq->num_units_in_tick && seq->time_scale) {
> -        av_reduce(&c->framerate.den, &c->framerate.num,
> -                  seq->num_units_in_tick, seq->time_scale, INT_MAX);
> -        if (seq->equal_picture_interval)
> -            c->ticks_per_frame = seq->num_ticks_per_picture;
> -    }
> +    c->framerate = ff_av1_framerate(seq->num_ticks_per_picture,
> +                                    seq->num_units_in_tick,
> +                                    seq->time_scale);

libdav1d unfortunately is currently exporting num_units_in_tick and 
time_scale as int, so in the (very unlikely but valid) case a value was 
 > INT_MAX in the bitstream, it will be stored in those as a negative value.
I suppose casting them to unsigned here should be enough.

>   
>      if (seq->film_grain_present)
>          c->properties |= FF_CODEC_PROPERTY_FILM_GRAIN;
diff mbox series

Patch

diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index 9587e56493..4d59411662 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -1086,7 +1086,7 @@  OBJS-$(CONFIG_LIBARIBCAPTION_DECODER)     += libaribcaption.o ass.o
 OBJS-$(CONFIG_LIBCELT_DECODER)            += libcelt_dec.o
 OBJS-$(CONFIG_LIBCODEC2_DECODER)          += libcodec2.o
 OBJS-$(CONFIG_LIBCODEC2_ENCODER)          += libcodec2.o
-OBJS-$(CONFIG_LIBDAV1D_DECODER)           += libdav1d.o
+OBJS-$(CONFIG_LIBDAV1D_DECODER)           += libdav1d.o av1_parse.o
 OBJS-$(CONFIG_LIBDAVS2_DECODER)           += libdavs2.o
 OBJS-$(CONFIG_LIBFDK_AAC_DECODER)         += libfdk-aacdec.o
 OBJS-$(CONFIG_LIBFDK_AAC_ENCODER)         += libfdk-aacenc.o
diff --git a/libavcodec/libdav1d.c b/libavcodec/libdav1d.c
index af072da681..0320ae7c6c 100644
--- a/libavcodec/libdav1d.c
+++ b/libavcodec/libdav1d.c
@@ -30,6 +30,7 @@ 
 #include "libavutil/opt.h"
 
 #include "atsc_a53.h"
+#include "av1_parse.h"
 #include "avcodec.h"
 #include "bytestream.h"
 #include "codec_internal.h"
@@ -154,12 +155,9 @@  static void libdav1d_init_params(AVCodecContext *c, const Dav1dSequenceHeader *s
     else
         c->pix_fmt = pix_fmt[seq->layout][seq->hbd];
 
-    if (seq->num_units_in_tick && seq->time_scale) {
-        av_reduce(&c->framerate.den, &c->framerate.num,
-                  seq->num_units_in_tick, seq->time_scale, INT_MAX);
-        if (seq->equal_picture_interval)
-            c->ticks_per_frame = seq->num_ticks_per_picture;
-    }
+    c->framerate = ff_av1_framerate(seq->num_ticks_per_picture,
+                                    seq->num_units_in_tick,
+                                    seq->time_scale);
 
    if (seq->film_grain_present)
        c->properties |= FF_CODEC_PROPERTY_FILM_GRAIN;