diff options
author | Guillaume Martres <smarter@ubuntu.com> | 2013-12-10 15:37:22 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-12-10 16:20:53 +0100 |
commit | f90281ca97d45a87e3671f5e6e64794f2632fef2 (patch) | |
tree | 4bb69719f69bc821eb387c299f50548c3cc4542c /libavcodec/hevc.c | |
parent | 679a6377e4948bce6e2cb28cf7ced4b1738e906e (diff) | |
download | ffmpeg-f90281ca97d45a87e3671f5e6e64794f2632fef2.tar.gz |
hevc: Correctly set time_base
- Try reading the time_base information from the VPS too, not just the VUI
- Only set time_base when an SPS is activated, not when it's decoded.
- Reduce the fraction before setting it.
- Don't set anything if the fraction is invalid (because the VUI is not
present or because the encoded value is invalid).
Conflicts:
libavcodec/hevc_ps.c
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/hevc.c')
-rw-r--r-- | libavcodec/hevc.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/libavcodec/hevc.c b/libavcodec/hevc.c index 553c60de22..2993bd4d8b 100644 --- a/libavcodec/hevc.c +++ b/libavcodec/hevc.c @@ -283,6 +283,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); @@ -327,6 +328,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: |