summaryrefslogtreecommitdiff
path: root/libavcodec/hevc_parser.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michael@niedermayer.cc>2017-02-14 16:33:53 +0100
committerMichael Niedermayer <michael@niedermayer.cc>2017-02-14 17:00:30 +0100
commitdb3507a670aec46fd5ed58c90d2927eb7f72d8ed (patch)
treee849779a30f6c68e15b2b9666115e29db4acb4be /libavcodec/hevc_parser.c
parent8c8e5d5286bf598a89ef9993a2cf6ea409d03a32 (diff)
avcodec/hevc_parser: export framerate, remove one dependency on the decoder
Fixes Ticket6090 Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavcodec/hevc_parser.c')
-rw-r--r--libavcodec/hevc_parser.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/libavcodec/hevc_parser.c b/libavcodec/hevc_parser.c
index 508f22f46d..3546048609 100644
--- a/libavcodec/hevc_parser.c
+++ b/libavcodec/hevc_parser.c
@@ -230,6 +230,7 @@ static inline int parse_nal_units(AVCodecParserContext *s, const uint8_t *buf,
for (;;) {
int src_length, consumed;
int ret;
+ int num = 0, den = 0;
buf = avpriv_find_start_code(buf, buf_end, &state);
if (--buf + 2 >= buf_end)
break;
@@ -320,6 +321,18 @@ static inline int parse_nal_units(AVCodecParserContext *s, const uint8_t *buf,
avctx->profile = ps->sps->ptl.general_ptl.profile_idc;
avctx->level = ps->sps->ptl.general_ptl.level_idc;
+ if (ps->vps->vps_timing_info_present_flag) {
+ num = ps->vps->vps_num_units_in_tick;
+ den = ps->vps->vps_time_scale;
+ } else if (ps->sps->vui.vui_timing_info_present_flag) {
+ num = ps->sps->vui.vui_num_units_in_tick;
+ den = ps->sps->vui.vui_time_scale;
+ }
+
+ if (num != 0 && den != 0)
+ av_reduce(&avctx->framerate.den, &avctx->framerate.num,
+ num, den, 1 << 30);
+
if (!sh->first_slice_in_pic_flag) {
int slice_address_length;