From d2eaa993c8f0e7e79eb72632d7675dd937af6a19 Mon Sep 17 00:00:00 2001 From: Francois Cartegnie Date: Tue, 3 Oct 2017 13:24:54 +0200 Subject: [PATCH] packetizer: hevc: extract sar --- modules/packetizer/hevc_nal.c | 44 +++++++++++++++++++++++++++++++++++++++++++ modules/packetizer/hevc_nal.h | 2 ++ 2 files changed, 46 insertions(+) diff --git a/modules/packetizer/hevc_nal.c b/modules/packetizer/hevc_nal.c index 90d8ce2102..6a098c388d 100644 --- a/modules/packetizer/hevc_nal.c +++ b/modules/packetizer/hevc_nal.c @@ -1099,6 +1099,50 @@ bool hevc_get_frame_rate( const hevc_sequence_parameter_set_t *p_sps, return false; } +bool hevc_get_aspect_ratio( const hevc_sequence_parameter_set_t *p_sps, + unsigned *num, unsigned *den ) +{ + if( p_sps->vui_parameters_present_flag ) + { + if( p_sps->vui.ar.aspect_ratio_idc != 255 ) + { + static const uint8_t ar_table[16][2] = + { + { 1, 1 }, + { 12, 11 }, + { 10, 11 }, + { 16, 11 }, + { 40, 33 }, + { 24, 11 }, + { 20, 11 }, + { 32, 11 }, + { 80, 33 }, + { 18, 11 }, + { 15, 11 }, + { 64, 33 }, + { 160, 99 }, + { 4, 3 }, + { 3, 2 }, + { 2, 1 }, + }; + if( p_sps->vui.ar.aspect_ratio_idc > 0 && + p_sps->vui.ar.aspect_ratio_idc < 17 ) + { + *num = ar_table[p_sps->vui.ar.aspect_ratio_idc - 1][0]; + *den = ar_table[p_sps->vui.ar.aspect_ratio_idc - 1][1]; + return true; + } + } + else + { + *num = p_sps->vui.ar.sar_width; + *den = p_sps->vui.ar.sar_height; + return true; + } + } + return false; +} + bool hevc_get_colorimetry( const hevc_sequence_parameter_set_t *p_sps, video_color_primaries_t *p_primaries, video_transfer_func_t *p_transfer, diff --git a/modules/packetizer/hevc_nal.h b/modules/packetizer/hevc_nal.h index 7f1d3f3183..9eff3e714e 100644 --- a/modules/packetizer/hevc_nal.h +++ b/modules/packetizer/hevc_nal.h @@ -187,6 +187,8 @@ bool hevc_get_picture_size( const hevc_sequence_parameter_set_t *, unsigned *p_w bool hevc_get_frame_rate( const hevc_sequence_parameter_set_t *, const hevc_video_parameter_set_t * /* can be NULL */, unsigned *pi_num, unsigned *pi_den ); +bool hevc_get_aspect_ratio( const hevc_sequence_parameter_set_t *, + unsigned *pi_num, unsigned *pi_den ); bool hevc_get_colorimetry( const hevc_sequence_parameter_set_t *p_sps, video_color_primaries_t *p_primaries, video_transfer_func_t *p_transfer, -- 2.11.4.GIT