10d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/****************************************************************************** 20d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 30d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore 40d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 50d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Licensed under the Apache License, Version 2.0 (the "License"); 60d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* you may not use this file except in compliance with the License. 70d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* You may obtain a copy of the License at: 80d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 90d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* http://www.apache.org/licenses/LICENSE-2.0 100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Unless required by applicable law or agreed to in writing, software 120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* distributed under the License is distributed on an "AS IS" BASIS, 130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* See the License for the specific language governing permissions and 150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* limitations under the License. 160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************/ 180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @file 210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* ihevcd_parse_headers.c 220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Contains functions for parsing headers 250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @author 270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Harish 280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par List of Functions: 300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* None 330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/ 380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* File Includes */ 390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/ 400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <stdio.h> 410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <stddef.h> 420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <stdlib.h> 430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <string.h> 440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <assert.h> 450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_typedefs.h" 470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "iv.h" 480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ivd.h" 490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_cxa.h" 500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_defs.h" 520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_debug.h" 530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_defs.h" 540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_structs.h" 550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_buf_mgr.h" 560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_dpb_mgr.h" 570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_macros.h" 580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_platform_macros.h" 590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_cabac_tables.h" 600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_common_tables.h" 610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_quant_tables.h" 620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_trace.h" 640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_defs.h" 650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_function_selector.h" 660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_structs.h" 670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_error.h" 680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_debug.h" 690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_nal.h" 700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_bitstream.h" 710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_parse_headers.h" 720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_ref_list.h" 730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define COPY_DEFAULT_SCALING_LIST(pi2_scaling_mat) \ 750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ \ 760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 scaling_mat_offset[]={0, 16, 32, 48, 64, 80, 96, 160, 224, 288, 352, 416, 480, 736, 992, 1248, 1504, 1760, 2016, 3040}; \ 770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* scaling matrix for 4x4 */ \ 790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar memcpy(pi2_scaling_mat, gi2_flat_scale_mat_32x32, 6*16*sizeof(WORD16)); \ 800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* scaling matrix for 8x8 */ \ 810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar memcpy(pi2_scaling_mat + scaling_mat_offset[6], gi2_intra_default_scale_mat_8x8, 64*sizeof(WORD16)); \ 820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar memcpy(pi2_scaling_mat + scaling_mat_offset[7], gi2_intra_default_scale_mat_8x8, 64*sizeof(WORD16)); \ 830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar memcpy(pi2_scaling_mat + scaling_mat_offset[8], gi2_intra_default_scale_mat_8x8, 64*sizeof(WORD16)); \ 840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar memcpy(pi2_scaling_mat + scaling_mat_offset[9], gi2_inter_default_scale_mat_8x8, 64*sizeof(WORD16)); \ 850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar memcpy(pi2_scaling_mat + scaling_mat_offset[10], gi2_inter_default_scale_mat_8x8, 64*sizeof(WORD16)); \ 860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar memcpy(pi2_scaling_mat + scaling_mat_offset[11], gi2_inter_default_scale_mat_8x8, 64*sizeof(WORD16)); \ 870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* scaling matrix for 16x16 */ \ 880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar memcpy(pi2_scaling_mat + scaling_mat_offset[12], gi2_intra_default_scale_mat_16x16, 256*sizeof(WORD16)); \ 890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar memcpy(pi2_scaling_mat + scaling_mat_offset[13], gi2_intra_default_scale_mat_16x16, 256*sizeof(WORD16)); \ 900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar memcpy(pi2_scaling_mat + scaling_mat_offset[14], gi2_intra_default_scale_mat_16x16, 256*sizeof(WORD16)); \ 910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar memcpy(pi2_scaling_mat + scaling_mat_offset[15], gi2_inter_default_scale_mat_16x16, 256*sizeof(WORD16)); \ 920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar memcpy(pi2_scaling_mat + scaling_mat_offset[16], gi2_inter_default_scale_mat_16x16, 256*sizeof(WORD16)); \ 930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar memcpy(pi2_scaling_mat + scaling_mat_offset[17], gi2_inter_default_scale_mat_16x16, 256*sizeof(WORD16)); \ 940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* scaling matrix for 32x32 */ \ 950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar memcpy(pi2_scaling_mat + scaling_mat_offset[18], gi2_intra_default_scale_mat_32x32, 1024*sizeof(WORD16)); \ 960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar memcpy(pi2_scaling_mat + scaling_mat_offset[19], gi2_inter_default_scale_mat_32x32, 1024*sizeof(WORD16)); \ 970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define COPY_FLAT_SCALING_LIST(pi2_scaling_mat) \ 1000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ \ 1010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 scaling_mat_offset[]={0, 16, 32, 48, 64, 80, 96, 160, 224, 288, 352, 416, 480, 736, 992, 1248, 1504, 1760, 2016, 3040}; \ 1020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 1030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* scaling matrix for 4x4 */ \ 1040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar memcpy(pi2_scaling_mat, gi2_flat_scale_mat_32x32, 6*16*sizeof(WORD16)); \ 1050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* scaling matrix for 8x8 */ \ 1060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar memcpy(pi2_scaling_mat + scaling_mat_offset[6], gi2_flat_scale_mat_32x32, 6*64*sizeof(WORD16)); \ 1070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* scaling matrix for 16x16 */ \ 1080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar memcpy(pi2_scaling_mat + scaling_mat_offset[12], gi2_flat_scale_mat_32x32, 3*256*sizeof(WORD16)); \ 1090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar memcpy(pi2_scaling_mat + scaling_mat_offset[15], gi2_flat_scale_mat_32x32, 3*256*sizeof(WORD16)); \ 1100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* scaling matrix for 32x32 */ \ 1110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar memcpy(pi2_scaling_mat + scaling_mat_offset[18], gi2_flat_scale_mat_32x32, 1024*sizeof(WORD16)); \ 1120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar memcpy(pi2_scaling_mat + scaling_mat_offset[19], gi2_flat_scale_mat_32x32, 1024*sizeof(WORD16)); \ 1130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 1140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* Function declarations */ 1160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 1180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 1190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 1210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Parses Prediction weight table syntax 1220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description: 1240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Parse Prediction weight table syntax as per Section: 7.3.8.4 1250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_bitstrm 1270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Pointer to bitstream context 1280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_sps 1300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Current SPS 1310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_pps 1330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Current PPS 1340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_slice_hdr 1360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Current Slice header 1370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns Error code from IHEVCD_ERROR_T 1390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 1410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 1430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 1440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 1450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWORD32 ihevcd_parse_pred_wt_ofst(bitstrm_t *ps_bitstrm, 1470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sps_t *ps_sps, 1480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pps_t *ps_pps, 1490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar slice_header_t *ps_slice_hdr) 1500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 1510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS; 1520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 value; 1530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 i; 154707042fda96ebede81408b854385173483798bcdHarish Mahendrakar 1550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pred_wt_ofst_t *ps_wt_ofst = &ps_slice_hdr->s_wt_ofst; 156707042fda96ebede81408b854385173483798bcdHarish Mahendrakar UNUSED(ps_pps); 1570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("luma_log2_weight_denom", value, ps_bitstrm); 1590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_wt_ofst->i1_luma_log2_weight_denom = value; 1600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sps->i1_chroma_format_idc != 0) 1620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar SEV_PARSE("delta_chroma_log2_weight_denom", value, ps_bitstrm); 1640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_wt_ofst->i1_chroma_log2_weight_denom = ps_wt_ofst->i1_luma_log2_weight_denom + value; 1650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 1660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < ps_slice_hdr->i1_num_ref_idx_l0_active; i++) 1680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("luma_weight_l0_flag[ i ]", value, ps_bitstrm, 1); 1700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_wt_ofst->i1_luma_weight_l0_flag[i] = value; 1710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 1720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sps->i1_chroma_format_idc != 0) 1760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < ps_slice_hdr->i1_num_ref_idx_l0_active; i++) 1780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("chroma_weight_l0_flag[ i ]", value, ps_bitstrm, 1); 1800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_wt_ofst->i1_chroma_weight_l0_flag[i] = value; 1810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 1820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 1830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 1840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < ps_slice_hdr->i1_num_ref_idx_l0_active; i++) 1860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_wt_ofst->i1_chroma_weight_l0_flag[i] = 0; 1880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 1890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 1900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < ps_slice_hdr->i1_num_ref_idx_l0_active; i++) 1930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_wt_ofst->i1_luma_weight_l0_flag[i]) 1950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar SEV_PARSE("delta_luma_weight_l0[ i ]", value, ps_bitstrm); 1970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_wt_ofst->i2_luma_weight_l0[i] = (1 << ps_wt_ofst->i1_luma_log2_weight_denom) + value; 2000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar SEV_PARSE("luma_offset_l0[ i ]", value, ps_bitstrm); 2020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_wt_ofst->i2_luma_offset_l0[i] = value; 2030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 2060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_wt_ofst->i2_luma_weight_l0[i] = (1 << ps_wt_ofst->i1_luma_log2_weight_denom); 2080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_wt_ofst->i2_luma_offset_l0[i] = 0; 2090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_wt_ofst->i1_chroma_weight_l0_flag[i]) 2110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ofst; 2130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 shift = (1 << (BIT_DEPTH_CHROMA - 1)); 2140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar SEV_PARSE("delta_chroma_weight_l0[ i ][ j ]", value, ps_bitstrm); 2150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_wt_ofst->i2_chroma_weight_l0_cb[i] = (1 << ps_wt_ofst->i1_chroma_log2_weight_denom) + value; 2160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar SEV_PARSE("delta_chroma_offset_l0[ i ][ j ]", value, ps_bitstrm); 2190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ofst = ((shift * ps_wt_ofst->i2_chroma_weight_l0_cb[i]) >> ps_wt_ofst->i1_chroma_log2_weight_denom); 2200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ofst = value - ofst + shift; 2210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_wt_ofst->i2_chroma_offset_l0_cb[i] = CLIP_S8(ofst); 2230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar SEV_PARSE("delta_chroma_weight_l0[ i ][ j ]", value, ps_bitstrm); 2250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_wt_ofst->i2_chroma_weight_l0_cr[i] = (1 << ps_wt_ofst->i1_chroma_log2_weight_denom) + value; 2260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar SEV_PARSE("delta_chroma_offset_l0[ i ][ j ]", value, ps_bitstrm); 2290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ofst = ((shift * ps_wt_ofst->i2_chroma_weight_l0_cr[i]) >> ps_wt_ofst->i1_chroma_log2_weight_denom); 2300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ofst = value - ofst + shift; 2310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_wt_ofst->i2_chroma_offset_l0_cr[i] = CLIP_S8(ofst); 2330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 2360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_wt_ofst->i2_chroma_weight_l0_cb[i] = (1 << ps_wt_ofst->i1_chroma_log2_weight_denom); 2380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_wt_ofst->i2_chroma_weight_l0_cr[i] = (1 << ps_wt_ofst->i1_chroma_log2_weight_denom); 2390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_wt_ofst->i2_chroma_offset_l0_cb[i] = 0; 2410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_wt_ofst->i2_chroma_offset_l0_cr[i] = 0; 2420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(BSLICE == ps_slice_hdr->i1_slice_type) 2450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < ps_slice_hdr->i1_num_ref_idx_l1_active; i++) 2470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("luma_weight_l1_flag[ i ]", value, ps_bitstrm, 1); 2490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_wt_ofst->i1_luma_weight_l1_flag[i] = value; 2500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sps->i1_chroma_format_idc != 0) 2530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < ps_slice_hdr->i1_num_ref_idx_l1_active; i++) 2550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("chroma_weight_l1_flag[ i ]", value, ps_bitstrm, 1); 2570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_wt_ofst->i1_chroma_weight_l1_flag[i] = value; 2580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 2610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < ps_slice_hdr->i1_num_ref_idx_l1_active; i++) 2630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_wt_ofst->i1_chroma_weight_l1_flag[i] = 0; 2650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < ps_slice_hdr->i1_num_ref_idx_l1_active; i++) 2690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_wt_ofst->i1_luma_weight_l1_flag[i]) 2710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar SEV_PARSE("delta_luma_weight_l1[ i ]", value, ps_bitstrm); 2730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_wt_ofst->i2_luma_weight_l1[i] = (1 << ps_wt_ofst->i1_luma_log2_weight_denom) + value; 2760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar SEV_PARSE("luma_offset_l1[ i ]", value, ps_bitstrm); 2780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_wt_ofst->i2_luma_offset_l1[i] = value; 2790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 2820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_wt_ofst->i2_luma_weight_l1[i] = (1 << ps_wt_ofst->i1_luma_log2_weight_denom); 2840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_wt_ofst->i2_luma_offset_l1[i] = 0; 2850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_wt_ofst->i1_chroma_weight_l1_flag[i]) 2880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ofst; 2900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 shift = (1 << (BIT_DEPTH_CHROMA - 1)); 2910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar SEV_PARSE("delta_chroma_weight_l1[ i ][ j ]", value, ps_bitstrm); 2920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_wt_ofst->i2_chroma_weight_l1_cb[i] = (1 << ps_wt_ofst->i1_chroma_log2_weight_denom) + value;; 2930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar SEV_PARSE("delta_chroma_offset_l1[ i ][ j ]", value, ps_bitstrm); 2960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ofst = ((shift * ps_wt_ofst->i2_chroma_weight_l1_cb[i]) >> ps_wt_ofst->i1_chroma_log2_weight_denom); 2970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ofst = value - ofst + shift; 2980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_wt_ofst->i2_chroma_offset_l1_cb[i] = CLIP_S8(ofst);; 3000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar SEV_PARSE("delta_chroma_weight_l1[ i ][ j ]", value, ps_bitstrm); 3020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_wt_ofst->i2_chroma_weight_l1_cr[i] = (1 << ps_wt_ofst->i1_chroma_log2_weight_denom) + value; 3030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar SEV_PARSE("delta_chroma_offset_l1[ i ][ j ]", value, ps_bitstrm); 3060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ofst = ((shift * ps_wt_ofst->i2_chroma_weight_l1_cr[i]) >> ps_wt_ofst->i1_chroma_log2_weight_denom); 3070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ofst = value - ofst + shift; 3080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_wt_ofst->i2_chroma_offset_l1_cr[i] = CLIP_S8(ofst);; 3100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 3130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_wt_ofst->i2_chroma_weight_l1_cb[i] = (1 << ps_wt_ofst->i1_chroma_log2_weight_denom); 3150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_wt_ofst->i2_chroma_weight_l1_cr[i] = (1 << ps_wt_ofst->i1_chroma_log2_weight_denom); 3160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_wt_ofst->i2_chroma_offset_l1_cb[i] = 0; 3180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_wt_ofst->i2_chroma_offset_l1_cr[i] = 0; 3190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return ret; 3240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 3250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 3270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 3280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 3290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 3300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Parses short term reference picture set 3310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 3320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description 3330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Parses short term reference picture set as per section 7.3.8.2. 3340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Can be called by either SPS or Slice header parsing modules. 3350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 3360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_bitstrm 3370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Pointer to bitstream structure 3380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 3390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] ps_stref_picset_base 3400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Pointer to first short term ref pic set structure 3410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 3420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] num_short_term_ref_pic_sets 3430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Number of short term reference pic sets 3440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 3450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] idx 3460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Current short term ref pic set id 3470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 3480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns Error code from IHEVCD_ERROR_T 3490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 3500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 3510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 3520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 3530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 3540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarIHEVCD_ERROR_T ihevcd_short_term_ref_pic_set(bitstrm_t *ps_bitstrm, 3550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar stref_picset_t *ps_stref_picset_base, 3560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 num_short_term_ref_pic_sets, 3570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 idx, 3580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar stref_picset_t *ps_stref_picset) 3590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 3600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS; 3610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 value; 3620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar stref_picset_t *ps_stref_picset_ref; 3630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 delta_idx, delta_rps; 3640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 r_idx; 3650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 i; 3660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 j, k, temp; 3670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(idx > 0) 3680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("inter_ref_pic_set_prediction_flag", value, ps_bitstrm, 1); 3700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_stref_picset->i1_inter_ref_pic_set_prediction_flag = value; 3710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 3730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_stref_picset->i1_inter_ref_pic_set_prediction_flag = 0; 3740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_stref_picset->i1_inter_ref_pic_set_prediction_flag) 3760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 delta_rps_sign; 3780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 abs_delta_rps; 3790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 num_neg_pics = 0; 3800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 num_pos_pics = 0; 3810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 num_pics = 0; 3820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(idx == num_short_term_ref_pic_sets) 3840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("delta_idx_minus1", value, ps_bitstrm); 3860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar delta_idx = value + 1; 3870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 3890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar delta_idx = 1; 3910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar r_idx = idx - delta_idx; 3930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar r_idx = CLIP3(r_idx, 0, idx - 1); 3940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_stref_picset_ref = ps_stref_picset_base + r_idx; 3960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("delta_rps_sign", value, ps_bitstrm, 1); 3980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar delta_rps_sign = value; 3990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("abs_delta_rps_minus1", value, ps_bitstrm); 4010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar abs_delta_rps = value + 1; 4020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar delta_rps = (1 - 2 * delta_rps_sign) * (abs_delta_rps); 4040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i <= ps_stref_picset_ref->i1_num_delta_pocs; i++) 4080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ref_idc; 4100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*****************************************************************/ 4120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* ref_idc is parsed as below */ 4130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* bits "1" ref_idc 1 */ 4140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* bits "01" ref_idc 2 */ 4150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* bits "00" ref_idc 0 */ 4160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*****************************************************************/ 4170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("used_by_curr_pic_flag", value, ps_bitstrm, 1); 4180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_idc = value; 4190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_stref_picset->ai1_used[num_pics] = value; 4200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* If ref_idc is zero check for next bit */ 4210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ref_idc) 4220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("use_delta_flag", value, ps_bitstrm, 1); 4240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_idc = value << 1; 4250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((ref_idc == 1) || (ref_idc == 2)) 4270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 delta_poc; 4290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar delta_poc = delta_rps; 4300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar delta_poc += 4310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ((i < ps_stref_picset_ref->i1_num_delta_pocs) ? 4320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_stref_picset_ref->ai2_delta_poc[i] : 4330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 0); 4340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_stref_picset->ai2_delta_poc[num_pics] = delta_poc; 4360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(delta_poc < 0) 4380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar num_neg_pics++; 4400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 4420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar num_pos_pics++; 4440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar num_pics++; 4460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_stref_picset->ai1_ref_idc[i] = ref_idc; 4480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar num_neg_pics = CLIP3(num_neg_pics, 0, MAX_DPB_SIZE - 1); 4510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar num_pos_pics = CLIP3(num_pos_pics, 0, (MAX_DPB_SIZE - 1 - num_neg_pics)); 4520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar num_pics = num_neg_pics + num_pos_pics; 4530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_stref_picset->i1_num_ref_idc = 4550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_stref_picset_ref->i1_num_delta_pocs + 1; 4560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_stref_picset->i1_num_delta_pocs = num_pics; 4570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_stref_picset->i1_num_pos_pics = num_pos_pics; 4580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_stref_picset->i1_num_neg_pics = num_neg_pics; 4590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(j = 1; j < num_pics; j++) 4620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 delta_poc = ps_stref_picset->ai2_delta_poc[j]; 4640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD8 i1_used = ps_stref_picset->ai1_used[j]; 4650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(k = j - 1; k >= 0; k--) 4660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar temp = ps_stref_picset->ai2_delta_poc[k]; 4680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(delta_poc < temp) 4690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_stref_picset->ai2_delta_poc[k + 1] = temp; 4710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_stref_picset->ai1_used[k + 1] = ps_stref_picset->ai1_used[k]; 4720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_stref_picset->ai2_delta_poc[k] = delta_poc; 4730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_stref_picset->ai1_used[k] = i1_used; 4740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar // flip the negative values to largest first 4780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(j = 0, k = num_neg_pics - 1; j < num_neg_pics >> 1; j++, k--) 4790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 delta_poc = ps_stref_picset->ai2_delta_poc[j]; 4810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD8 i1_used = ps_stref_picset->ai1_used[j]; 4820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_stref_picset->ai2_delta_poc[j] = ps_stref_picset->ai2_delta_poc[k]; 4830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_stref_picset->ai1_used[j] = ps_stref_picset->ai1_used[k]; 4840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_stref_picset->ai2_delta_poc[k] = delta_poc; 4850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_stref_picset->ai1_used[k] = i1_used; 4860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 4900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 prev_poc = 0; 4920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 poc; 4930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("num_negative_pics", value, ps_bitstrm); 4950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_stref_picset->i1_num_neg_pics = value; 4960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_stref_picset->i1_num_neg_pics = CLIP3(ps_stref_picset->i1_num_neg_pics, 4970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 0, 4980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar MAX_DPB_SIZE - 1); 4990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("num_positive_pics", value, ps_bitstrm); 5010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_stref_picset->i1_num_pos_pics = value; 5020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_stref_picset->i1_num_pos_pics = CLIP3(ps_stref_picset->i1_num_pos_pics, 5030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 0, 5040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (MAX_DPB_SIZE - 1 - ps_stref_picset->i1_num_neg_pics)); 5050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_stref_picset->i1_num_delta_pocs = 5070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_stref_picset->i1_num_neg_pics + 5080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_stref_picset->i1_num_pos_pics; 5090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < ps_stref_picset->i1_num_neg_pics; i++) 5120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("delta_poc_s0_minus1", value, ps_bitstrm); 5140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar poc = prev_poc - (value + 1); 5150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar prev_poc = poc; 5160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_stref_picset->ai2_delta_poc[i] = poc; 5170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("used_by_curr_pic_s0_flag", value, ps_bitstrm, 1); 5190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_stref_picset->ai1_used[i] = value; 5200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar prev_poc = 0; 5230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = ps_stref_picset->i1_num_neg_pics; 5240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar i < ps_stref_picset->i1_num_delta_pocs; 5250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar i++) 5260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("delta_poc_s1_minus1", value, ps_bitstrm); 5280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar poc = prev_poc + (value + 1); 5290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar prev_poc = poc; 5300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_stref_picset->ai2_delta_poc[i] = poc; 5310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("used_by_curr_pic_s1_flag", value, ps_bitstrm, 1); 5330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_stref_picset->ai1_used[i] = value; 5340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return ret; 5400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 5410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarstatic WORD32 ihevcd_parse_sub_layer_hrd_parameters(bitstrm_t *ps_bitstrm, 5440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sub_lyr_hrd_params_t *ps_sub_layer_hrd_params, 5450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 cpb_cnt, 5460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sub_pic_cpb_params_present_flag) 5470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 5480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS; 5490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 i; 5500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i <= cpb_cnt; i++) 5520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("bit_rate_value_minus1[ i ]", ps_sub_layer_hrd_params->au4_bit_rate_value_minus1[i], ps_bitstrm); 5540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("cpb_size_value_minus1[ i ]", ps_sub_layer_hrd_params->au4_cpb_size_value_minus1[i], ps_bitstrm); 5550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(sub_pic_cpb_params_present_flag) 5570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("cpb_size_du_value_minus1[ i ]", ps_sub_layer_hrd_params->au4_cpb_size_du_value_minus1[i], ps_bitstrm); 5590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("bit_rate_du_value_minus1[ i ]", ps_sub_layer_hrd_params->au4_bit_rate_du_value_minus1[i], ps_bitstrm); 5600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("cbr_flag[ i ]", ps_sub_layer_hrd_params->au1_cbr_flag[i], ps_bitstrm, 1); 5620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return ret; 5650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 5660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarstatic WORD32 ihevcd_parse_hrd_parameters(bitstrm_t *ps_bitstrm, 5690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar hrd_params_t *ps_hrd, 5700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 common_info_present_flag, 5710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 max_num_sub_layers_minus1) 5720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 5730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS; 5740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 i; 5750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_hrd->u1_nal_hrd_parameters_present_flag = 0; 5770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_hrd->u1_vcl_hrd_parameters_present_flag = 0; 5780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_hrd->u1_sub_pic_cpb_params_present_flag = 0; 5800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_hrd->u1_tick_divisor_minus2 = 0; 5820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_hrd->u1_du_cpb_removal_delay_increment_length_minus1 = 0; 5830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_hrd->u1_sub_pic_cpb_params_in_pic_timing_sei_flag = 0; 5840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_hrd->u1_dpb_output_delay_du_length_minus1 = 0; 5850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_hrd->u4_bit_rate_scale = 0; 5870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_hrd->u4_cpb_size_scale = 0; 5880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_hrd->u4_cpb_size_du_scale = 0; 5890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_hrd->u1_initial_cpb_removal_delay_length_minus1 = 23; 5910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_hrd->u1_au_cpb_removal_delay_length_minus1 = 23; 5920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_hrd->u1_dpb_output_delay_length_minus1 = 23; 5930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(common_info_present_flag) 5950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("nal_hrd_parameters_present_flag", ps_hrd->u1_nal_hrd_parameters_present_flag, ps_bitstrm, 1); 5970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("vcl_hrd_parameters_present_flag", ps_hrd->u1_vcl_hrd_parameters_present_flag, ps_bitstrm, 1); 5980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_hrd->u1_nal_hrd_parameters_present_flag || ps_hrd->u1_vcl_hrd_parameters_present_flag) 6000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("sub_pic_cpb_params_present_flag", ps_hrd->u1_sub_pic_cpb_params_present_flag, ps_bitstrm, 1); 6020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_hrd->u1_sub_pic_cpb_params_present_flag) 6030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("tick_divisor_minus2", ps_hrd->u1_tick_divisor_minus2, ps_bitstrm, 8); 6050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("du_cpb_removal_delay_increment_length_minus1", ps_hrd->u1_du_cpb_removal_delay_increment_length_minus1, ps_bitstrm, 5); 6060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("sub_pic_cpb_params_in_pic_timing_sei_flag", ps_hrd->u1_sub_pic_cpb_params_in_pic_timing_sei_flag, ps_bitstrm, 1); 6070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("dpb_output_delay_du_length_minus1", ps_hrd->u1_dpb_output_delay_du_length_minus1, ps_bitstrm, 5); 6080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("bit_rate_scale", ps_hrd->u4_bit_rate_scale, ps_bitstrm, 4); 6110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("cpb_size_scale", ps_hrd->u4_cpb_size_scale, ps_bitstrm, 4); 6120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_hrd->u1_sub_pic_cpb_params_present_flag) 6130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("cpb_size_du_scale", ps_hrd->u4_cpb_size_du_scale, ps_bitstrm, 4); 6140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("initial_cpb_removal_delay_length_minus1", ps_hrd->u1_initial_cpb_removal_delay_length_minus1, ps_bitstrm, 5); 6160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("au_cpb_removal_delay_length_minus1", ps_hrd->u1_au_cpb_removal_delay_length_minus1, ps_bitstrm, 5); 6170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("dpb_output_delay_length_minus1", ps_hrd->u1_dpb_output_delay_length_minus1, ps_bitstrm, 5); 6180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i <= max_num_sub_layers_minus1; i++) 6230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("fixed_pic_rate_general_flag[ i ]", ps_hrd->au1_fixed_pic_rate_general_flag[i], ps_bitstrm, 1); 6250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_hrd->au1_fixed_pic_rate_within_cvs_flag[i] = 1; 6270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_hrd->au1_elemental_duration_in_tc_minus1[i] = 0; 6280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_hrd->au1_low_delay_hrd_flag[i] = 0; 6290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_hrd->au1_cpb_cnt_minus1[i] = 0; 6300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!ps_hrd->au1_fixed_pic_rate_general_flag[i]) 6320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("fixed_pic_rate_within_cvs_flag[ i ]", ps_hrd->au1_fixed_pic_rate_within_cvs_flag[i], ps_bitstrm, 1); 6330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_hrd->au1_fixed_pic_rate_within_cvs_flag[i]) 6350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("elemental_duration_in_tc_minus1[ i ]", ps_hrd->au1_elemental_duration_in_tc_minus1[i], ps_bitstrm); 6370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 6390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("low_delay_hrd_flag[ i ]", ps_hrd->au1_low_delay_hrd_flag[i], ps_bitstrm, 1); 6410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!ps_hrd->au1_low_delay_hrd_flag[i]) 6440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("cpb_cnt_minus1[ i ]", ps_hrd->au1_cpb_cnt_minus1[i], ps_bitstrm); 6450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6463e194e0edde1d9ceb71d18f6f0e0bf156a76a650Naveen Kumar P if(ps_hrd->au1_cpb_cnt_minus1[i] >= (MAX_CPB_CNT - 1)) 6473e194e0edde1d9ceb71d18f6f0e0bf156a76a650Naveen Kumar P return IHEVCD_INVALID_PARAMETER; 6483e194e0edde1d9ceb71d18f6f0e0bf156a76a650Naveen Kumar P 6490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_hrd->u1_nal_hrd_parameters_present_flag) 6500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevcd_parse_sub_layer_hrd_parameters(ps_bitstrm, 6510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar &ps_hrd->as_sub_layer_hrd_params[i], 6520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_hrd->au1_cpb_cnt_minus1[i], 6530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_hrd->u1_sub_pic_cpb_params_present_flag); 6540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_hrd->u1_vcl_hrd_parameters_present_flag) 6560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevcd_parse_sub_layer_hrd_parameters(ps_bitstrm, 6570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar &ps_hrd->as_sub_layer_hrd_params[i], 6580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_hrd->au1_cpb_cnt_minus1[i], 6590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_hrd->u1_sub_pic_cpb_params_present_flag); 6600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return ret; 6630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 6640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarstatic WORD32 ihevcd_parse_vui_parameters(bitstrm_t *ps_bitstrm, 6670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar vui_t *ps_vui, 6680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sps_max_sub_layers_minus1) 6690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 6700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS; 671613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar UWORD16 u2_sar_width = 0; 672613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar UWORD16 u2_sar_height = 0; 6730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("aspect_ratio_info_present_flag", ps_vui->u1_aspect_ratio_info_present_flag, ps_bitstrm, 1); 6750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_vui->u1_aspect_ratio_idc = SAR_UNUSED; 677613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_width = 0; 678613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_height = 0; 6790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_vui->u1_aspect_ratio_info_present_flag) 6800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("aspect_ratio_idc", ps_vui->u1_aspect_ratio_idc, ps_bitstrm, 8); 682613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar switch(ps_vui->u1_aspect_ratio_idc) 6830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 684613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar case SAR_1_1: 685613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_width = 1; 686613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_height = 1; 687613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar break; 688613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar case SAR_12_11: 689613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_width = 12; 690613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_height = 11; 691613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar break; 692613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar case SAR_10_11: 693613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_width = 10; 694613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_height = 11; 695613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar break; 696613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar case SAR_16_11: 697613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_width = 16; 698613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_height = 11; 699613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar break; 700613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar case SAR_40_33: 701613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_width = 40; 702613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_height = 33; 703613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar break; 704613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar case SAR_24_11: 705613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_width = 24; 706613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_height = 11; 707613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar break; 708613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar case SAR_20_11: 709613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_width = 20; 710613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_height = 11; 711613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar break; 712613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar case SAR_32_11: 713613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_width = 32; 714613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_height = 11; 715613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar break; 716613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar case SAR_80_33: 717613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_width = 80; 718613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_height = 33; 719613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar break; 720613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar case SAR_18_11: 721613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_width = 18; 722613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_height = 11; 723613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar break; 724613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar case SAR_15_11: 725613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_width = 15; 726613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_height = 11; 727613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar break; 728613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar case SAR_64_33: 729613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_width = 64; 730613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_height = 33; 731613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar break; 732613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar case SAR_160_99: 733613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_width = 160; 734613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_height = 99; 735613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar break; 736613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar case SAR_4_3: 737613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_width = 4; 738613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_height = 3; 739613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar break; 740613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar case SAR_3_2: 741613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_width = 3; 742613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_height = 2; 743613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar break; 744613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar case SAR_2_1: 745613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_width = 2; 746613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_height = 1; 747613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar break; 748613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar case EXTENDED_SAR: 749613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("sar_width", u2_sar_width, ps_bitstrm, 16); 750613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("sar_height", u2_sar_height, ps_bitstrm, 16); 751613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar break; 752613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar default: 753613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_width = 0; 754613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u2_sar_height = 0; 755613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar break; 7560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 7570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 7580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 759613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_vui->u2_sar_width = u2_sar_width; 760613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_vui->u2_sar_height = u2_sar_height; 761613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 7620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("overscan_info_present_flag", ps_vui->u1_overscan_info_present_flag, ps_bitstrm, 1); 7630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_vui->u1_overscan_appropriate_flag = 0; 7640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_vui->u1_overscan_info_present_flag) 7650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("overscan_appropriate_flag", ps_vui->u1_overscan_appropriate_flag, ps_bitstrm, 1); 7660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("video_signal_type_present_flag", ps_vui->u1_video_signal_type_present_flag, ps_bitstrm, 1); 7680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_vui->u1_video_format = VID_FMT_UNSPECIFIED; 7690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_vui->u1_video_full_range_flag = 0; 7700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_vui->u1_colour_description_present_flag = 0; 7713a405b4cc3a0c23eb70253b174a1aadb0a167ac4Harish Mahendrakar ps_vui->u1_colour_primaries = 2; 7723a405b4cc3a0c23eb70253b174a1aadb0a167ac4Harish Mahendrakar ps_vui->u1_transfer_characteristics = 2; 7733a405b4cc3a0c23eb70253b174a1aadb0a167ac4Harish Mahendrakar ps_vui->u1_matrix_coefficients = 2; 7743a405b4cc3a0c23eb70253b174a1aadb0a167ac4Harish Mahendrakar 7750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_vui->u1_video_signal_type_present_flag) 7760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 7770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("video_format", ps_vui->u1_video_format, ps_bitstrm, 3); 7780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("video_full_range_flag", ps_vui->u1_video_full_range_flag, ps_bitstrm, 1); 7790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("colour_description_present_flag", ps_vui->u1_colour_description_present_flag, ps_bitstrm, 1); 7800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_vui->u1_colour_description_present_flag) 7810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 7820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("colour_primaries", ps_vui->u1_colour_primaries, ps_bitstrm, 8); 7830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("transfer_characteristics", ps_vui->u1_transfer_characteristics, ps_bitstrm, 8); 7840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("matrix_coeffs", ps_vui->u1_matrix_coefficients, ps_bitstrm, 8); 7850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 7860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 7870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("chroma_loc_info_present_flag", ps_vui->u1_chroma_loc_info_present_flag, ps_bitstrm, 1); 7890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_vui->u1_chroma_sample_loc_type_top_field = 0; 7900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_vui->u1_chroma_sample_loc_type_bottom_field = 0; 7910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_vui->u1_chroma_loc_info_present_flag) 7920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 7930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("chroma_sample_loc_type_top_field", ps_vui->u1_chroma_sample_loc_type_top_field, ps_bitstrm); 7940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("chroma_sample_loc_type_bottom_field", ps_vui->u1_chroma_sample_loc_type_bottom_field, ps_bitstrm); 7950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 7960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("neutral_chroma_indication_flag", ps_vui->u1_neutral_chroma_indication_flag, ps_bitstrm, 1); 7980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("field_seq_flag", ps_vui->u1_field_seq_flag, ps_bitstrm, 1); 7990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("frame_field_info_present_flag", ps_vui->u1_frame_field_info_present_flag, ps_bitstrm, 1); 8000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("default_display_window_flag", ps_vui->u1_default_display_window_flag, ps_bitstrm, 1); 8010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_vui->u4_def_disp_win_left_offset = 0; 8020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_vui->u4_def_disp_win_right_offset = 0; 8030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_vui->u4_def_disp_win_top_offset = 0; 8040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_vui->u4_def_disp_win_bottom_offset = 0; 8050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_vui->u1_default_display_window_flag) 8060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("def_disp_win_left_offset", ps_vui->u4_def_disp_win_left_offset, ps_bitstrm); 8080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("def_disp_win_right_offset", ps_vui->u4_def_disp_win_right_offset, ps_bitstrm); 8090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("def_disp_win_top_offset", ps_vui->u4_def_disp_win_top_offset, ps_bitstrm); 8100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("def_disp_win_bottom_offset", ps_vui->u4_def_disp_win_bottom_offset, ps_bitstrm); 8110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("vui_timing_info_present_flag", ps_vui->u1_vui_timing_info_present_flag, ps_bitstrm, 1); 8140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_vui->u1_vui_timing_info_present_flag) 8150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("vui_num_units_in_tick", ps_vui->u4_vui_num_units_in_tick, ps_bitstrm, 32); 8170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("vui_time_scale", ps_vui->u4_vui_time_scale, ps_bitstrm, 32); 8180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("vui_poc_proportional_to_timing_flag", ps_vui->u1_poc_proportional_to_timing_flag, ps_bitstrm, 1); 8190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_vui->u1_poc_proportional_to_timing_flag) 8200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("vui_num_ticks_poc_diff_one_minus1", ps_vui->u1_num_ticks_poc_diff_one_minus1, ps_bitstrm); 8210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("vui_hrd_parameters_present_flag", ps_vui->u1_vui_hrd_parameters_present_flag, ps_bitstrm, 1); 8230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_vui->u1_vui_hrd_parameters_present_flag) 8243e194e0edde1d9ceb71d18f6f0e0bf156a76a650Naveen Kumar P { 8253e194e0edde1d9ceb71d18f6f0e0bf156a76a650Naveen Kumar P ret = ihevcd_parse_hrd_parameters(ps_bitstrm, &ps_vui->s_vui_hrd_parameters, 1, sps_max_sub_layers_minus1); 8263e194e0edde1d9ceb71d18f6f0e0bf156a76a650Naveen Kumar P RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret); 8273e194e0edde1d9ceb71d18f6f0e0bf156a76a650Naveen Kumar P } 8280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("bitstream_restriction_flag", ps_vui->u1_bitstream_restriction_flag, ps_bitstrm, 1); 8310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_vui->u1_tiles_fixed_structure_flag = 0; 8320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_vui->u1_motion_vectors_over_pic_boundaries_flag = 1; 8330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_vui->u1_restricted_ref_pic_lists_flag = 0; 8340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_vui->u4_min_spatial_segmentation_idc = 0; 8350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_vui->u1_max_bytes_per_pic_denom = 2; 8360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_vui->u1_max_bits_per_mincu_denom = 1; 8370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_vui->u1_log2_max_mv_length_horizontal = 15; 8380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_vui->u1_log2_max_mv_length_vertical = 15; 8390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_vui->u1_bitstream_restriction_flag) 8400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("tiles_fixed_structure_flag", ps_vui->u1_tiles_fixed_structure_flag, ps_bitstrm, 1); 8420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("motion_vectors_over_pic_boundaries_flag", ps_vui->u1_motion_vectors_over_pic_boundaries_flag, ps_bitstrm, 1); 8430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("restricted_ref_pic_lists_flag", ps_vui->u1_restricted_ref_pic_lists_flag, ps_bitstrm, 1); 8440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("min_spatial_segmentation_idc", ps_vui->u4_min_spatial_segmentation_idc, ps_bitstrm); 8460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("max_bytes_per_pic_denom", ps_vui->u1_max_bytes_per_pic_denom, ps_bitstrm); 8470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("max_bits_per_min_cu_denom", ps_vui->u1_max_bits_per_mincu_denom, ps_bitstrm); 8480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("log2_max_mv_length_horizontal", ps_vui->u1_log2_max_mv_length_horizontal, ps_bitstrm); 8490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("log2_max_mv_length_vertical", ps_vui->u1_log2_max_mv_length_vertical, ps_bitstrm); 8500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return ret; 8530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 8540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 8560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 8570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 8580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 8590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Parses profile tier and level info for either general layer of sub_layer 8600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 8610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description 8620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Parses profile tier and level info for either general layer of sub_layer 8630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* as per section 7.3.3 8640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 8650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Since the same function is called for parsing general_profile and 8660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* sub_layer_profile etc, variables do not specify whether the syntax is 8670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* for general or sub_layer. Similarly trace functions also do not differentiate 8680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 8690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_bitstrm 8700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Pointer to bitstream structure 8710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 8720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] ps_ptl 8730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Pointer to profile, tier level structure 8740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 8750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns Error code from IHEVCD_ERROR_T 8760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 8770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 8780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 8790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 8800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 8810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarstatic IHEVCD_ERROR_T ihevcd_parse_profile_tier_level_layer(bitstrm_t *ps_bitstrm, 8830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar profile_tier_lvl_t *ps_ptl) 8840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 8850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 value; 8860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 i; 8870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS; 8880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("XXX_profile_space[]", value, ps_bitstrm, 2); 8900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_ptl->i1_profile_space = value; 8910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("XXX_tier_flag[]", value, ps_bitstrm, 1); 8930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_ptl->i1_tier_flag = value; 8940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("XXX_profile_idc[]", value, ps_bitstrm, 5); 8960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_ptl->i1_profile_idc = value; 8970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < MAX_PROFILE_COMPATBLTY; i++) 8990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 9000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("XXX_profile_compatibility_flag[][j]", value, ps_bitstrm, 1); 9010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_ptl->ai1_profile_compatibility_flag[i] = value; 9020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 9030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("general_progressive_source_flag", value, ps_bitstrm, 1); 9050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_ptl->i1_general_progressive_source_flag = value; 9060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("general_interlaced_source_flag", value, ps_bitstrm, 1); 908613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_ptl->i1_general_interlaced_source_flag = value; 9090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("general_non_packed_constraint_flag", value, ps_bitstrm, 1); 911613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_ptl->i1_general_non_packed_constraint_flag = value; 9120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("general_frame_only_constraint_flag", value, ps_bitstrm, 1); 914613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_ptl->i1_frame_only_constraint_flag = value; 9150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("XXX_reserved_zero_44bits[0..15]", value, ps_bitstrm, 16); 9170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("XXX_reserved_zero_44bits[16..31]", value, ps_bitstrm, 16); 9190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("XXX_reserved_zero_44bits[32..43]", value, ps_bitstrm, 12); 9210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return ret; 9220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 9230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 9260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 9270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 9290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Parses profile tier and level info 9300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description 9320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Parses profile tier and level info as per section 7.3.3 9330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Called during VPS and SPS parsing 9340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* calls ihevcd_parse_profile_tier_level() for general layer and each sub_layers 9350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_bitstrm 9370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Pointer to bitstream structure 9380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] ps_ptl 9400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Pointer to structure that contains profile, tier level for each layers 9410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] profile_present 9430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Flag to indicate if profile data is present 9440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] max_num_sub_layers 9460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Number of sub layers present 9470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns Error code from IHEVCD_ERROR_T 9490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 9510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 9520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 9530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 9540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarstatic IHEVCD_ERROR_T ihevcd_profile_tier_level(bitstrm_t *ps_bitstrm, 9560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar profile_tier_lvl_info_t *ps_ptl, 9570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 profile_present, 9580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 max_num_sub_layers) 9590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 9600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 value; 9610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS; 9620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 i; 9630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(profile_present) 9650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 9660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ret = ihevcd_parse_profile_tier_level_layer(ps_bitstrm, &ps_ptl->s_ptl_gen); 967613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar if((IHEVCD_ERROR_T)IHEVCD_SUCCESS != ret) 968613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 969613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar return ret; 970613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 9710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 9720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("general_level_idc", value, ps_bitstrm, 8); 9740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_ptl->s_ptl_gen.u1_level_idc = value; 9750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < max_num_sub_layers; i++) 9780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 9790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("sub_layer_profile_present_flag[i]", value, ps_bitstrm, 1); 9800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_ptl->ai1_sub_layer_profile_present_flag[i] = value; 9810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("sub_layer_level_present_flag[i]", value, ps_bitstrm, 1); 9830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_ptl->ai1_sub_layer_level_present_flag[i] = value; 9840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 9850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(max_num_sub_layers > 0) 9870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 9880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = max_num_sub_layers; i < 8; i++) 9890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 9900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("reserved_zero_2bits", value, ps_bitstrm, 2); 9910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 9920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 9930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < max_num_sub_layers; i++) 9950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 9960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_ptl->ai1_sub_layer_profile_present_flag[i]) 9970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 9980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ret = ihevcd_parse_profile_tier_level_layer(ps_bitstrm, 9990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar &ps_ptl->as_ptl_sub[i]); 10000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 10010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_ptl->ai1_sub_layer_level_present_flag[i]) 10020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 10030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("sub_layer_level_idc[i]", value, ps_bitstrm, 8); 10040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_ptl->as_ptl_sub[i].u1_level_idc = value; 10050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 10070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 10080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return ret; 10120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 10130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 10150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 10160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 10170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 10180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Parses Scaling List Data syntax 10190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 10200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description: 10210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Parses Scaling List Data syntax as per Section: 7.3.6 10220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 10230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_codec 10240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Pointer to codec context 10250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 10260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns Error code from IHEVCD_ERROR_T 10270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 10280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 10290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 10300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 10310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 10320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 10330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarIHEVCD_ERROR_T ihevcd_scaling_list_data(codec_t *ps_codec, WORD16 *pi2_scaling_mat) 10340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 10350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS; 10360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 size_id; 10370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 matrix_id; 10380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 value, dc_value = 0; 10390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 next_coef; 10400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 coef_num; 10410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 i, j, offset; 10420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar bitstrm_t *ps_bitstrm = &ps_codec->s_parse.s_bitstrm; 10430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD16 *pi2_scaling_mat_offset; 10440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 scaling_mat_offset[] = { 0, 16, 32, 48, 64, 80, 96, 160, 224, 288, 352, 416, 480, 736, 992, 1248, 1504, 1760, 2016, 3040 }; 10450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *scan_table; 10460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(size_id = 0; size_id < 4; size_id++) 10480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 10490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(matrix_id = 0; matrix_id < ((size_id == 3) ? 2 : 6); matrix_id++) 10500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 10510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 scaling_list_pred_mode_flag; 10520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 scaling_list_delta_coef; 10530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("scaling_list_pred_mode_flag", scaling_list_pred_mode_flag, ps_bitstrm, 1); 10540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar offset = size_id * 6 + matrix_id; 10560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pi2_scaling_mat_offset = pi2_scaling_mat + scaling_mat_offset[offset]; 10570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!scaling_list_pred_mode_flag) 10590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 10600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 num_elements; 10610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("scaling_list_pred_matrix_id_delta", value, 10620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_bitstrm); 10630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar value = CLIP3(value, 0, matrix_id); 10640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar num_elements = (1 << (4 + (size_id << 1))); 10660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 != value) 10670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar memcpy(pi2_scaling_mat_offset, pi2_scaling_mat_offset - value * num_elements, num_elements * sizeof(WORD16)); 10680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 10690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 10700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 10710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar next_coef = 8; 10720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar coef_num = MIN(64, (1 << (4 + (size_id << 1)))); 10730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(size_id > 1) 10750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 10760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar SEV_PARSE("scaling_list_dc_coef_minus8", value, 10770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_bitstrm); 10780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar next_coef = value + 8; 10800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar dc_value = next_coef; 10810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 10820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(size_id < 2) 10830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 10840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar scan_table = (UWORD8 *)gapv_ihevc_invscan[size_id + 1]; 10850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < coef_num; i++) 10870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 10880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar SEV_PARSE("scaling_list_delta_coef", 10890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar scaling_list_delta_coef, ps_bitstrm); 10900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar next_coef = (next_coef + scaling_list_delta_coef + 256) 10910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar % 256; 10920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pi2_scaling_mat_offset[scan_table[i]] = next_coef; 10930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 10940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 10950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else if(size_id == 2) 10960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 10970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar scan_table = (UWORD8 *)gapv_ihevc_invscan[2]; 10980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < coef_num; i++) 11000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 11010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar SEV_PARSE("scaling_list_delta_coef", 11020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar scaling_list_delta_coef, ps_bitstrm); 11030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar next_coef = (next_coef + scaling_list_delta_coef + 256) 11040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar % 256; 11050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar offset = scan_table[i]; 11070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar offset = (offset >> 3) * 16 * 2 + (offset & 0x7) * 2; 11080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pi2_scaling_mat_offset[offset] = next_coef; 11090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pi2_scaling_mat_offset[offset + 1] = next_coef; 11100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pi2_scaling_mat_offset[offset + 16] = next_coef; 11110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pi2_scaling_mat_offset[offset + 16 + 1] = next_coef; 11120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 11130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pi2_scaling_mat_offset[0] = dc_value; 11140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 11150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 11160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 11170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar scan_table = (UWORD8 *)gapv_ihevc_invscan[2]; 11180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < coef_num; i++) 11200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 11210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar SEV_PARSE("scaling_list_delta_coef", 11220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar scaling_list_delta_coef, ps_bitstrm); 11230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar next_coef = (next_coef + scaling_list_delta_coef + 256) 11240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar % 256; 11250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar offset = scan_table[i]; 11270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar offset = (offset >> 3) * 32 * 4 + (offset & 0x7) * 4; 11280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(j = 0; j < 4; j++) 11300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 11310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pi2_scaling_mat_offset[offset + j * 32] = next_coef; 11320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pi2_scaling_mat_offset[offset + 1 + j * 32] = next_coef; 11330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pi2_scaling_mat_offset[offset + 2 + j * 32] = next_coef; 11340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pi2_scaling_mat_offset[offset + 3 + j * 32] = next_coef; 11350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 11360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pi2_scaling_mat_offset[0] = dc_value; 11370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 11380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 11390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 11400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 11410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 11420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return ret; 11440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 11450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 11470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 11480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 11490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 11500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Parses VPS (Video Parameter Set) 11510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 11520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description: 11530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Parse Video Parameter Set as per Section 7.3.2.1 11540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* update vps structure corresponding to vps ID 11550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Till parsing VPS id, the elements are stored in local variables and are copied 11560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* later 11570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 11580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_codec 11590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Pointer to codec context. 11600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 11610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns Error code from IHEVCD_ERROR_T 11620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 11630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 11640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 11650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 11660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 11670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 11680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarIHEVCD_ERROR_T ihevcd_parse_vps(codec_t *ps_codec) 11690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 11700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS; 11710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 i; 11720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 value; 11730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 vps_id; 11740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar vps_t *ps_vps; 11750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar bitstrm_t *ps_bitstrm = &ps_codec->s_parse.s_bitstrm; 11760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("vps_video_parameter_set_id", value, ps_bitstrm, 4); 11770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar vps_id = value; 11780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(vps_id >= MAX_VPS_CNT) 11800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 11810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_parse.i4_error_code = IHEVCD_UNSUPPORTED_VPS_ID; 11820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return IHEVCD_UNSUPPORTED_VPS_ID; 11830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 11840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_vps = (ps_codec->s_parse.ps_vps_base + vps_id); 11870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_vps->i1_vps_id = vps_id; 11890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("vps_reserved_three_2bits", value, ps_bitstrm, 2); 11910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ASSERT(value == 3); 11920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("vps_max_layers_minus1", value, ps_bitstrm, 6); 11940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar //ps_vps->i1_vps_max_layers = value + 1; 11950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("vps_max_sub_layers_minus1", value, ps_bitstrm, 3); 11990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_vps->i1_vps_max_sub_layers = value + 1; 12000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ASSERT(ps_vps->i1_vps_max_sub_layers < VPS_MAX_SUB_LAYERS); 12020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("vps_temporal_id_nesting_flag", value, ps_bitstrm, 1); 12040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_vps->i1_vps_temporal_id_nesting_flag = value; 12050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("vps_reserved_ffff_16bits", value, ps_bitstrm, 16); 12070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ASSERT(value == 0xFFFF); 12080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar // profile_and_level( 1, vps_max_sub_layers_minus1 ) 12090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ret = ihevcd_profile_tier_level(ps_bitstrm, &(ps_vps->s_ptl), 12100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1, (ps_vps->i1_vps_max_sub_layers - 1)); 12110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("vps_sub_layer_ordering_info_present_flag", value, ps_bitstrm, 1); 12130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_vps->i1_sub_layer_ordering_info_present_flag = value; 12140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar i = (ps_vps->i1_sub_layer_ordering_info_present_flag ? 12150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 0 : (ps_vps->i1_vps_max_sub_layers - 1)); 12160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(; i < ps_vps->i1_vps_max_sub_layers; i++) 12170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 12180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("vps_max_dec_pic_buffering[i]", value, ps_bitstrm); 12190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_vps->ai1_vps_max_dec_pic_buffering[i] = value; 12200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* vps_num_reorder_pics (no max) used in print in order to match with HM */ 12220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("vps_num_reorder_pics[i]", value, ps_bitstrm); 12230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_vps->ai1_vps_max_num_reorder_pics[i] = value; 12240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("vps_max_latency_increase[i]", value, ps_bitstrm); 12260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_vps->ai1_vps_max_latency_increase[i] = value; 12270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 12280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("vps_max_layer_id", value, ps_bitstrm, 6); 12320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar //ps_vps->i1_vps_max_layer_id = value; 12330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("vps_num_layer_sets_minus1", value, ps_bitstrm); 12350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar //ps_vps->i1_vps_num_layer_sets = value + 1; 12360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("vps_timing_info_present_flag", value, ps_bitstrm, 1); 12380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar //ps_vps->i1_vps_timing_info_present_flag = value; 12390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return ret; 12430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 12440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 12460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 12470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 12490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Parses SPS (Sequence Parameter Set) 12500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* sequence_parameter_set_rbsp() 12510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description: 12530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Parse Sequence Parameter Set as per section Section: 7.3.2.2 12540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* The sps is written to a temporary buffer and copied later to the 12550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* appropriate location 12560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_codec 12580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Pointer to codec context 12590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns Error code from IHEVCD_ERROR_T 12610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 12630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 12650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 12660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 12670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarIHEVCD_ERROR_T ihevcd_parse_sps(codec_t *ps_codec) 12680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 12690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS; 12700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 value; 12710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 i; 12730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 vps_id; 12740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sps_max_sub_layers; 12750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sps_id; 12760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sps_temporal_id_nesting_flag; 12770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sps_t *ps_sps; 12780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar profile_tier_lvl_info_t s_ptl; 12790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar bitstrm_t *ps_bitstrm = &ps_codec->s_parse.s_bitstrm; 1280b5cae8181efbb9649ffddb659305a0da59ed445aHarish Mahendrakar WORD32 ctb_log2_size_y = 0; 12810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("video_parameter_set_id", value, ps_bitstrm, 4); 12840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar vps_id = value; 12850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar vps_id = CLIP3(vps_id, 0, MAX_VPS_CNT - 1); 12860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("sps_max_sub_layers_minus1", value, ps_bitstrm, 3); 12880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sps_max_sub_layers = value + 1; 12890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sps_max_sub_layers = CLIP3(sps_max_sub_layers, 1, 7); 12900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("sps_temporal_id_nesting_flag", value, ps_bitstrm, 1); 12920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sps_temporal_id_nesting_flag = value; 12930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar //profile_and_level( 1, sps_max_sub_layers_minus1 ) 12950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ret = ihevcd_profile_tier_level(ps_bitstrm, &(s_ptl), 1, 12960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (sps_max_sub_layers - 1)); 12970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("seq_parameter_set_id", value, ps_bitstrm); 12990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sps_id = value; 13000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((sps_id >= MAX_SPS_CNT) || (sps_id < 0)) 13020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 13030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_codec->i4_sps_done) 13040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return IHEVCD_UNSUPPORTED_SPS_ID; 13050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 13060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sps_id = 0; 13070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 13080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps = (ps_codec->s_parse.ps_sps_base + MAX_SPS_CNT - 1); 13112e0e75aedef322baeb829bf5151aba312840ed40Harish Mahendrakar /* Reset SPS to zero */ 13122e0e75aedef322baeb829bf5151aba312840ed40Harish Mahendrakar { 13132e0e75aedef322baeb829bf5151aba312840ed40Harish Mahendrakar WORD16 *pi2_scaling_mat = ps_sps->pi2_scaling_mat; 13142e0e75aedef322baeb829bf5151aba312840ed40Harish Mahendrakar memset(ps_sps, 0, sizeof(sps_t)); 13152e0e75aedef322baeb829bf5151aba312840ed40Harish Mahendrakar ps_sps->pi2_scaling_mat = pi2_scaling_mat; 13162e0e75aedef322baeb829bf5151aba312840ed40Harish Mahendrakar } 13170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_sps_id = sps_id; 13180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_vps_id = vps_id; 13190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_sps_max_sub_layers = sps_max_sub_layers; 13200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_sps_temporal_id_nesting_flag = sps_temporal_id_nesting_flag; 1321df865d1a3d988bc57323a34ac95eca0053c7c8a2Naveen Kumar P 13220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar memcpy(&ps_sps->s_ptl, &s_ptl, sizeof(profile_tier_lvl_info_t)); 13230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("chroma_format_idc", value, ps_bitstrm); 13250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_chroma_format_idc = value; 13260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sps->i1_chroma_format_idc != CHROMA_FMT_IDC_YUV420) 13280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 13290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_parse.i4_error_code = IHEVCD_UNSUPPORTED_CHROMA_FMT_IDC; 13300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return (IHEVCD_ERROR_T)IHEVCD_UNSUPPORTED_CHROMA_FMT_IDC; 13310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 13320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(CHROMA_FMT_IDC_YUV444_PLANES == ps_sps->i1_chroma_format_idc) 13340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 13350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("separate_colour_plane_flag", value, ps_bitstrm, 1); 13360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_separate_colour_plane_flag = value; 13370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 13380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 13390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 13400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_separate_colour_plane_flag = 0; 13410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 13420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("pic_width_in_luma_samples", value, ps_bitstrm); 13440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i2_pic_width_in_luma_samples = value; 13450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("pic_height_in_luma_samples", value, ps_bitstrm); 13470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i2_pic_height_in_luma_samples = value; 13480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((0 >= ps_sps->i2_pic_width_in_luma_samples) || (0 >= ps_sps->i2_pic_height_in_luma_samples)) 13500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return IHEVCD_INVALID_PARAMETER; 13510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("pic_cropping_flag", value, ps_bitstrm, 1); 13530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_pic_cropping_flag = value; 13540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sps->i1_pic_cropping_flag) 13560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 13570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("pic_crop_left_offset", value, ps_bitstrm); 1359978d3320ef3dc60f69f8c4ba215b869d11b03944Naveen Kumar P if (value < 0 || value >= ps_sps->i2_pic_width_in_luma_samples) 1360e8c26c16d78c5accec081c8f4516918eee679c4cNaveen Kumar P { 1361e8c26c16d78c5accec081c8f4516918eee679c4cNaveen Kumar P return IHEVCD_INVALID_PARAMETER; 1362e8c26c16d78c5accec081c8f4516918eee679c4cNaveen Kumar P } 13630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i2_pic_crop_left_offset = value; 13640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("pic_crop_right_offset", value, ps_bitstrm); 1366978d3320ef3dc60f69f8c4ba215b869d11b03944Naveen Kumar P if (value < 0 || value >= ps_sps->i2_pic_width_in_luma_samples) 1367e8c26c16d78c5accec081c8f4516918eee679c4cNaveen Kumar P { 1368e8c26c16d78c5accec081c8f4516918eee679c4cNaveen Kumar P return IHEVCD_INVALID_PARAMETER; 1369e8c26c16d78c5accec081c8f4516918eee679c4cNaveen Kumar P } 13700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i2_pic_crop_right_offset = value; 13710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("pic_crop_top_offset", value, ps_bitstrm); 1373978d3320ef3dc60f69f8c4ba215b869d11b03944Naveen Kumar P if (value < 0 || value >= ps_sps->i2_pic_height_in_luma_samples) 1374e8c26c16d78c5accec081c8f4516918eee679c4cNaveen Kumar P { 1375e8c26c16d78c5accec081c8f4516918eee679c4cNaveen Kumar P return IHEVCD_INVALID_PARAMETER; 1376e8c26c16d78c5accec081c8f4516918eee679c4cNaveen Kumar P } 13770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i2_pic_crop_top_offset = value; 13780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("pic_crop_bottom_offset", value, ps_bitstrm); 1380978d3320ef3dc60f69f8c4ba215b869d11b03944Naveen Kumar P if (value < 0 || value >= ps_sps->i2_pic_height_in_luma_samples) 1381e8c26c16d78c5accec081c8f4516918eee679c4cNaveen Kumar P { 1382e8c26c16d78c5accec081c8f4516918eee679c4cNaveen Kumar P return IHEVCD_INVALID_PARAMETER; 1383e8c26c16d78c5accec081c8f4516918eee679c4cNaveen Kumar P } 13840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i2_pic_crop_bottom_offset = value; 13850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 13860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 13870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 13880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i2_pic_crop_left_offset = 0; 13890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i2_pic_crop_right_offset = 0; 13900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i2_pic_crop_top_offset = 0; 13910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i2_pic_crop_bottom_offset = 0; 13920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 13930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("bit_depth_luma_minus8", value, ps_bitstrm); 13960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 != value) 13970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return IHEVCD_UNSUPPORTED_BIT_DEPTH; 13980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("bit_depth_chroma_minus8", value, ps_bitstrm); 14000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 != value) 14010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return IHEVCD_UNSUPPORTED_BIT_DEPTH; 14020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 14030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("log2_max_pic_order_cnt_lsb_minus4", value, ps_bitstrm); 14044d32ff55cf3eeeb3a319517176ed2a2c6c376fe1Naveen Kumar P if(value < 0 || value > 12) 14054d32ff55cf3eeeb3a319517176ed2a2c6c376fe1Naveen Kumar P return IHEVCD_INVALID_PARAMETER; 14060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_log2_max_pic_order_cnt_lsb = value + 4; 14070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 14080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("sps_sub_layer_ordering_info_present_flag", value, ps_bitstrm, 1); 14090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_sps_sub_layer_ordering_info_present_flag = value; 14100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 14110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 14120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar i = (ps_sps->i1_sps_sub_layer_ordering_info_present_flag ? 0 : (ps_sps->i1_sps_max_sub_layers - 1)); 14130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(; i < ps_sps->i1_sps_max_sub_layers; i++) 14140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 14150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("max_dec_pic_buffering", value, ps_bitstrm); 1416f4486cdb2ff81368baa1d6e7afcf2c06ba64e666Naveen Kumar P if(value < 0 || (value + 1) > MAX_DPB_SIZE) 14171ab5ce7e42feccd49e49752e6f58f9097ac5d254Harish Mahendrakar { 14181ab5ce7e42feccd49e49752e6f58f9097ac5d254Harish Mahendrakar return IHEVCD_INVALID_PARAMETER; 14191ab5ce7e42feccd49e49752e6f58f9097ac5d254Harish Mahendrakar } 14204286d31e9e121e1005ad8986bcbf9ba3f62122eeNaveen Kumar P ps_sps->ai1_sps_max_dec_pic_buffering[i] = value + 1; 14211ab5ce7e42feccd49e49752e6f58f9097ac5d254Harish Mahendrakar 14220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("num_reorder_pics", value, ps_bitstrm); 1423f4486cdb2ff81368baa1d6e7afcf2c06ba64e666Naveen Kumar P if(value < 0 || value > ps_sps->ai1_sps_max_dec_pic_buffering[i]) 14241ab5ce7e42feccd49e49752e6f58f9097ac5d254Harish Mahendrakar { 14251ab5ce7e42feccd49e49752e6f58f9097ac5d254Harish Mahendrakar return IHEVCD_INVALID_PARAMETER; 14261ab5ce7e42feccd49e49752e6f58f9097ac5d254Harish Mahendrakar } 14274286d31e9e121e1005ad8986bcbf9ba3f62122eeNaveen Kumar P ps_sps->ai1_sps_max_num_reorder_pics[i] = value; 14281ab5ce7e42feccd49e49752e6f58f9097ac5d254Harish Mahendrakar 14290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("max_latency_increase", value, ps_bitstrm); 14300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->ai1_sps_max_latency_increase[i] = value; 14310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 14320fb1f4f477b5b9c2849fed817369b35e1687b355Harish Mahendrakar 14330fb1f4f477b5b9c2849fed817369b35e1687b355Harish Mahendrakar /* Check if sps_max_dec_pic_buffering or sps_max_num_reorder_pics 14340fb1f4f477b5b9c2849fed817369b35e1687b355Harish Mahendrakar has changed */ 1435faa26fa3d76077e1c882f746c221ec2517a30e32Naveen Kumar P if(0 != ps_codec->u4_allocate_dynamic_done) 14360fb1f4f477b5b9c2849fed817369b35e1687b355Harish Mahendrakar { 14370fb1f4f477b5b9c2849fed817369b35e1687b355Harish Mahendrakar sps_t *ps_sps_old = ps_codec->s_parse.ps_sps; 14380fb1f4f477b5b9c2849fed817369b35e1687b355Harish Mahendrakar if(ps_sps_old->ai1_sps_max_dec_pic_buffering[ps_sps_old->i1_sps_max_sub_layers - 1] != 14390fb1f4f477b5b9c2849fed817369b35e1687b355Harish Mahendrakar ps_sps->ai1_sps_max_dec_pic_buffering[ps_sps->i1_sps_max_sub_layers - 1]) 14400fb1f4f477b5b9c2849fed817369b35e1687b355Harish Mahendrakar { 1441faa26fa3d76077e1c882f746c221ec2517a30e32Naveen Kumar P if(0 == ps_codec->i4_first_pic_done) 1442faa26fa3d76077e1c882f746c221ec2517a30e32Naveen Kumar P { 1443faa26fa3d76077e1c882f746c221ec2517a30e32Naveen Kumar P return IHEVCD_INVALID_PARAMETER; 1444faa26fa3d76077e1c882f746c221ec2517a30e32Naveen Kumar P } 14450fb1f4f477b5b9c2849fed817369b35e1687b355Harish Mahendrakar ps_codec->i4_reset_flag = 1; 14460fb1f4f477b5b9c2849fed817369b35e1687b355Harish Mahendrakar return (IHEVCD_ERROR_T)IVD_RES_CHANGED; 14470fb1f4f477b5b9c2849fed817369b35e1687b355Harish Mahendrakar } 14480fb1f4f477b5b9c2849fed817369b35e1687b355Harish Mahendrakar 14490fb1f4f477b5b9c2849fed817369b35e1687b355Harish Mahendrakar if(ps_sps_old->ai1_sps_max_num_reorder_pics[ps_sps_old->i1_sps_max_sub_layers - 1] != 14500fb1f4f477b5b9c2849fed817369b35e1687b355Harish Mahendrakar ps_sps->ai1_sps_max_num_reorder_pics[ps_sps->i1_sps_max_sub_layers - 1]) 14510fb1f4f477b5b9c2849fed817369b35e1687b355Harish Mahendrakar { 1452faa26fa3d76077e1c882f746c221ec2517a30e32Naveen Kumar P if(0 == ps_codec->i4_first_pic_done) 1453faa26fa3d76077e1c882f746c221ec2517a30e32Naveen Kumar P { 1454faa26fa3d76077e1c882f746c221ec2517a30e32Naveen Kumar P return IHEVCD_INVALID_PARAMETER; 1455faa26fa3d76077e1c882f746c221ec2517a30e32Naveen Kumar P } 14560fb1f4f477b5b9c2849fed817369b35e1687b355Harish Mahendrakar ps_codec->i4_reset_flag = 1; 14570fb1f4f477b5b9c2849fed817369b35e1687b355Harish Mahendrakar return (IHEVCD_ERROR_T)IVD_RES_CHANGED; 14580fb1f4f477b5b9c2849fed817369b35e1687b355Harish Mahendrakar } 14590fb1f4f477b5b9c2849fed817369b35e1687b355Harish Mahendrakar } 14600fb1f4f477b5b9c2849fed817369b35e1687b355Harish Mahendrakar 14610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("log2_min_coding_block_size_minus3", value, ps_bitstrm); 14620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_log2_min_coding_block_size = value + 3; 14630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 14640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("log2_diff_max_min_coding_block_size", value, ps_bitstrm); 14650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_log2_diff_max_min_coding_block_size = value; 14660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1467b5cae8181efbb9649ffddb659305a0da59ed445aHarish Mahendrakar ctb_log2_size_y = ps_sps->i1_log2_min_coding_block_size + ps_sps->i1_log2_diff_max_min_coding_block_size; 1468b5cae8181efbb9649ffddb659305a0da59ed445aHarish Mahendrakar 14690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("log2_min_transform_block_size_minus2", value, ps_bitstrm); 14700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_log2_min_transform_block_size = value + 2; 14710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 14720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("log2_diff_max_min_transform_block_size", value, ps_bitstrm); 14730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_log2_diff_max_min_transform_block_size = value; 14740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 14750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_log2_max_transform_block_size = ps_sps->i1_log2_min_transform_block_size + 14760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_log2_diff_max_min_transform_block_size; 14770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1478b5cae8181efbb9649ffddb659305a0da59ed445aHarish Mahendrakar if ((ps_sps->i1_log2_max_transform_block_size < 0) || 1479b5cae8181efbb9649ffddb659305a0da59ed445aHarish Mahendrakar (ps_sps->i1_log2_max_transform_block_size > MIN(ctb_log2_size_y, 5))) 1480b5cae8181efbb9649ffddb659305a0da59ed445aHarish Mahendrakar { 1481b5cae8181efbb9649ffddb659305a0da59ed445aHarish Mahendrakar return IHEVCD_INVALID_PARAMETER; 1482b5cae8181efbb9649ffddb659305a0da59ed445aHarish Mahendrakar } 1483b5cae8181efbb9649ffddb659305a0da59ed445aHarish Mahendrakar 14840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_log2_ctb_size = ps_sps->i1_log2_min_coding_block_size + 14850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_log2_diff_max_min_coding_block_size; 14860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 14870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((ps_sps->i1_log2_min_coding_block_size < 3) || 14880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (ps_sps->i1_log2_min_transform_block_size < 2) || 14890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (ps_sps->i1_log2_diff_max_min_transform_block_size < 0) || 14900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (ps_sps->i1_log2_max_transform_block_size > ps_sps->i1_log2_ctb_size) || 14910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (ps_sps->i1_log2_ctb_size < 4) || 1492ccfd1ea5c4cf9cf0a55088506ae5f312663f8792Naveen Kumar P (ps_sps->i1_log2_ctb_size > 6) || 1493ccfd1ea5c4cf9cf0a55088506ae5f312663f8792Naveen Kumar P (ps_sps->i2_pic_width_in_luma_samples % (1 << ps_sps->i1_log2_min_coding_block_size) != 0) || 1494ccfd1ea5c4cf9cf0a55088506ae5f312663f8792Naveen Kumar P (ps_sps->i2_pic_height_in_luma_samples % (1 << ps_sps->i1_log2_min_coding_block_size) != 0)) 14950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 14960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return IHEVCD_INVALID_PARAMETER; 14970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 14980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 14990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_log2_min_pcm_coding_block_size = 0; 15000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_log2_diff_max_min_pcm_coding_block_size = 0; 15010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("max_transform_hierarchy_depth_inter", value, ps_bitstrm); 1503f7287c7993a0d61abccfdc530f388b366139ac1dNaveen Kumar P if(value < 0 || value > (ps_sps->i1_log2_ctb_size - ps_sps->i1_log2_min_transform_block_size)) 1504f7287c7993a0d61abccfdc530f388b366139ac1dNaveen Kumar P { 1505f7287c7993a0d61abccfdc530f388b366139ac1dNaveen Kumar P return IHEVCD_INVALID_PARAMETER; 1506f7287c7993a0d61abccfdc530f388b366139ac1dNaveen Kumar P } 15070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_max_transform_hierarchy_depth_inter = value; 15080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("max_transform_hierarchy_depth_intra", value, ps_bitstrm); 1510f7287c7993a0d61abccfdc530f388b366139ac1dNaveen Kumar P if(value < 0 || value > (ps_sps->i1_log2_ctb_size - ps_sps->i1_log2_min_transform_block_size)) 1511f7287c7993a0d61abccfdc530f388b366139ac1dNaveen Kumar P { 1512f7287c7993a0d61abccfdc530f388b366139ac1dNaveen Kumar P return IHEVCD_INVALID_PARAMETER; 1513f7287c7993a0d61abccfdc530f388b366139ac1dNaveen Kumar P } 15140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_max_transform_hierarchy_depth_intra = value; 15150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* String has a d (enabled) in order to match with HM */ 15170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("scaling_list_enabled_flag", value, ps_bitstrm, 1); 15180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_scaling_list_enable_flag = value; 15190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sps->i1_scaling_list_enable_flag) 15210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 15220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar COPY_DEFAULT_SCALING_LIST(ps_sps->pi2_scaling_mat); 15230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("sps_scaling_list_data_present_flag", value, ps_bitstrm, 1); 15240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_sps_scaling_list_data_present_flag = value; 15250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sps->i1_sps_scaling_list_data_present_flag) 15270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevcd_scaling_list_data(ps_codec, ps_sps->pi2_scaling_mat); 15280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 15290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 15300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 15310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar COPY_FLAT_SCALING_LIST(ps_sps->pi2_scaling_mat); 15320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 15330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* String is asymmetric_motion_partitions_enabled_flag instead of amp_enabled_flag in order to match with HM */ 15340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("asymmetric_motion_partitions_enabled_flag", value, ps_bitstrm, 1); 15350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_amp_enabled_flag = value; 15360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("sample_adaptive_offset_enabled_flag", value, ps_bitstrm, 1); 15380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_sample_adaptive_offset_enabled_flag = value; 15390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("pcm_enabled_flag", value, ps_bitstrm, 1); 15410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_pcm_enabled_flag = value; 15420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sps->i1_pcm_enabled_flag) 15440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 15450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("pcm_sample_bit_depth_luma", value, ps_bitstrm, 4); 15460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_pcm_sample_bit_depth_luma = value + 1; 15470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("pcm_sample_bit_depth_chroma", value, ps_bitstrm, 4); 15490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_pcm_sample_bit_depth_chroma = value + 1; 15500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("log2_min_pcm_coding_block_size_minus3", value, ps_bitstrm); 15520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_log2_min_pcm_coding_block_size = value + 3; 15530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("log2_diff_max_min_pcm_coding_block_size", value, ps_bitstrm); 15550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_log2_diff_max_min_pcm_coding_block_size = value; 15560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("pcm_loop_filter_disable_flag", value, ps_bitstrm, 1); 15570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_pcm_loop_filter_disable_flag = value; 15580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 15600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("num_short_term_ref_pic_sets", value, ps_bitstrm); 1561b93923e2883a2d1a4eb46290c3b15a84da808d66Naveen Kumar P if(value < 0 || value > MAX_STREF_PICS_SPS) 1562b93923e2883a2d1a4eb46290c3b15a84da808d66Naveen Kumar P { 1563b93923e2883a2d1a4eb46290c3b15a84da808d66Naveen Kumar P return IHEVCD_INVALID_PARAMETER; 1564b93923e2883a2d1a4eb46290c3b15a84da808d66Naveen Kumar P } 15650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_num_short_term_ref_pic_sets = value; 15660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < ps_sps->i1_num_short_term_ref_pic_sets; i++) 15680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevcd_short_term_ref_pic_set(ps_bitstrm, &ps_sps->as_stref_picset[0], ps_sps->i1_num_short_term_ref_pic_sets, i, &ps_sps->as_stref_picset[i]); 15690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("long_term_ref_pics_present_flag", value, ps_bitstrm, 1); 15710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_long_term_ref_pics_present_flag = value; 15720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sps->i1_long_term_ref_pics_present_flag) 15740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 15750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("num_long_term_ref_pics_sps", value, ps_bitstrm); 1576b93923e2883a2d1a4eb46290c3b15a84da808d66Naveen Kumar P if(value < 0 || value > MAX_LTREF_PICS_SPS) 1577b93923e2883a2d1a4eb46290c3b15a84da808d66Naveen Kumar P { 1578b93923e2883a2d1a4eb46290c3b15a84da808d66Naveen Kumar P return IHEVCD_INVALID_PARAMETER; 1579b93923e2883a2d1a4eb46290c3b15a84da808d66Naveen Kumar P } 15800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_num_long_term_ref_pics_sps = value; 15810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < ps_sps->i1_num_long_term_ref_pics_sps; i++) 15830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 15840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("lt_ref_pic_poc_lsb_sps[ i ]", value, ps_bitstrm, ps_sps->i1_log2_max_pic_order_cnt_lsb); 15853426916ae11a156b3bc216f6e074007a0353e518Grant Hsu ps_sps->au2_lt_ref_pic_poc_lsb_sps[i] = value; 15860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("used_by_curr_pic_lt_sps_flag[ i ]", value, ps_bitstrm, 1); 15880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->ai1_used_by_curr_pic_lt_sps_flag[i] = value; 15890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 15900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 15910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("sps_temporal_mvp_enable_flag", value, ps_bitstrm, 1); 15930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_sps_temporal_mvp_enable_flag = value; 15940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Print matches HM 8-2 */ 15960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("sps_strong_intra_smoothing_enable_flag", value, ps_bitstrm, 1); 15970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_strong_intra_smoothing_enable_flag = value; 15980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("vui_parameters_present_flag", value, ps_bitstrm, 1); 16000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_vui_parameters_present_flag = value; 16010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 16020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sps->i1_vui_parameters_present_flag) 16033e194e0edde1d9ceb71d18f6f0e0bf156a76a650Naveen Kumar P { 16043e194e0edde1d9ceb71d18f6f0e0bf156a76a650Naveen Kumar P ret = ihevcd_parse_vui_parameters(ps_bitstrm, 16053e194e0edde1d9ceb71d18f6f0e0bf156a76a650Naveen Kumar P &ps_sps->s_vui_parameters, 16063e194e0edde1d9ceb71d18f6f0e0bf156a76a650Naveen Kumar P ps_sps->i1_sps_max_sub_layers - 1); 16073e194e0edde1d9ceb71d18f6f0e0bf156a76a650Naveen Kumar P RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret); 16083e194e0edde1d9ceb71d18f6f0e0bf156a76a650Naveen Kumar P } 16090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 16100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("sps_extension_flag", value, ps_bitstrm, 1); 16110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1612232bbe1908d1dd9f10513d7b8065ecaf5c9a11a6Harish Mahendrakar if((UWORD8 *)ps_bitstrm->pu4_buf > ps_bitstrm->pu1_buf_max) 1613232bbe1908d1dd9f10513d7b8065ecaf5c9a11a6Harish Mahendrakar { 1614232bbe1908d1dd9f10513d7b8065ecaf5c9a11a6Harish Mahendrakar return IHEVCD_INVALID_PARAMETER; 1615232bbe1908d1dd9f10513d7b8065ecaf5c9a11a6Harish Mahendrakar } 16160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 16170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 16180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 numerator; 16190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ceil_offset; 16200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 16210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ceil_offset = (1 << ps_sps->i1_log2_ctb_size) - 1; 16220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar numerator = ps_sps->i2_pic_width_in_luma_samples; 16230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 16240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i2_pic_wd_in_ctb = ((numerator + ceil_offset) / 16250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (1 << ps_sps->i1_log2_ctb_size)); 16260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 16270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar numerator = ps_sps->i2_pic_height_in_luma_samples; 16280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i2_pic_ht_in_ctb = ((numerator + ceil_offset) / 16290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (1 << ps_sps->i1_log2_ctb_size)); 16300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 16310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i4_pic_size_in_ctb = ps_sps->i2_pic_ht_in_ctb * 16320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i2_pic_wd_in_ctb; 16330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 16340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_codec->i4_sps_done) 16350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_parse.i4_next_ctb_indx = ps_sps->i4_pic_size_in_ctb; 16360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 16370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar numerator = ps_sps->i2_pic_width_in_luma_samples; 16380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i2_pic_wd_in_min_cb = numerator / 16390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (1 << ps_sps->i1_log2_min_coding_block_size); 16400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 16410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar numerator = ps_sps->i2_pic_height_in_luma_samples; 16420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i2_pic_ht_in_min_cb = numerator / 16430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (1 << ps_sps->i1_log2_min_coding_block_size); 16440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 1645faa26fa3d76077e1c882f746c221ec2517a30e32Naveen Kumar P if((0 != ps_codec->u4_allocate_dynamic_done) && 16460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ((ps_codec->i4_wd != ps_sps->i2_pic_width_in_luma_samples) || 16470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (ps_codec->i4_ht != ps_sps->i2_pic_height_in_luma_samples))) 16480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1649faa26fa3d76077e1c882f746c221ec2517a30e32Naveen Kumar P if(0 == ps_codec->i4_first_pic_done) 1650faa26fa3d76077e1c882f746c221ec2517a30e32Naveen Kumar P { 1651faa26fa3d76077e1c882f746c221ec2517a30e32Naveen Kumar P return IHEVCD_INVALID_PARAMETER; 1652faa26fa3d76077e1c882f746c221ec2517a30e32Naveen Kumar P } 16530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_reset_flag = 1; 1654221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy return (IHEVCD_ERROR_T)IVD_RES_CHANGED; 16550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 16560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1657f9f8d07fb83b1395af5d515bccbaed8aa6788019Harish Mahendrakar if((ps_sps->i2_pic_width_in_luma_samples > MAX_WD) || 1658f9f8d07fb83b1395af5d515bccbaed8aa6788019Harish Mahendrakar ((ps_sps->i2_pic_width_in_luma_samples * ps_sps->i2_pic_height_in_luma_samples) > 1659f9f8d07fb83b1395af5d515bccbaed8aa6788019Harish Mahendrakar (MAX_WD * MAX_HT))) 1660f9f8d07fb83b1395af5d515bccbaed8aa6788019Harish Mahendrakar { 1661f9f8d07fb83b1395af5d515bccbaed8aa6788019Harish Mahendrakar return (IHEVCD_ERROR_T)IVD_STREAM_WIDTH_HEIGHT_NOT_SUPPORTED; 1662f9f8d07fb83b1395af5d515bccbaed8aa6788019Harish Mahendrakar } 1663f9f8d07fb83b1395af5d515bccbaed8aa6788019Harish Mahendrakar 16640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Update display width and display height */ 16650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 16660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 disp_wd, disp_ht; 16670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 crop_unit_x, crop_unit_y; 16680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar crop_unit_x = 1; 16690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar crop_unit_y = 1; 16700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 16710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(CHROMA_FMT_IDC_YUV420 == ps_sps->i1_chroma_format_idc) 16720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 16730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar crop_unit_x = 2; 16740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar crop_unit_y = 2; 16750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 16760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 16770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar disp_wd = ps_sps->i2_pic_width_in_luma_samples; 16780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar disp_wd -= ps_sps->i2_pic_crop_left_offset * crop_unit_x; 16790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar disp_wd -= ps_sps->i2_pic_crop_right_offset * crop_unit_x; 16800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 16810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 16820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar disp_ht = ps_sps->i2_pic_height_in_luma_samples; 16830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar disp_ht -= ps_sps->i2_pic_crop_top_offset * crop_unit_y; 16840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar disp_ht -= ps_sps->i2_pic_crop_bottom_offset * crop_unit_y; 16850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 16860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((0 >= disp_wd) || (0 >= disp_ht)) 16870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return IHEVCD_INVALID_PARAMETER; 16880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 16890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_disp_wd = disp_wd; 16900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_disp_ht = disp_ht; 16910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 16920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 16930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_wd = ps_sps->i2_pic_width_in_luma_samples; 16940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_ht = ps_sps->i2_pic_height_in_luma_samples; 16950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 16960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 16970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ref_strd; 16980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ref_strd = ALIGN32(ps_sps->i2_pic_width_in_luma_samples + PAD_WD); 16990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_codec->i4_strd < ref_strd) 17000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 17010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_strd = ref_strd; 17020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 17030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 17040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 17050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_codec->i4_share_disp_buf) 17060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 17070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_codec->i4_disp_strd < ps_codec->i4_disp_wd) 17080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 17090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_disp_strd = ps_codec->i4_disp_wd; 17100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 17110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 17120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 17130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 17140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_codec->i4_disp_strd < ps_codec->i4_strd) 17150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 17160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_disp_strd = ps_codec->i4_strd; 17170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 17180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 17190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 17200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1721df865d1a3d988bc57323a34ac95eca0053c7c8a2Naveen Kumar P /* This is used only during initialization to get reorder count etc */ 1722df865d1a3d988bc57323a34ac95eca0053c7c8a2Naveen Kumar P ps_codec->i4_sps_id = sps_id; 1723df865d1a3d988bc57323a34ac95eca0053c7c8a2Naveen Kumar P 17240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_sps_done = 1; 17250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return ret; 17260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 17270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 17280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 17290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevcd_unmark_pps(codec_t *ps_codec, WORD32 sps_id) 17300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 17310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 pps_id = 0; 17320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pps_t *ps_pps = ps_codec->ps_pps_base; 17330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 17340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(pps_id = 0; pps_id < MAX_PPS_CNT - 1; pps_id++, ps_pps++) 17350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 17360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((ps_pps->i1_pps_valid) && 17370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (ps_pps->i1_sps_id == sps_id)) 17380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_pps_valid = 0; 17390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 17400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 17410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 17420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 17430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevcd_copy_sps(codec_t *ps_codec, WORD32 sps_id, WORD32 sps_id_ref) 17440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 17450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sps_t *ps_sps, *ps_sps_ref; 17460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD16 *pi2_scaling_mat_backup; 17470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 scaling_mat_size; 17480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 17490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar SCALING_MAT_SIZE(scaling_mat_size); 17500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps_ref = ps_codec->ps_sps_base + sps_id_ref; 17510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps = ps_codec->ps_sps_base + sps_id; 17520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 17530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sps->i1_sps_valid) 17540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 17550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((ps_sps->i1_log2_ctb_size != ps_sps_ref->i1_log2_ctb_size) || 17560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (ps_sps->i2_pic_wd_in_ctb != ps_sps_ref->i2_pic_wd_in_ctb) || 17570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (ps_sps->i2_pic_ht_in_ctb != ps_sps_ref->i2_pic_ht_in_ctb)) 17580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 17590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevcd_unmark_pps(ps_codec, sps_id); 17600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 17610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 17620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 17630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pi2_scaling_mat_backup = ps_sps->pi2_scaling_mat; 17640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 17650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar memcpy(ps_sps, ps_sps_ref, sizeof(sps_t)); 17660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->pi2_scaling_mat = pi2_scaling_mat_backup; 17670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar memcpy(ps_sps->pi2_scaling_mat, ps_sps_ref->pi2_scaling_mat, scaling_mat_size * sizeof(WORD16)); 17680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps->i1_sps_valid = 1; 17690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 17700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_parse.ps_sps = ps_sps; 17710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 17720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 17730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 17740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 17750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 17760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 17770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 17780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Parses PPS (Picture Parameter Set) 17790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 17800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description: 17810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Parse Picture Parameter Set as per section Section: 7.3.2.3 17820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* The pps is written to a temporary buffer and copied later to the 17830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* appropriate location 17840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 17850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_codec 17860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Pointer to codec context 17870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 17880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns Error code from IHEVCD_ERROR_T 17890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 17900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 17910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 17920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 17930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 17940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 17950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarIHEVCD_ERROR_T ihevcd_parse_pps(codec_t *ps_codec) 17960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 17970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS; 17980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 value; 17990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 pps_id; 18000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pps_t *ps_pps; 18020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sps_t *ps_sps; 18030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar bitstrm_t *ps_bitstrm = &ps_codec->s_parse.s_bitstrm; 18040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_codec->i4_sps_done) 18070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return IHEVCD_INVALID_HEADER; 18080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("pic_parameter_set_id", value, ps_bitstrm); 18100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pps_id = value; 18120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((pps_id >= MAX_PPS_CNT) || (pps_id < 0)) 18130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 18140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_codec->i4_pps_done) 18150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return IHEVCD_UNSUPPORTED_PPS_ID; 18160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 18170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pps_id = 0; 18180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 18190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps = (ps_codec->s_parse.ps_pps_base + MAX_PPS_CNT - 1); 18220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_pps_id = pps_id; 18240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("seq_parameter_set_id", value, ps_bitstrm); 18260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_sps_id = value; 18270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_sps_id = CLIP3(ps_pps->i1_sps_id, 0, MAX_SPS_CNT - 2); 18280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps = (ps_codec->s_parse.ps_sps_base + ps_pps->i1_sps_id); 18300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* If the SPS that is being referred to has not been parsed, 18320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * copy an existing SPS to the current location */ 18330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sps->i1_sps_valid) 18340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 18350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return IHEVCD_INVALID_HEADER; 18360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* 18380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sps_t *ps_sps_ref = ps_codec->ps_sps_base; 18390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar while(0 == ps_sps_ref->i1_sps_valid) 18400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps_ref++; 18410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevcd_copy_sps(ps_codec, ps_pps->i1_sps_id, ps_sps_ref->i1_sps_id); 18420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 18430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 18440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("dependent_slices_enabled_flag", value, ps_bitstrm, 1); 18460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_dependent_slice_enabled_flag = value; 18470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("output_flag_present_flag", value, ps_bitstrm, 1); 18490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_output_flag_present_flag = value; 18500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("num_extra_slice_header_bits", value, ps_bitstrm, 3); 18520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_num_extra_slice_header_bits = value; 18530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("sign_data_hiding_flag", value, ps_bitstrm, 1); 18560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_sign_data_hiding_flag = value; 18570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("cabac_init_present_flag", value, ps_bitstrm, 1); 18590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_cabac_init_present_flag = value; 18600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("num_ref_idx_l0_default_active_minus1", value, ps_bitstrm); 18620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_num_ref_idx_l0_default_active = value + 1; 18630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("num_ref_idx_l1_default_active_minus1", value, ps_bitstrm); 18650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_num_ref_idx_l1_default_active = value + 1; 18660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar SEV_PARSE("pic_init_qp_minus26", value, ps_bitstrm); 18680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_pic_init_qp = value + 26; 18690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("constrained_intra_pred_flag", value, ps_bitstrm, 1); 18710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_constrained_intra_pred_flag = value; 18720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("transform_skip_enabled_flag", value, ps_bitstrm, 1); 18740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_transform_skip_enabled_flag = value; 18750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("cu_qp_delta_enabled_flag", value, ps_bitstrm, 1); 18770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_cu_qp_delta_enabled_flag = value; 18780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_pps->i1_cu_qp_delta_enabled_flag) 18800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 18810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("diff_cu_qp_delta_depth", value, ps_bitstrm); 18820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_diff_cu_qp_delta_depth = value; 18830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 18840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 18850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 18860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_diff_cu_qp_delta_depth = 0; 18870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 18880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_log2_min_cu_qp_delta_size = ps_sps->i1_log2_ctb_size - ps_pps->i1_diff_cu_qp_delta_depth; 18890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Print different */ 18900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar SEV_PARSE("cb_qp_offset", value, ps_bitstrm); 18910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_pic_cb_qp_offset = value; 18920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Print different */ 18940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar SEV_PARSE("cr_qp_offset", value, ps_bitstrm); 18950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_pic_cr_qp_offset = value; 18960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Print different */ 18980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("slicelevel_chroma_qp_flag", value, ps_bitstrm, 1); 18990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_pic_slice_level_chroma_qp_offsets_present_flag = value; 19000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 19010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("weighted_pred_flag", value, ps_bitstrm, 1); 19020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_weighted_pred_flag = value; 19030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 19040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("weighted_bipred_flag", value, ps_bitstrm, 1); 19050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_weighted_bipred_flag = value; 19060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 19070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("transquant_bypass_enable_flag", value, ps_bitstrm, 1); 19080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_transquant_bypass_enable_flag = value; 19090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 19100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("tiles_enabled_flag", value, ps_bitstrm, 1); 19110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_tiles_enabled_flag = value; 19120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1913248e72c7a8c7c382ff4397868a6c7453a6453141Harish Mahendrakar /* When tiles are enabled and width or height is >= 4096, 1914248e72c7a8c7c382ff4397868a6c7453a6453141Harish Mahendrakar * CTB Size should at least be 32. 16x16 CTBs can result 1915248e72c7a8c7c382ff4397868a6c7453a6453141Harish Mahendrakar * in tile position greater than 255 for 4096, 1916248e72c7a8c7c382ff4397868a6c7453a6453141Harish Mahendrakar * which decoder does not support. 1917248e72c7a8c7c382ff4397868a6c7453a6453141Harish Mahendrakar */ 1918248e72c7a8c7c382ff4397868a6c7453a6453141Harish Mahendrakar if((ps_pps->i1_tiles_enabled_flag) && 1919248e72c7a8c7c382ff4397868a6c7453a6453141Harish Mahendrakar (ps_sps->i1_log2_ctb_size == 4) && 1920248e72c7a8c7c382ff4397868a6c7453a6453141Harish Mahendrakar ((ps_sps->i2_pic_width_in_luma_samples >= 4096) || 1921248e72c7a8c7c382ff4397868a6c7453a6453141Harish Mahendrakar (ps_sps->i2_pic_height_in_luma_samples >= 4096))) 1922248e72c7a8c7c382ff4397868a6c7453a6453141Harish Mahendrakar { 1923248e72c7a8c7c382ff4397868a6c7453a6453141Harish Mahendrakar return IHEVCD_INVALID_HEADER; 1924248e72c7a8c7c382ff4397868a6c7453a6453141Harish Mahendrakar } 1925248e72c7a8c7c382ff4397868a6c7453a6453141Harish Mahendrakar 19260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("entropy_coding_sync_enabled_flag", value, ps_bitstrm, 1); 19270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_entropy_coding_sync_enabled_flag = value; 19280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 19290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_loop_filter_across_tiles_enabled_flag = 0; 19300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_pps->i1_tiles_enabled_flag) 19310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 193207ef4e7138e0e13d61039530358343a19308b188Naveen Kumar P WORD32 wd = ALIGN64(ps_codec->i4_wd); 193307ef4e7138e0e13d61039530358343a19308b188Naveen Kumar P WORD32 ht = ALIGN64(ps_codec->i4_ht); 193407ef4e7138e0e13d61039530358343a19308b188Naveen Kumar P 193507ef4e7138e0e13d61039530358343a19308b188Naveen Kumar P WORD32 max_tile_cols = (wd + MIN_TILE_WD - 1) / MIN_TILE_WD; 193607ef4e7138e0e13d61039530358343a19308b188Naveen Kumar P WORD32 max_tile_rows = (ht + MIN_TILE_HT - 1) / MIN_TILE_HT; 193707ef4e7138e0e13d61039530358343a19308b188Naveen Kumar P 19380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("num_tile_columns_minus1", value, ps_bitstrm); 19390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_num_tile_columns = value + 1; 19400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 19410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("num_tile_rows_minus1", value, ps_bitstrm); 19420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_num_tile_rows = value + 1; 19430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 19440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((ps_pps->i1_num_tile_columns < 1) || 194507ef4e7138e0e13d61039530358343a19308b188Naveen Kumar P (ps_pps->i1_num_tile_columns > max_tile_cols) || 19460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (ps_pps->i1_num_tile_rows < 1) || 194707ef4e7138e0e13d61039530358343a19308b188Naveen Kumar P (ps_pps->i1_num_tile_rows > max_tile_rows)) 19480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return IHEVCD_INVALID_HEADER; 19490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 19500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("uniform_spacing_flag", value, ps_bitstrm, 1); 19510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_uniform_spacing_flag = value; 19520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 19530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 19540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 19550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 19560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 start; 19570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 i, j; 19580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 19590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 19600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar start = 0; 19610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < ps_pps->i1_num_tile_columns; i++) 19620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 19630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tile_t *ps_tile; 19640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!ps_pps->i1_uniform_spacing_flag) 19650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 19660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(i < (ps_pps->i1_num_tile_columns - 1)) 19670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 19680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("column_width_minus1[ i ]", value, ps_bitstrm); 19690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar value += 1; 19700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 19710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 19720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 19730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar value = ps_sps->i2_pic_wd_in_ctb - start; 19740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 19750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 19760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 19770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 19780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar value = ((i + 1) * ps_sps->i2_pic_wd_in_ctb) / ps_pps->i1_num_tile_columns - 19790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (i * ps_sps->i2_pic_wd_in_ctb) / ps_pps->i1_num_tile_columns; 19800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 19810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 19820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(j = 0; j < ps_pps->i1_num_tile_rows; j++) 19830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 19840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_tile = ps_pps->ps_tile + j * ps_pps->i1_num_tile_columns + i; 19850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_tile->u1_pos_x = start; 19860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_tile->u2_wd = value; 19870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 19880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar start += value; 19890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 19900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((start > ps_sps->i2_pic_wd_in_ctb) || 19910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (value <= 0)) 19920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return IHEVCD_INVALID_HEADER; 19930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 19940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 19950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar start = 0; 19960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < (ps_pps->i1_num_tile_rows); i++) 19970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 19980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tile_t *ps_tile; 19990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!ps_pps->i1_uniform_spacing_flag) 20000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 20010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(i < (ps_pps->i1_num_tile_rows - 1)) 20020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 20030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 20040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("row_height_minus1[ i ]", value, ps_bitstrm); 20050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar value += 1; 20060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 20070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 20080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 20090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar value = ps_sps->i2_pic_ht_in_ctb - start; 20100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 20110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 20120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 20130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 20140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar value = ((i + 1) * ps_sps->i2_pic_ht_in_ctb) / ps_pps->i1_num_tile_rows - 20150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (i * ps_sps->i2_pic_ht_in_ctb) / ps_pps->i1_num_tile_rows; 20160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 20170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 20180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(j = 0; j < ps_pps->i1_num_tile_columns; j++) 20190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 20200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_tile = ps_pps->ps_tile + i * ps_pps->i1_num_tile_columns + j; 20210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_tile->u1_pos_y = start; 20220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_tile->u2_ht = value; 20230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 20240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar start += value; 20250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 20260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((start > ps_sps->i2_pic_ht_in_ctb) || 20270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (value <= 0)) 20280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return IHEVCD_INVALID_HEADER; 20290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 20300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 20310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 20320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 20330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("loop_filter_across_tiles_enabled_flag", value, ps_bitstrm, 1); 20340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_loop_filter_across_tiles_enabled_flag = value; 20350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 20360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 20370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 20380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 20390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* If tiles are not present, set first tile in each PPS to have tile 20400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar width and height equal to picture width and height */ 20410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_num_tile_columns = 1; 20420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_num_tile_rows = 1; 20430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_uniform_spacing_flag = 1; 20440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 20450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->ps_tile->u1_pos_x = 0; 20460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->ps_tile->u1_pos_y = 0; 20470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->ps_tile->u2_wd = ps_sps->i2_pic_wd_in_ctb; 20480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->ps_tile->u2_ht = ps_sps->i2_pic_ht_in_ctb; 20490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 20500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 20510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("loop_filter_across_slices_enabled_flag", value, ps_bitstrm, 1); 20520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_loop_filter_across_slices_enabled_flag = value; 20530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 20540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("deblocking_filter_control_present_flag", value, ps_bitstrm, 1); 20550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_deblocking_filter_control_present_flag = value; 20560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 20570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Default values */ 20580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_pic_disable_deblocking_filter_flag = 0; 20590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_deblocking_filter_override_enabled_flag = 0; 20600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_beta_offset_div2 = 0; 20610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_tc_offset_div2 = 0; 20620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 20630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_pps->i1_deblocking_filter_control_present_flag) 20640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 20650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 20660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("deblocking_filter_override_enabled_flag", value, ps_bitstrm, 1); 20670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_deblocking_filter_override_enabled_flag = value; 20680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 20690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("pic_disable_deblocking_filter_flag", value, ps_bitstrm, 1); 20700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_pic_disable_deblocking_filter_flag = value; 20710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 20720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!ps_pps->i1_pic_disable_deblocking_filter_flag) 20730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 20740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 20750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar SEV_PARSE("pps_beta_offset_div2", value, ps_bitstrm); 20760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_beta_offset_div2 = value; 20770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 20780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar SEV_PARSE("pps_tc_offset_div2", value, ps_bitstrm); 20790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_tc_offset_div2 = value; 20800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 20810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 20820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 20830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 20840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("pps_scaling_list_data_present_flag", value, ps_bitstrm, 1); 20850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_pps_scaling_list_data_present_flag = value; 20860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 20870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_pps->i1_pps_scaling_list_data_present_flag) 20880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 20890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar COPY_DEFAULT_SCALING_LIST(ps_pps->pi2_scaling_mat); 20900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevcd_scaling_list_data(ps_codec, ps_pps->pi2_scaling_mat); 20910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 20920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 20930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("lists_modification_present_flag", value, ps_bitstrm, 1); 20940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_lists_modification_present_flag = value; 20950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UEV_PARSE("log2_parallel_merge_level_minus2", value, ps_bitstrm); 20960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_log2_parallel_merge_level = value + 2; 20970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 20980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("slice_header_extension_present_flag", value, ps_bitstrm, 1); 20990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_slice_header_extension_present_flag = value; 21000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Not present in HM */ 21010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BITS_PARSE("pps_extension_flag", value, ps_bitstrm, 1); 21020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2103d61d5e5f6aa0e5f80b8ae793aca4a4085d015c06Naveen Kumar P if((UWORD8 *)ps_bitstrm->pu4_buf > ps_bitstrm->pu1_buf_max) 2104d61d5e5f6aa0e5f80b8ae793aca4a4085d015c06Naveen Kumar P return IHEVCD_INVALID_PARAMETER; 2105d61d5e5f6aa0e5f80b8ae793aca4a4085d015c06Naveen Kumar P 21060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_pps_done = 1; 21070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return ret; 21080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 21090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 21100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 21110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevcd_copy_pps(codec_t *ps_codec, WORD32 pps_id, WORD32 pps_id_ref) 21120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 21130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pps_t *ps_pps, *ps_pps_ref; 21140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD16 *pi2_scaling_mat_backup; 21150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 scaling_mat_size; 21160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tile_t *ps_tile_backup; 21170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 max_tile_cols, max_tile_rows; 21184d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar WORD32 wd, ht; 21194d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar wd = ALIGN64(ps_codec->i4_wd); 21204d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar ht = ALIGN64(ps_codec->i4_ht); 21210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 21220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar SCALING_MAT_SIZE(scaling_mat_size); 21234d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar max_tile_cols = (wd + MIN_TILE_WD - 1) / MIN_TILE_WD; 21244d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar max_tile_rows = (ht + MIN_TILE_HT - 1) / MIN_TILE_HT; 21250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 21260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps_ref = ps_codec->ps_pps_base + pps_id_ref; 21270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps = ps_codec->ps_pps_base + pps_id; 21280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 21290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pi2_scaling_mat_backup = ps_pps->pi2_scaling_mat; 21300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_tile_backup = ps_pps->ps_tile; 21310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 21320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar memcpy(ps_pps, ps_pps_ref, sizeof(pps_t)); 21330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->pi2_scaling_mat = pi2_scaling_mat_backup; 21340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->ps_tile = ps_tile_backup; 21350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar memcpy(ps_pps->pi2_scaling_mat, ps_pps_ref->pi2_scaling_mat, scaling_mat_size * sizeof(WORD16)); 21360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar memcpy(ps_pps->ps_tile, ps_pps_ref->ps_tile, max_tile_cols * max_tile_rows * sizeof(tile_t)); 21370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 21380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps->i1_pps_valid = 1; 21390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 21400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_parse.ps_pps = ps_pps; 21410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 21420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 21430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2144613c712d196d00b6aec71d0b316427ab3e947012Harish MahendrakarIHEVCD_ERROR_T ihevcd_parse_buffering_period_sei(codec_t *ps_codec, 2145613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar sps_t *ps_sps) 2146613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar{ 2147613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar parse_ctxt_t *ps_parse = &ps_codec->s_parse; 2148613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar bitstrm_t *ps_bitstrm = &ps_parse->s_bitstrm; 2149613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar UWORD32 value; 2150613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar vui_t *ps_vui; 2151613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar buf_period_sei_params_t *ps_buf_period_sei_params; 2152613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar UWORD32 i; 2153613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar hrd_params_t *ps_vui_hdr; 2154613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar UWORD32 u4_cpb_cnt; 2155613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2156613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_vui = &ps_sps->s_vui_parameters; 2157613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_vui_hdr = &ps_vui->s_vui_hrd_parameters; 2158613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2159613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_buf_period_sei_params = &ps_parse->s_sei_params.s_buf_period_sei_params; 2160613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2161613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_parse->s_sei_params.i1_buf_period_params_present_flag = 1; 2162613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2163613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar UEV_PARSE("bp_seq_parameter_set_id", value, ps_bitstrm); 2164613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_buf_period_sei_params->u1_bp_seq_parameter_set_id = value; 2165613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2166613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar if(!ps_vui_hdr->u1_sub_pic_cpb_params_present_flag) 2167613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2168613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("irap_cpb_params_present_flag", value, ps_bitstrm, 1); 2169613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_buf_period_sei_params->u1_rap_cpb_params_present_flag = value; 2170613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2171613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2172613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar if(ps_buf_period_sei_params->u1_rap_cpb_params_present_flag) 2173613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2174613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("cpb_delay_offset", 2175613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar value, 2176613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_bitstrm, 2177613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar (ps_vui_hdr->u1_au_cpb_removal_delay_length_minus1 2178613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar + 1)); 2179613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_buf_period_sei_params->u4_cpb_delay_offset = value; 2180613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2181613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("dpb_delay_offset", 2182613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar value, 2183613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_bitstrm, 2184613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar (ps_vui_hdr->u1_dpb_output_delay_length_minus1 2185613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar + 1)); 2186613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_buf_period_sei_params->u4_dpb_delay_offset = value; 2187613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2188613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar else 2189613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2190613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_buf_period_sei_params->u4_cpb_delay_offset = 0; 2191613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_buf_period_sei_params->u4_dpb_delay_offset = 0; 2192613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2193613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2194613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("concatenation_flag", value, ps_bitstrm, 1); 2195613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_buf_period_sei_params->u1_concatenation_flag = value; 2196613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2197613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("au_cpb_removal_delay_delta_minus1", 2198613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar value, 2199613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_bitstrm, 2200613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar (ps_vui_hdr->u1_au_cpb_removal_delay_length_minus1 2201613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar + 1)); 2202613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_buf_period_sei_params->u4_au_cpb_removal_delay_delta_minus1 = value; 2203613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2204613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar if(ps_vui_hdr->u1_nal_hrd_parameters_present_flag) 2205613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2206613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u4_cpb_cnt = ps_vui_hdr->au1_cpb_cnt_minus1[0]; 2207613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2208613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar for(i = 0; i <= u4_cpb_cnt; i++) 2209613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2210613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("nal_initial_cpb_removal_delay[i]", 2211613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar value, 2212613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_bitstrm, 2213613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar (ps_vui_hdr->u1_initial_cpb_removal_delay_length_minus1 2214613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar + 1)); 2215613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_buf_period_sei_params->au4_nal_initial_cpb_removal_delay[i] = 2216613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar value; 2217613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2218613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("nal_initial_cpb_removal_delay_offset", 2219613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar value, 2220613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_bitstrm, 2221613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar (ps_vui_hdr->u1_initial_cpb_removal_delay_length_minus1 2222613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar + 1)); 2223613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_buf_period_sei_params->au4_nal_initial_cpb_removal_delay_offset[i] = 2224613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar value; 2225613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2226613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar if(ps_vui_hdr->u1_sub_pic_cpb_params_present_flag 2227613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar || ps_buf_period_sei_params->u1_rap_cpb_params_present_flag) 2228613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2229613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("nal_initial_alt_cpb_removal_delay[i]", 2230613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar value, 2231613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_bitstrm, 2232613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar (ps_vui_hdr->u1_initial_cpb_removal_delay_length_minus1 2233613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar + 1)); 2234613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_buf_period_sei_params->au4_nal_initial_alt_cpb_removal_delay[i] = 2235613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar value; 2236613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2237613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("nal_initial_alt_cpb_removal_delay_offset", 2238613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar value, 2239613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_bitstrm, 2240613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar (ps_vui_hdr->u1_initial_cpb_removal_delay_length_minus1 2241613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar + 1)); 2242613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_buf_period_sei_params->au4_nal_initial_alt_cpb_removal_delay_offset[i] = 2243613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar value; 2244613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2245613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2246613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2247613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2248613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar if(ps_vui_hdr->u1_vcl_hrd_parameters_present_flag) 2249613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2250613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u4_cpb_cnt = ps_vui_hdr->au1_cpb_cnt_minus1[0]; 2251613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2252613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar for(i = 0; i <= u4_cpb_cnt; i++) 2253613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2254613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("vcl_initial_cpb_removal_delay[i]", 2255613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar value, 2256613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_bitstrm, 2257613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar (ps_vui_hdr->u1_initial_cpb_removal_delay_length_minus1 2258613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar + 1)); 2259613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_buf_period_sei_params->au4_vcl_initial_cpb_removal_delay[i] = 2260613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar value; 2261613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2262613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("vcl_initial_cpb_removal_delay_offset", 2263613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar value, 2264613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_bitstrm, 2265613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar (ps_vui_hdr->u1_initial_cpb_removal_delay_length_minus1 2266613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar + 1)); 2267613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_buf_period_sei_params->au4_vcl_initial_cpb_removal_delay_offset[i] = 2268613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar value; 2269613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2270613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar if(ps_vui_hdr->u1_sub_pic_cpb_params_present_flag 2271613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar || ps_buf_period_sei_params->u1_rap_cpb_params_present_flag) 2272613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2273613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("vcl_initial_alt_cpb_removal_delay[i]", 2274613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar value, 2275613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_bitstrm, 2276613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar (ps_vui_hdr->u1_initial_cpb_removal_delay_length_minus1 2277613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar + 1)); 2278613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_buf_period_sei_params->au4_vcl_initial_alt_cpb_removal_delay[i] = 2279613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar value; 2280613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2281613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("vcl_initial_alt_cpb_removal_delay_offset", 2282613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar value, 2283613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_bitstrm, 2284613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar (ps_vui_hdr->u1_initial_cpb_removal_delay_length_minus1 2285613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar + 1)); 2286613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_buf_period_sei_params->au4_vcl_initial_alt_cpb_removal_delay_offset[i] = 2287613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar value; 2288613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2289613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2290613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2291613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2292613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar return (IHEVCD_ERROR_T)IHEVCD_SUCCESS; 2293613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar} 2294613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2295613c712d196d00b6aec71d0b316427ab3e947012Harish MahendrakarIHEVCD_ERROR_T ihevcd_parse_pic_timing_sei(codec_t *ps_codec, sps_t *ps_sps) 2296613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar{ 2297613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar parse_ctxt_t *ps_parse = &ps_codec->s_parse; 2298613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar bitstrm_t *ps_bitstrm = &ps_parse->s_bitstrm; 2299613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar UWORD32 value; 2300613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar vui_t *ps_vui; 2301613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar UWORD32 i; 2302613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar hrd_params_t *ps_vui_hdr; 2303613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar UWORD32 u4_cpb_dpb_delays_present_flag = 0; 2304613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar pic_timing_sei_params_t *ps_pic_timing; 2305613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2306613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_pic_timing = &ps_parse->s_sei_params.s_pic_timing_sei_params; 2307613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_vui = &ps_sps->s_vui_parameters; 2308613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_vui_hdr = &ps_vui->s_vui_hrd_parameters; 2309613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_parse->s_sei_params.i1_pic_timing_params_present_flag = 1; 2310613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar if(ps_vui->u1_frame_field_info_present_flag) 2311613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2312613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("pic_struct", value, ps_bitstrm, 4); 2313613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_pic_timing->u4_pic_struct = value; 2314613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2315613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("source_scan_type", value, ps_bitstrm, 2); 2316613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_pic_timing->u4_source_scan_type = value; 2317613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2318613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("duplicate_flag", value, ps_bitstrm, 1); 2319613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_pic_timing->u1_duplicate_flag = value; 2320613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2321613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2322613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar if(ps_vui_hdr->u1_nal_hrd_parameters_present_flag 2323613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar || ps_vui_hdr->u1_vcl_hrd_parameters_present_flag) 2324613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2325613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u4_cpb_dpb_delays_present_flag = 1; 2326613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2327613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar else 2328613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2329613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u4_cpb_dpb_delays_present_flag = 0; 2330613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2331613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2332613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar if(u4_cpb_dpb_delays_present_flag) 2333613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2334613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("au_cpb_removal_delay_minus1", value, ps_bitstrm, 2335613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar (ps_vui_hdr->u1_au_cpb_removal_delay_length_minus1 + 1)); 2336613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_pic_timing->u4_au_cpb_removal_delay_minus1 = value; 2337613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2338613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("pic_dpb_output_delay", value, ps_bitstrm, 2339613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar (ps_vui_hdr->u1_dpb_output_delay_length_minus1 + 1)); 2340613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_pic_timing->u4_pic_dpb_output_delay = value; 23410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2342613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar if(ps_vui_hdr->u1_sub_pic_cpb_params_present_flag) 2343613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2344613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("pic_dpb_output_du_delay", value, ps_bitstrm, 2345613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar (ps_vui_hdr->u1_dpb_output_delay_du_length_minus1 + 1)); 2346613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_pic_timing->u4_pic_dpb_output_du_delay = value; 2347613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2348613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2349613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar if(ps_vui_hdr->u1_sub_pic_cpb_params_present_flag 2350613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar && ps_vui_hdr->u1_sub_pic_cpb_params_in_pic_timing_sei_flag) 2351613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2352a963ba6ac200ee4222ba4faa7137a69144ba668aNaveen Kumar P UWORD32 num_units_minus1; 2353a963ba6ac200ee4222ba4faa7137a69144ba668aNaveen Kumar P UWORD32 array_size; 2354a963ba6ac200ee4222ba4faa7137a69144ba668aNaveen Kumar P 2355613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar UEV_PARSE("num_decoding_units_minus1", value, ps_bitstrm); 2356613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_pic_timing->u4_num_decoding_units_minus1 = value; 2357613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2358a963ba6ac200ee4222ba4faa7137a69144ba668aNaveen Kumar P num_units_minus1 = ps_pic_timing->u4_num_decoding_units_minus1; 2359a963ba6ac200ee4222ba4faa7137a69144ba668aNaveen Kumar P array_size = (sizeof(ps_pic_timing->au4_num_nalus_in_du_minus1) 2360a963ba6ac200ee4222ba4faa7137a69144ba668aNaveen Kumar P / sizeof(ps_pic_timing->au4_num_nalus_in_du_minus1[0])); 2361a963ba6ac200ee4222ba4faa7137a69144ba668aNaveen Kumar P num_units_minus1 = CLIP3(num_units_minus1, 0,(array_size - 1)); 2362a963ba6ac200ee4222ba4faa7137a69144ba668aNaveen Kumar P ps_pic_timing->u4_num_decoding_units_minus1 = num_units_minus1; 2363a963ba6ac200ee4222ba4faa7137a69144ba668aNaveen Kumar P 2364613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("du_common_cpb_removal_delay_flag", value, ps_bitstrm, 1); 2365613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_pic_timing->u1_du_common_cpb_removal_delay_flag = value; 2366613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2367613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar if(ps_pic_timing->u1_du_common_cpb_removal_delay_flag) 2368613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2369613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("du_common_cpb_removal_delay_increment_minus1", 2370613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar value, 2371613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_bitstrm, 2372613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar (ps_vui_hdr->u1_du_cpb_removal_delay_increment_length_minus1 2373613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar + 1)); 2374613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_pic_timing->u4_du_common_cpb_removal_delay_increment_minus1 = 2375613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar value; 2376613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2377613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2378613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar for(i = 0; i <= ps_pic_timing->u4_num_decoding_units_minus1; i++) 2379613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2380613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar UEV_PARSE("num_nalus_in_du_minus1", value, ps_bitstrm); 2381613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_pic_timing->au4_num_nalus_in_du_minus1[i] = value; 2382613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2383613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar if((!ps_pic_timing->u1_du_common_cpb_removal_delay_flag) 2384613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar && (i < ps_pic_timing->u4_num_decoding_units_minus1)) 2385613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2386613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("du_common_cpb_removal_delay_increment_minus1", 2387613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar value, 2388613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_bitstrm, 2389613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar (ps_vui_hdr->u1_du_cpb_removal_delay_increment_length_minus1 2390613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar + 1)); 2391613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_pic_timing->au4_du_cpb_removal_delay_increment_minus1[i] = 2392613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar value; 2393613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2394613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2395613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2396613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2397613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2398613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar return (IHEVCD_ERROR_T)IHEVCD_SUCCESS; 2399613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar} 2400613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2401613c712d196d00b6aec71d0b316427ab3e947012Harish MahendrakarIHEVCD_ERROR_T ihevcd_parse_time_code_sei(codec_t *ps_codec) 2402613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar{ 2403613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar parse_ctxt_t *ps_parse = &ps_codec->s_parse; 2404613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar bitstrm_t *ps_bitstrm = &ps_parse->s_bitstrm; 2405613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar UWORD32 value; 2406613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar time_code_t *ps_time_code; 2407613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar WORD32 i; 2408613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2409613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_parse->s_sei_params.i1_time_code_present_flag = 1; 2410613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_time_code = &ps_parse->s_sei_params.s_time_code; 2411613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2412613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("num_clock_ts", value, ps_bitstrm, 2); 2413613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_time_code->u1_num_clock_ts = value; 2414613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2415613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar for(i = 0; i < ps_time_code->u1_num_clock_ts; i++) 2416613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2417613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("clock_timestamp_flag[i]", value, ps_bitstrm, 1); 2418613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_time_code->au1_clock_timestamp_flag[i] = value; 2419613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2420613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar if(ps_time_code->au1_clock_timestamp_flag[i]) 2421613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2422613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("units_field_based_flag[i]", value, ps_bitstrm, 1); 2423613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_time_code->au1_units_field_based_flag[i] = value; 2424613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2425613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("counting_type[i]", value, ps_bitstrm, 5); 2426613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_time_code->au1_counting_type[i] = value; 2427613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2428613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("full_timestamp_flag[i]", value, ps_bitstrm, 1); 2429613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_time_code->au1_full_timestamp_flag[i] = value; 2430613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2431613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("discontinuity_flag[i]", value, ps_bitstrm, 1); 2432613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_time_code->au1_discontinuity_flag[i] = value; 2433613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2434613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("cnt_dropped_flag[i]", value, ps_bitstrm, 1); 2435613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_time_code->au1_cnt_dropped_flag[i] = value; 2436613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2437613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("n_frames[i]", value, ps_bitstrm, 9); 2438613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_time_code->au2_n_frames[i] = value; 2439613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2440613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar if(ps_time_code->au1_full_timestamp_flag[i]) 2441613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2442613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("seconds_value[i]", value, ps_bitstrm, 6); 2443613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_time_code->au1_seconds_value[i] = value; 2444613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2445613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("minutes_value[i]", value, ps_bitstrm, 6); 2446613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_time_code->au1_minutes_value[i] = value; 2447613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2448613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("hours_value[i]", value, ps_bitstrm, 5); 2449613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_time_code->au1_hours_value[i] = value; 2450613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2451613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar else 2452613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2453613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("seconds_flag[i]", value, ps_bitstrm, 1); 2454613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_time_code->au1_seconds_flag[i] = value; 2455613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2456613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar if(ps_time_code->au1_seconds_flag[i]) 2457613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2458613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("seconds_value[i]", value, ps_bitstrm, 6); 2459613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_time_code->au1_seconds_value[i] = value; 2460613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2461613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("minutes_flag[i]", value, ps_bitstrm, 1); 2462613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_time_code->au1_minutes_flag[i] = value; 2463613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2464613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar if(ps_time_code->au1_minutes_flag[i]) 2465613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2466613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("minutes_value[i]", value, ps_bitstrm, 6); 2467613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_time_code->au1_minutes_value[i] = value; 2468613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2469613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("hours_flag[i]", value, ps_bitstrm, 1); 2470613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_time_code->au1_hours_flag[i] = value; 2471613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2472613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar if(ps_time_code->au1_hours_flag[i]) 2473613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2474613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("hours_value[i]", value, ps_bitstrm, 5); 2475613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_time_code->au1_hours_value[i] = value; 2476613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2477613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2478613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2479613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2480613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2481613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("time_offset_length[i]", value, ps_bitstrm, 5); 2482613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_time_code->au1_time_offset_length[i] = value; 2483613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2484613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar if(ps_time_code->au1_time_offset_length[i] > 0) 2485613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2486613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("time_offset_value[i]", value, ps_bitstrm, 2487613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_time_code->au1_time_offset_length[i]); 2488613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_time_code->au1_time_offset_value[i] = value; 2489613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2490613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar else 2491613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2492613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_time_code->au1_time_offset_value[i] = 0; 2493613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2494613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2495613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2496613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2497613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar return (IHEVCD_ERROR_T)IHEVCD_SUCCESS; 2498613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar} 2499613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2500613c712d196d00b6aec71d0b316427ab3e947012Harish MahendrakarIHEVCD_ERROR_T ihevcd_parse_mastering_disp_params_sei(codec_t *ps_codec) 2501613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar{ 2502613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar parse_ctxt_t *ps_parse = &ps_codec->s_parse; 2503613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar bitstrm_t *ps_bitstrm = &ps_parse->s_bitstrm; 2504613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar UWORD32 value; 2505613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar mastering_dis_col_vol_sei_params_t *ps_mastering_dis_col_vol; 2506613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar WORD32 i; 2507613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2508613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_parse->s_sei_params.i4_sei_mastering_disp_colour_vol_params_present_flags = 1; 2509613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2510613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_mastering_dis_col_vol = &ps_parse->s_sei_params.s_mastering_dis_col_vol_sei_params; 2511613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2512613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar for(i = 0; i < 3; i++) 2513613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2514613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("display_primaries_x[c]", value, ps_bitstrm, 16); 2515613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_mastering_dis_col_vol->au2_display_primaries_x[i] = value; 2516613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2517613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("display_primaries_y[c]", value, ps_bitstrm, 16); 2518613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_mastering_dis_col_vol->au2_display_primaries_y[i] = value; 2519613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2520613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2521613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("white_point_x", value, ps_bitstrm, 16); 2522613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_mastering_dis_col_vol->u2_white_point_x = value; 2523613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2524613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("white_point_y", value, ps_bitstrm, 16); 2525613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_mastering_dis_col_vol->u2_white_point_y = value; 2526613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2527613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("max_display_mastering_luminance", value, ps_bitstrm, 32); 2528613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_mastering_dis_col_vol->u4_max_display_mastering_luminance = value; 2529613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2530613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("min_display_mastering_luminance", value, ps_bitstrm, 32); 2531613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_mastering_dis_col_vol->u4_min_display_mastering_luminance = value; 2532613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2533613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar return (IHEVCD_ERROR_T)IHEVCD_SUCCESS; 2534613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar} 2535613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2536613c712d196d00b6aec71d0b316427ab3e947012Harish MahendrakarIHEVCD_ERROR_T ihevcd_parse_user_data_registered_itu_t_t35(codec_t *ps_codec, 2537613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar UWORD32 u4_payload_size) 2538613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar{ 2539613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar parse_ctxt_t *ps_parse = &ps_codec->s_parse; 2540613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar bitstrm_t *ps_bitstrm = &ps_parse->s_bitstrm; 2541613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar UWORD32 value; 2542613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar user_data_registered_itu_t_t35_t *ps_user_data_registered_itu_t_t35; 2543613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar UWORD32 i; 2544613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar UWORD32 j = 0; 2545613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2546613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_parse->s_sei_params.i1_user_data_registered_present_flag = 1; 2547613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_user_data_registered_itu_t_t35 = 2548613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar &ps_parse->s_sei_params.as_user_data_registered_itu_t_t35[ps_parse->s_sei_params.i4_sei_user_data_cnt]; 2549613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_parse->s_sei_params.i4_sei_user_data_cnt++; 2550613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2551613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_user_data_registered_itu_t_t35->i4_payload_size = u4_payload_size; 2552613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2553613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar if(u4_payload_size > MAX_USERDATA_PAYLOAD) 2554613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2555613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u4_payload_size = MAX_USERDATA_PAYLOAD; 2556613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2557613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2558613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_user_data_registered_itu_t_t35->i4_valid_payload_size = u4_payload_size; 2559613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2560613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("itu_t_t35_country_code", value, ps_bitstrm, 8); 2561613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_user_data_registered_itu_t_t35->u1_itu_t_t35_country_code = value; 2562613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2563613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar if(0xFF != ps_user_data_registered_itu_t_t35->u1_itu_t_t35_country_code) 2564613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2565613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar i = 1; 2566613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2567613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar else 2568613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2569613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("itu_t_t35_country_code_extension_byte", value, ps_bitstrm, 2570613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 8); 2571613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_user_data_registered_itu_t_t35->u1_itu_t_t35_country_code_extension_byte = 2572613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar value; 2573613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2574613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar i = 2; 2575613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2576613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2577613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar do 2578613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2579613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("itu_t_t35_payload_byte", value, ps_bitstrm, 8); 2580613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_user_data_registered_itu_t_t35->u1_itu_t_t35_payload_byte[j++] = 2581613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar value; 2582613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2583613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar i++; 2584613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar }while(i < u4_payload_size); 2585613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2586613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar return (IHEVCD_ERROR_T)IHEVCD_SUCCESS; 2587613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar} 2588613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2589613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakarvoid ihevcd_parse_sei_payload(codec_t *ps_codec, 2590613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar UWORD32 u4_payload_type, 2591613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar UWORD32 u4_payload_size, 2592613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar WORD8 i1_nal_type) 2593613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar{ 2594613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar parse_ctxt_t *ps_parse = &ps_codec->s_parse; 2595613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar bitstrm_t *ps_bitstrm = &ps_parse->s_bitstrm; 2596613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar WORD32 payload_bits_remaining = 0; 2597613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar sps_t *ps_sps; 2598613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2599613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar UWORD32 i; 2600613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2601613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar for(i = 0; i < MAX_SPS_CNT; i++) 2602613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2603613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_sps = ps_codec->ps_sps_base + i; 2604613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar if(ps_sps->i1_sps_valid) 2605613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2606613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar break; 2607613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2608613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2609613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar if(NULL == ps_sps) 2610613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2611613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar return; 2612613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2613613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2614613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar if(NAL_PREFIX_SEI == i1_nal_type) 2615613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2616613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar switch(u4_payload_type) 2617613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2618613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar case SEI_BUFFERING_PERIOD: 2619613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_parse->s_sei_params.i1_sei_parameters_present_flag = 1; 2620613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ihevcd_parse_buffering_period_sei(ps_codec, ps_sps); 2621613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar break; 2622613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2623613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar case SEI_PICTURE_TIMING: 2624613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_parse->s_sei_params.i1_sei_parameters_present_flag = 1; 2625613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ihevcd_parse_pic_timing_sei(ps_codec, ps_sps); 2626613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar break; 2627613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2628613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar case SEI_TIME_CODE: 2629613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_parse->s_sei_params.i1_sei_parameters_present_flag = 1; 2630613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ihevcd_parse_time_code_sei(ps_codec); 2631613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar break; 2632613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2633613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar case SEI_MASTERING_DISPLAY_COLOUR_VOLUME: 2634613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_parse->s_sei_params.i4_sei_mastering_disp_colour_vol_params_present_flags = 1; 2635613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ihevcd_parse_mastering_disp_params_sei(ps_codec); 2636613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar break; 2637613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2638613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar case SEI_USER_DATA_REGISTERED_ITU_T_T35: 2639613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_parse->s_sei_params.i1_sei_parameters_present_flag = 1; 26409f0fb67540d2259e4930d9bd5f1a1a6fb95af862Naveen Kumar P if(ps_parse->s_sei_params.i4_sei_user_data_cnt >= USER_DATA_MAX) 26419f0fb67540d2259e4930d9bd5f1a1a6fb95af862Naveen Kumar P { 26429f0fb67540d2259e4930d9bd5f1a1a6fb95af862Naveen Kumar P for(i = 0; i < u4_payload_size / 4; i++) 26439f0fb67540d2259e4930d9bd5f1a1a6fb95af862Naveen Kumar P { 26449f0fb67540d2259e4930d9bd5f1a1a6fb95af862Naveen Kumar P ihevcd_bits_flush(ps_bitstrm, 4 * 8); 26459f0fb67540d2259e4930d9bd5f1a1a6fb95af862Naveen Kumar P } 26469f0fb67540d2259e4930d9bd5f1a1a6fb95af862Naveen Kumar P 26479f0fb67540d2259e4930d9bd5f1a1a6fb95af862Naveen Kumar P ihevcd_bits_flush(ps_bitstrm, (u4_payload_size - i * 4) * 8); 26489f0fb67540d2259e4930d9bd5f1a1a6fb95af862Naveen Kumar P } 26499f0fb67540d2259e4930d9bd5f1a1a6fb95af862Naveen Kumar P else 26509f0fb67540d2259e4930d9bd5f1a1a6fb95af862Naveen Kumar P { 26519f0fb67540d2259e4930d9bd5f1a1a6fb95af862Naveen Kumar P ihevcd_parse_user_data_registered_itu_t_t35(ps_codec, 26529f0fb67540d2259e4930d9bd5f1a1a6fb95af862Naveen Kumar P u4_payload_size); 26539f0fb67540d2259e4930d9bd5f1a1a6fb95af862Naveen Kumar P } 2654613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar break; 2655613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2656613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar default: 2657613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar for(i = 0; i < u4_payload_size; i++) 2658613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2659613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ihevcd_bits_flush(ps_bitstrm, 8); 2660613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2661613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar break; 2662613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2663613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2664613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar else /* NAL_SUFFIX_SEI */ 2665613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2666613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar switch(u4_payload_type) 2667613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2668613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar case SEI_USER_DATA_REGISTERED_ITU_T_T35: 2669613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_parse->s_sei_params.i1_sei_parameters_present_flag = 1; 26709f0fb67540d2259e4930d9bd5f1a1a6fb95af862Naveen Kumar P if(ps_parse->s_sei_params.i4_sei_user_data_cnt >= USER_DATA_MAX) 26719f0fb67540d2259e4930d9bd5f1a1a6fb95af862Naveen Kumar P { 26729f0fb67540d2259e4930d9bd5f1a1a6fb95af862Naveen Kumar P for(i = 0; i < u4_payload_size / 4; i++) 26739f0fb67540d2259e4930d9bd5f1a1a6fb95af862Naveen Kumar P { 26749f0fb67540d2259e4930d9bd5f1a1a6fb95af862Naveen Kumar P ihevcd_bits_flush(ps_bitstrm, 4 * 8); 26759f0fb67540d2259e4930d9bd5f1a1a6fb95af862Naveen Kumar P } 26769f0fb67540d2259e4930d9bd5f1a1a6fb95af862Naveen Kumar P 26779f0fb67540d2259e4930d9bd5f1a1a6fb95af862Naveen Kumar P ihevcd_bits_flush(ps_bitstrm, (u4_payload_size - i * 4) * 8); 26789f0fb67540d2259e4930d9bd5f1a1a6fb95af862Naveen Kumar P } 26799f0fb67540d2259e4930d9bd5f1a1a6fb95af862Naveen Kumar P else 26809f0fb67540d2259e4930d9bd5f1a1a6fb95af862Naveen Kumar P { 26819f0fb67540d2259e4930d9bd5f1a1a6fb95af862Naveen Kumar P ihevcd_parse_user_data_registered_itu_t_t35(ps_codec, 26829f0fb67540d2259e4930d9bd5f1a1a6fb95af862Naveen Kumar P u4_payload_size); 26839f0fb67540d2259e4930d9bd5f1a1a6fb95af862Naveen Kumar P } 2684613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar break; 2685613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2686613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar default: 2687613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar for(i = 0; i < u4_payload_size; i++) 2688613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2689613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ihevcd_bits_flush(ps_bitstrm, 8); 2690613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2691613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar break; 2692613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2693613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2694613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2695613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar /** 2696613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar * By definition the underlying bitstream terminates in a byte-aligned manner. 2697613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar * 1. Extract all bar the last MIN(bitsremaining,nine) bits as reserved_payload_extension_data 2698613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar * 2. Examine the final 8 bits to determine the payload_bit_equal_to_one marker 2699613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar * 3. Extract the remainingreserved_payload_extension_data bits. 2700613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar * 2701613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar * If there are fewer than 9 bits available, extract them. 2702613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar */ 2703613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2704613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar payload_bits_remaining = ihevcd_bits_num_bits_remaining(ps_bitstrm); 2705613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar if(payload_bits_remaining) /* more_data_in_payload() */ 2706613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2707613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar WORD32 final_bits; 2708613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar WORD32 final_payload_bits = 0; 2709613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar WORD32 mask = 0xFF; 2710613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar UWORD32 u4_dummy; 2711613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar UWORD32 u4_reserved_payload_extension_data; 2712613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar UNUSED(u4_dummy); 2713613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar UNUSED(u4_reserved_payload_extension_data); 2714613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2715613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar while(payload_bits_remaining > 9) 2716613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2717613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("reserved_payload_extension_data", 2718613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u4_reserved_payload_extension_data, ps_bitstrm, 1); 2719613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar payload_bits_remaining--; 2720613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2721613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2722613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar final_bits = ihevcd_bits_nxt(ps_bitstrm, payload_bits_remaining); 2723613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2724613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar while(final_bits & (mask >> final_payload_bits)) 2725613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2726613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar final_payload_bits++; 2727613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar continue; 2728613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2729613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2730613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar while(payload_bits_remaining > (9 - final_payload_bits)) 2731613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2732613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("reserved_payload_extension_data", 2733613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u4_reserved_payload_extension_data, ps_bitstrm, 1); 2734613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar payload_bits_remaining--; 2735613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2736613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2737613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("payload_bit_equal_to_one", u4_dummy, ps_bitstrm, 1); 2738613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar payload_bits_remaining--; 2739613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar while(payload_bits_remaining) 2740613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2741613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("payload_bit_equal_to_zero", u4_dummy, ps_bitstrm, 1); 2742613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar payload_bits_remaining--; 2743613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2744613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2745613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2746613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar return; 2747613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar} 2748613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2749613c712d196d00b6aec71d0b316427ab3e947012Harish MahendrakarIHEVCD_ERROR_T ihevcd_read_rbsp_trailing_bits(codec_t *ps_codec, 2750613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar UWORD32 u4_bits_left) 2751613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar{ 2752613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar parse_ctxt_t *ps_parse = &ps_codec->s_parse; 2753613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar UWORD32 value; 2754613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar WORD32 cnt = 0; 2755613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("rbsp_stop_one_bit", value, &ps_parse->s_bitstrm, 1); 2756613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u4_bits_left--; 2757613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar if(value != 1) 2758613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2759613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar return (IHEVCD_ERROR_T)IHEVCD_FAIL; 2760613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2761613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar while(u4_bits_left) 2762613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2763613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("rbsp_alignment_zero_bit", value, &ps_parse->s_bitstrm, 1); 2764613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u4_bits_left--; 2765613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar cnt++; 2766613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2767613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ASSERT(cnt < 8); 2768613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2769613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar return (IHEVCD_ERROR_T)IHEVCD_SUCCESS; 2770613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar} 27710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 27720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 27730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 27740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 27750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Parses SEI (Supplemental Enhancement Information) 27760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 27770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description: 27780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Parses SEI (Supplemental Enhancement Information) as per Section: 7.3.7 27790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 27800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_codec 27810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Pointer to codec context 27820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 27830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns Error code from IHEVCD_ERROR_T 27840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 27850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 27860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 27870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 27880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 27890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 2790613c712d196d00b6aec71d0b316427ab3e947012Harish MahendrakarIHEVCD_ERROR_T ihevcd_parse_sei(codec_t *ps_codec, nal_header_t *ps_nal) 27910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 27920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS; 2793613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar parse_ctxt_t *ps_parse = &ps_codec->s_parse; 2794613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar UWORD32 u4_payload_type = 0, u4_last_payload_type_byte = 0; 2795613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar UWORD32 u4_payload_size = 0, u4_last_payload_size_byte = 0; 2796613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar UWORD32 value; 2797613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar bitstrm_t *ps_bitstrm = &ps_parse->s_bitstrm; 2798613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar UWORD32 u4_bits_left; 2799613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2800613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u4_bits_left = ihevcd_bits_num_bits_remaining(ps_bitstrm); 2801613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2802613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar while(u4_bits_left > 8) 2803613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2804613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar while(ihevcd_bits_nxt(ps_bitstrm, 8) == 0xFF) 2805613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2806613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ihevcd_bits_flush(ps_bitstrm, 8); /* equal to 0xFF */ 2807613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u4_payload_type += 255; 2808613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2809613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2810613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("last_payload_type_byte", value, ps_bitstrm, 8); 2811613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u4_last_payload_type_byte = value; 2812613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2813613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u4_payload_type += u4_last_payload_type_byte; 2814613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2815613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar while(ihevcd_bits_nxt(ps_bitstrm, 8) == 0xFF) 2816613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2817613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ihevcd_bits_flush(ps_bitstrm, 8); /* equal to 0xFF */ 2818613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u4_payload_size += 255; 2819613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2820613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2821613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar BITS_PARSE("last_payload_size_byte", value, ps_bitstrm, 8); 2822613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u4_last_payload_size_byte = value; 2823613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2824613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u4_payload_size += u4_last_payload_size_byte; 2825613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u4_bits_left = ihevcd_bits_num_bits_remaining(ps_bitstrm); 2826613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u4_payload_size = MIN(u4_payload_size, u4_bits_left / 8); 2827613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ihevcd_parse_sei_payload(ps_codec, u4_payload_type, u4_payload_size, 2828613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_nal->i1_nal_unit_type); 2829613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2830613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar /* Calculate the bits left in the current payload */ 2831613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u4_bits_left = ihevcd_bits_num_bits_remaining(ps_bitstrm); 2832613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2833613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2834613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar // read rbsp_trailing_bits 2835613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar if(u4_bits_left) 2836613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 2837613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ihevcd_read_rbsp_trailing_bits(ps_codec, u4_bits_left); 2838613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2839613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 28400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return ret; 28410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 28420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 28430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 28440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 28450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 28460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 28470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Parses Access unit delimiter 28480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 28490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description: 28500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Parses Access unit delimiter as per section Section: 7.3.2.5 28510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 28520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_codec 28530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Pointer to codec context 28540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 28550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns Error code from IHEVCD_ERROR_T 28560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 28570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 28580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 28590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 28600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 28610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 28620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWORD32 ihevcd_parse_aud(codec_t *ps_codec) 28630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 28640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS; 28650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UNUSED(ps_codec); 28660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return ret; 28670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 28680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 28690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWORD32 ihevcd_extend_sign_bit(WORD32 value, WORD32 num_bits) 28700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 28710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ret_value = value; 28720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(value >> (num_bits - 1)) 28730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 28740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ret_value |= (0xFFFFFFFF << num_bits); 28750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 28760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return ret_value; 28770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 28780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 28790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 28800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 28810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 28820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 28830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Calculate POC of the current slice 28840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 28850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description: 28860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Calculates the current POC using the previous POC lsb and previous POC msb 28870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 28880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_codec 28890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Pointer to codec context 28900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 28910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] i1_pic_order_cnt_lsb 28920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Current POC lsb 28930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 28940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns Current absolute POC 28950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 28960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 28970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 28980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 28990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 29000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 29010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 29020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWORD32 ihevcd_calc_poc(codec_t *ps_codec, nal_header_t *ps_nal, WORD8 i1_log2_max_poc_lsb, WORD32 i2_poc_lsb) 29030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 29040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 i4_abs_poc, i4_poc_msb; 29050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 max_poc_lsb; 29060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD8 i1_nal_unit_type = ps_nal->i1_nal_unit_type; 29070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar max_poc_lsb = (1 << i1_log2_max_poc_lsb); 29080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 29090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((!ps_codec->i4_first_pic_done) && (!ps_codec->i4_pic_present)) 29100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_prev_poc_msb = -2 * max_poc_lsb; 29110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 29120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(NAL_IDR_N_LP == i1_nal_unit_type 29130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar || NAL_IDR_W_LP == i1_nal_unit_type 29140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar || NAL_BLA_N_LP == i1_nal_unit_type 29150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar || NAL_BLA_W_DLP == i1_nal_unit_type 29160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar || NAL_BLA_W_LP == i1_nal_unit_type 29170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar || (NAL_CRA == i1_nal_unit_type && !ps_codec->i4_first_pic_done)) 29180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 29190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar i4_poc_msb = ps_codec->i4_prev_poc_msb + 2 * max_poc_lsb; 29200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_prev_poc_lsb = 0; 29210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_max_prev_poc_lsb = 0; 29220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// ps_codec->i4_prev_poc_msb = 0; 29230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 29240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 29250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 29260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 29270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((i2_poc_lsb < ps_codec->i4_prev_poc_lsb) 29280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar && ((ps_codec->i4_prev_poc_lsb - i2_poc_lsb) >= max_poc_lsb / 2)) 29290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 29300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar i4_poc_msb = ps_codec->i4_prev_poc_msb + max_poc_lsb; 29310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 29320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else if((i2_poc_lsb > ps_codec->i4_prev_poc_lsb) 29330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar && ((i2_poc_lsb - ps_codec->i4_prev_poc_lsb) > max_poc_lsb / 2)) 29340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 29350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar i4_poc_msb = ps_codec->i4_prev_poc_msb - max_poc_lsb; 29360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 29370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 29380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 29390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar i4_poc_msb = ps_codec->i4_prev_poc_msb; 29400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 29410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 29420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 29430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 29440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 29450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar i4_abs_poc = i4_poc_msb + i2_poc_lsb; 29460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_max_prev_poc_lsb = MAX(ps_codec->i4_max_prev_poc_lsb, i2_poc_lsb); 29470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 29480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 29490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 is_reference_nal = ((i1_nal_unit_type <= NAL_RSV_VCL_R15) && (i1_nal_unit_type % 2 != 0)) || ((i1_nal_unit_type >= NAL_BLA_W_LP) && (i1_nal_unit_type <= NAL_RSV_RAP_VCL23)); 29500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 update_prev_poc = ((is_reference_nal) && ((i1_nal_unit_type < NAL_RADL_N) || (i1_nal_unit_type > NAL_RASL_R))); 29510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 29520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((0 == ps_nal->i1_nuh_temporal_id) && 29530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (update_prev_poc)) 29540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 29550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_prev_poc_lsb = i2_poc_lsb; 29560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_prev_poc_msb = i4_poc_msb; 29570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 29580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 29590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 29600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return i4_abs_poc; 29610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 29620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 29630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 29640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevcd_copy_slice_hdr(codec_t *ps_codec, WORD32 slice_idx, WORD32 slice_idx_ref) 29650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 29660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar slice_header_t *ps_slice_hdr, *ps_slice_hdr_ref; 29670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 *pu4_entry_offset_backup; 29680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 29690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_slice_hdr = ps_codec->s_parse.ps_slice_hdr_base + slice_idx; 29700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_slice_hdr_ref = ps_codec->s_parse.ps_slice_hdr_base + slice_idx_ref; 29710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 29720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu4_entry_offset_backup = ps_slice_hdr->pu4_entry_point_offset; 29730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar memcpy(ps_slice_hdr, ps_slice_hdr_ref, sizeof(slice_header_t)); 29740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_slice_hdr->pu4_entry_point_offset = pu4_entry_offset_backup; 29750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 29760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 29770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 29780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2979