/****************************************************************************** * * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ /** ******************************************************************************* * @file * isvcd_vui.c * * @brief * This file contains routines to parse VUI NAL's * * @author * Kishore * * @remarks * None * ******************************************************************************* */ #include "ih264_typedefs.h" #include "ih264_macros.h" #include "ih264_platform_macros.h" #include "ih264d_vui.h" #include "ih264d_bitstrm.h" #include "ih264d_parse_cavlc.h" #include "isvcd_structs.h" #include "ih264d_error_handler.h" /*****************************************************************************/ /* */ /* Function Name : isvcd_parse_vui_ext_parametres */ /* */ /* Description : This function parses VUI NALs. */ /* Inputs : ps_vu4 pointer to VUI params */ /* ps_bitstrm Bitstream */ /* Globals : None */ /* Processing : Parses VUI NAL's units and stores the info */ /* Outputs : None */ /* Returns : None */ /* */ /* Issues : None */ /* */ /* Revision History: */ /* */ /* DD MM YYYY Author(s) Changes (Describe the changes made) */ /* 06 05 2002 Kishore Draft */ /* */ /*****************************************************************************/ WORD32 isvcd_parse_vui_ext_parametres(svc_vui_ext_t *ps_svc_vui_ext, dec_bit_stream_t *ps_bitstrm) { UWORD32 *pu4_bitstrm_ofst = &ps_bitstrm->u4_ofst; UWORD32 *pu4_bitstrm_buf = ps_bitstrm->pu4_buffer; WORD32 ret; UWORD32 u4_i; ps_svc_vui_ext->u4_vui_ext_num_entries_minus1 = ih264d_uev(pu4_bitstrm_ofst, pu4_bitstrm_buf); if(ps_svc_vui_ext->u4_vui_ext_num_entries_minus1 > 1023) { return ERROR_INV_SPS_PPS_T; } for(u4_i = 0; u4_i <= ps_svc_vui_ext->u4_vui_ext_num_entries_minus1; u4_i++) { ps_svc_vui_ext->u1_vui_ext_dependency_id[u4_i] = ih264d_get_bits_h264(ps_bitstrm, 3); ps_svc_vui_ext->u1_vui_ext_quality_id[u4_i] = ih264d_get_bits_h264(ps_bitstrm, 4); ps_svc_vui_ext->u1_vui_ext_temporal_id[u4_i] = ih264d_get_bits_h264(ps_bitstrm, 3); ps_svc_vui_ext->u1_vui_ext_timing_info_present_flag[u4_i] = ih264d_get_bit_h264(ps_bitstrm); if(1 == ps_svc_vui_ext->u1_vui_ext_timing_info_present_flag[u4_i]) { ps_svc_vui_ext->u4_vui_ext_num_units_in_tick[u4_i] = ih264d_get_bits_h264(ps_bitstrm, 32); ps_svc_vui_ext->u4_vui_ext_time_scale[u4_i] = ih264d_get_bits_h264(ps_bitstrm, 32); ps_svc_vui_ext->u1_vui_ext_fixed_frame_rate_flag[u4_i] = ih264d_get_bit_h264(ps_bitstrm); } ps_svc_vui_ext->u1_vui_ext_nal_hrd_params_present_flag[u4_i] = ih264d_get_bit_h264(ps_bitstrm); if(ps_svc_vui_ext->u1_vui_ext_nal_hrd_params_present_flag[u4_i]) { ret = ih264d_parse_hrd_parametres(&ps_svc_vui_ext->s_nal_hrd[u4_i], ps_bitstrm); if(ret != OK) return ret; } ps_svc_vui_ext->u1_vui_ext_vcl_hrd_params_present_flag[u4_i] = ih264d_get_bit_h264(ps_bitstrm); if(ps_svc_vui_ext->u1_vui_ext_vcl_hrd_params_present_flag[u4_i]) { ret = ih264d_parse_hrd_parametres(&ps_svc_vui_ext->s_vcl_hrd[u4_i], ps_bitstrm); if(ret != OK) return ret; } if(ps_svc_vui_ext->u1_vui_ext_nal_hrd_params_present_flag[u4_i] || ps_svc_vui_ext->u1_vui_ext_vcl_hrd_params_present_flag[u4_i]) { ps_svc_vui_ext->u1_vui_ext_low_delay_hrd_flag[u4_i] = ih264d_get_bit_h264(ps_bitstrm); } ps_svc_vui_ext->u1_vui_ext_pic_struct_present_flag[u4_i] = ih264d_get_bit_h264(ps_bitstrm); } return OK; }