diff mbox

[FFmpeg-devel,2/3] avcodec/av1_parser: export more timing information

Message ID 20191118144810.1287-2-jamrial@gmail.com
State New
Headers show

Commit Message

James Almer Nov. 18, 2019, 2:48 p.m. UTC
Should help remuxing certain Annex B AV1 samples without a decoder.

Signed-off-by: James Almer <jamrial@gmail.com>
---
 libavcodec/av1_parser.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)
diff mbox

Patch

diff --git a/libavcodec/av1_parser.c b/libavcodec/av1_parser.c
index 08721c356a..ff7fce4a07 100644
--- a/libavcodec/av1_parser.c
+++ b/libavcodec/av1_parser.c
@@ -53,6 +53,7 @@  static int av1_parser_parse(AVCodecParserContext *ctx,
     AV1ParseContext *s = ctx->priv_data;
     CodedBitstreamFragment *td = &s->temporal_unit;
     CodedBitstreamAV1Context *av1 = s->cbc->priv_data;
+    AV1RawSequenceHeader *seq;
     int ret;
 
     *out_data = data;
@@ -86,10 +87,11 @@  static int av1_parser_parse(AVCodecParserContext *ctx,
         goto end;
     }
 
+    seq = av1->sequence_header;
+
     for (int i = 0; i < td->nb_units; i++) {
         CodedBitstreamUnit *unit = &td->units[i];
         AV1RawOBU *obu = unit->content;
-        AV1RawSequenceHeader *seq = av1->sequence_header;
         AV1RawColorConfig *color = &seq->color_config;
         AV1RawFrameHeader *frame;
         int frame_type;
@@ -164,6 +166,12 @@  static int av1_parser_parse(AVCodecParserContext *ctx,
         }
     }
 
+    if (seq->timing_info.num_units_in_display_tick && seq->timing_info.time_scale &&
+        seq->timing_info.equal_picture_interval) {
+        av_reduce(&avctx->framerate.den, &avctx->framerate.num,
+                  seq->timing_info.num_units_in_display_tick, seq->timing_info.time_scale, INT_MAX);
+        avctx->ticks_per_frame = seq->timing_info.num_ticks_per_picture_minus_1 + 1;
+    }
     if (avctx->framerate.num)
         avctx->time_base = av_inv_q(av_mul_q(avctx->framerate, (AVRational){avctx->ticks_per_frame, 1}));