unplugged-system/external/libavc/decoder/svc/isvcd_vui.c

119 lines
5.3 KiB
C

/******************************************************************************
*
* 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;
}