[vlc-commits] hevc_nal: parse vui from sps

Francois Cartegnie git at videolan.org
Tue Dec 15 17:23:48 CET 2015


vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Tue Dec 15 16:40:16 2015 +0100| [4850b4c9b4639dafd75da2a04a07683f831b2bd8] | committer: Francois Cartegnie

hevc_nal: parse vui from sps

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=4850b4c9b4639dafd75da2a04a07683f831b2bd8
---

 modules/packetizer/hevc_nal.c |   96 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 96 insertions(+)

diff --git a/modules/packetizer/hevc_nal.c b/modules/packetizer/hevc_nal.c
index 84813b8..0d74381 100644
--- a/modules/packetizer/hevc_nal.c
+++ b/modules/packetizer/hevc_nal.c
@@ -213,6 +213,35 @@ struct hevc_sequence_parameter_set_t
     nal_ue_t log2_diff_max_min_luma_transform_block_size;
 
     /* incomplete */
+    nal_ue_t max_transform_hierarchy_depth_inter;
+    nal_ue_t max_transform_hierarchy_depth_intra;
+    nal_u1_t scaling_list_enabled;
+    nal_u1_t sps_scaling_list_data_present_flag;
+    // scaling_list_data; read but discarded
+
+    nal_u1_t amp_enabled_flag;
+    nal_u1_t sample_adaptive_offset_enabled_flag;
+
+    nal_u1_t pcm_enabled_flag;
+    nal_u4_t pcm_sample_bit_depth_luma_minus1;
+    nal_u4_t pcm_sample_bit_depth_chroma_minus1;
+    nal_ue_t log2_min_pcm_luma_coding_block_size_minus3;
+    nal_ue_t log2_diff_max_min_pcm_luma_coding_block_size;
+    nal_u1_t pcm_loop_filter_disabled_flag;
+
+    nal_ue_t num_short_term_ref_pic_sets;
+    // st_ref_pic_set
+
+    nal_u1_t long_term_ref_pics_present_flag;
+    nal_ue_t num_long_term_ref_pics_sps;
+    //
+
+    nal_u1_t sps_temporal_mvp_enabled_flag;
+    nal_u1_t strong_intra_smoothing_enabled_flag;
+
+    nal_u1_t vui_parameters_present_flag;
+    hevc_vui_parameters_t vui;
+    /* incomplete */
 };
 
 struct hevc_picture_parameter_set_t
@@ -758,6 +787,73 @@ static bool hevc_parse_sequence_parameter_set_rbsp( bs_t *p_bs,
     p_sps->log2_diff_max_min_luma_transform_block_size = bs_read_ue( p_bs );
 
     /* parsing incomplete */
+
+    p_sps->max_transform_hierarchy_depth_inter = bs_read_ue( p_bs );
+    p_sps->max_transform_hierarchy_depth_intra = bs_read_ue( p_bs );
+    p_sps->scaling_list_enabled = bs_read1( p_bs );
+    if( p_sps->scaling_list_enabled )
+    {
+        p_sps->sps_scaling_list_data_present_flag = bs_read1( p_bs );
+        if( p_sps->sps_scaling_list_data_present_flag &&
+            ! hevc_parse_scaling_list_rbsp( p_bs ) )
+        {
+            return false;
+        }
+    }
+
+    p_sps->amp_enabled_flag = bs_read1( p_bs );
+    p_sps->sample_adaptive_offset_enabled_flag = bs_read1( p_bs );
+
+    p_sps->pcm_enabled_flag = bs_read1( p_bs );
+    if( p_sps->pcm_enabled_flag )
+    {
+        p_sps->pcm_sample_bit_depth_luma_minus1 = bs_read( p_bs, 4 );
+        p_sps->pcm_sample_bit_depth_chroma_minus1 = bs_read( p_bs, 4 );
+        p_sps->log2_min_pcm_luma_coding_block_size_minus3 = bs_read_ue( p_bs );
+        p_sps->log2_diff_max_min_pcm_luma_coding_block_size = bs_read_ue( p_bs );
+        p_sps->pcm_loop_filter_disabled_flag = bs_read1( p_bs );
+    }
+
+    p_sps->num_short_term_ref_pic_sets = bs_read_ue( p_bs );
+    if( p_sps->num_short_term_ref_pic_sets > HEVC_MAX_SHORT_TERM_REF_PIC_SET )
+        return false;
+
+    hevc_short_term_ref_pic_set_t sets[HEVC_MAX_SHORT_TERM_REF_PIC_SET];
+    memset(&sets, 0, sizeof(hevc_short_term_ref_pic_set_t) * HEVC_MAX_SHORT_TERM_REF_PIC_SET);
+    for( unsigned int i=0; i<p_sps->num_short_term_ref_pic_sets; i++ )
+    {
+        if( !hevc_parse_st_ref_pic_set( p_bs, i, p_sps->num_short_term_ref_pic_sets, sets ) )
+            return false;
+    }
+
+    p_sps->long_term_ref_pics_present_flag = bs_read1( p_bs );
+    if( p_sps->long_term_ref_pics_present_flag )
+    {
+        p_sps->num_long_term_ref_pics_sps = bs_read_ue( p_bs );
+        if( p_sps->num_long_term_ref_pics_sps > HEVC_MAX_LONG_TERM_REF_PIC_SET )
+            return false;
+        for( unsigned int i=0; i< p_sps->num_long_term_ref_pics_sps; i++ )
+        {
+             /* lt_ref_pic_poc_lsb_sps */
+            bs_skip( p_bs, p_sps->log2_max_pic_order_cnt_lsb_minus4 + 4 );
+             /* used_by_curr_pic_lt_sps_flag */
+            bs_skip( p_bs, 1 );
+        }
+    }
+
+    p_sps->sps_temporal_mvp_enabled_flag = bs_read1( p_bs );
+    p_sps->strong_intra_smoothing_enabled_flag = bs_read1( p_bs );
+
+    if( bs_remain( p_bs ) < 1 ) /* late fail */
+        return false;
+
+    p_sps->vui_parameters_present_flag = bs_read1( p_bs );
+    if( p_sps->vui_parameters_present_flag &&
+        !hevc_parse_vui_parameters_rbsp( p_bs, &p_sps->vui ) )
+        return false;
+
+    /* incomplete */
+
     return true;
 }
 



More information about the vlc-commits mailing list