hevc: set time_base when possible
authorGuillaume Martres <smarter@ubuntu.com>
Tue, 10 Dec 2013 14:42:29 +0000 (15:42 +0100)
committerAnton Khirnov <anton@khirnov.net>
Wed, 11 Dec 2013 19:39:54 +0000 (20:39 +0100)
Signed-off-by: Anton Khirnov <anton@khirnov.net>
libavcodec/hevc.c

index d969f5eea73b08449da1932a79abe1638bb605eb..4af5aee155ffe85f3bd0f9227abe34bbf028b252 100644 (file)
@@ -388,6 +388,7 @@ static int decode_lt_rps(HEVCContext *s, LongTermRPS *rps, GetBitContext *gb)
 static int set_sps(HEVCContext *s, const HEVCSPS *sps)
 {
     int ret;
+    int num = 0, den = 0;
 
     pic_arrays_free(s);
     ret = pic_arrays_init(s, sps);
@@ -432,6 +433,19 @@ static int set_sps(HEVCContext *s, const HEVCSPS *sps)
 
     s->sps = sps;
     s->vps = (HEVCVPS*) s->vps_list[s->sps->vps_id]->data;
+
+    if (s->vps->vps_timing_info_present_flag) {
+        num = s->vps->vps_num_units_in_tick;
+        den = s->vps->vps_time_scale;
+    } else if (sps->vui.vui_timing_info_present_flag) {
+        num = sps->vui.vui_num_units_in_tick;
+        den = sps->vui.vui_time_scale;
+    }
+
+    if (num != 0 && den != 0)
+        av_reduce(&s->avctx->time_base.num, &s->avctx->time_base.den,
+                  num, den, 1 << 30);
+
     return 0;
 
 fail: