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