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_slice.c
220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @brief
240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Contains functions for parsing slice data
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/* File Includes                                                             */
380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/
390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <stdio.h>
400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <stddef.h>
410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <stdlib.h>
420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <string.h>
430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <assert.h>
440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_typedefs.h"
460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "iv.h"
470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ivd.h"
480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_cxa.h"
490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ithread.h"
500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_defs.h"
520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_debug.h"
530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_structs.h"
540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_macros.h"
550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_mem_fns.h"
560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_platform_macros.h"
570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_common_tables.h"
590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_error.h"
600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_cabac_tables.h"
610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_trace.h"
630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_defs.h"
640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_function_selector.h"
650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_structs.h"
660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_error.h"
670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_nal.h"
680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_bitstream.h"
690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_utils.h"
700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_parse_slice.h"
710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_parse_residual.h"
720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_cabac.h"
730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_job_queue.h"
740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_intra_pred_mode_prediction.h"
750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_common_tables.h"
760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_process_slice.h"
770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_debug.h"
780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_get_mv.h"
790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_boundary_strength.h"
800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_ilf_padding.h"
810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_statistics.h"
820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* Bit stream offset threshold */
830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define BITSTRM_OFF_THRS 8
840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8501ca88bb6c5bdd44e071f8effebe12f1d7da9853Harish Mahendrakar#define MIN_CU_QP_DELTA_ABS(x) (-26 + ((x) * 6) / 2)
8601ca88bb6c5bdd44e071f8effebe12f1d7da9853Harish Mahendrakar#define MAX_CU_QP_DELTA_ABS(x) (25 + ((x) * 6) / 2)
8701ca88bb6c5bdd44e071f8effebe12f1d7da9853Harish Mahendrakar
880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Table used to decode part_mode if AMP is enabled and current CU is not min CU
900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */
910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarconst UWORD8 gau1_part_mode_amp[] = { PART_nLx2N, PART_nRx2N, PART_Nx2N, 0xFF, PART_2NxnU, PART_2NxnD, PART_2NxN, 0xFF };
920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarconst UWORD32 gau4_ct_depth_mask[] = { 0x0, 0x55555555, 0xAAAAAAAA, 0xFFFFFFFF };
940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
1000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @brief
1010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Parses Transform tree syntax
1020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
1030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @par Description:
1040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Parses Transform tree syntax as per Section:7.3.9.8
1050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
1060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] ps_codec
1070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Pointer to codec context
1080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
1090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @returns  Status
1100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
1110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @remarks
1120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
1130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
1140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
1150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */
1160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWORD32 ihevcd_parse_transform_tree(codec_t *ps_codec,
1180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD32 x0, WORD32 y0,
1190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD32 cu_x_base, WORD32 cu_y_base,
1200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD32 log2_trafo_size,
1210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD32 trafo_depth,
1220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD32 blk_idx,
1230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD32 intra_pred_mode)
1240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
1250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
1260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    sps_t *ps_sps;
1270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    pps_t *ps_pps;
1280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 value;
1290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 x1, y1;
1300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 max_trafo_depth;
1310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    bitstrm_t *ps_bitstrm = &ps_codec->s_parse.s_bitstrm;
1330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 intra_split_flag;
1340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 split_transform_flag;
1350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 ctxt_idx;
1360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    cab_ctxt_t *ps_cabac = &ps_codec->s_parse.s_cabac;
1370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    max_trafo_depth = ps_codec->s_parse.s_cu.i4_max_trafo_depth;
1390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_sps = ps_codec->s_parse.ps_sps;
1400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_pps = ps_codec->s_parse.ps_pps;
1410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    intra_split_flag = ps_codec->s_parse.s_cu.i4_intra_split_flag;
1420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
1440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        split_transform_flag = 0;
1450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if((log2_trafo_size <= ps_sps->i1_log2_max_transform_block_size) &&
1460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        (log2_trafo_size > ps_sps->i1_log2_min_transform_block_size) &&
1470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        (trafo_depth < max_trafo_depth) &&
1480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        !(intra_split_flag && (trafo_depth == 0)))
1490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
1500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* encode the split transform flag, context derived as per Table9-37 */
1510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ctxt_idx = IHEVC_CAB_SPLIT_TFM + (5 - log2_trafo_size);
1520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            TRACE_CABAC_CTXT("split_transform_flag", ps_cabac->u4_range, ctxt_idx);
1540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            split_transform_flag = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
1550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            AEV_TRACE("split_transform_flag", split_transform_flag,
1560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                      ps_cabac->u4_range);
1570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
1590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else
1600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
1610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 inter_split_flag = 0;
1620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((0 == ps_sps->i1_max_transform_hierarchy_depth_inter) &&
1640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            (PRED_MODE_INTER == ps_codec->s_parse.s_cu.i4_pred_mode) &&
1650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            (PART_2Nx2N != ps_codec->s_parse.s_cu.i4_part_mode) &&
1660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            (0 == trafo_depth))
1670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
1680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                inter_split_flag = 1;
1690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
1700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((log2_trafo_size > ps_sps->i1_log2_max_transform_block_size) ||
1720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ((1 == intra_split_flag) && (0 == trafo_depth)) ||
1730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            (1 == inter_split_flag))
1740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
1750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                split_transform_flag = 1;
1760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
1770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
1780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(0 == trafo_depth)
1800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
1810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.s_cu.ai1_cbf_cr[trafo_depth] = 0;
1820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.s_cu.ai1_cbf_cb[trafo_depth] = 0;
1830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
1840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else
1850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
1860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.s_cu.ai1_cbf_cb[trafo_depth] = ps_codec->s_parse.s_cu.ai1_cbf_cb[trafo_depth - 1];
1870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.s_cu.ai1_cbf_cr[trafo_depth] = ps_codec->s_parse.s_cu.ai1_cbf_cr[trafo_depth - 1];
1880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
1890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(trafo_depth == 0 || log2_trafo_size > 2)
1900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
1910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ctxt_idx = IHEVC_CAB_CBCR_IDX + trafo_depth;
1920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* CBF for Cb/Cr is sent only if the parent CBF for Cb/Cr is non-zero */
1930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((trafo_depth == 0) || ps_codec->s_parse.s_cu.ai1_cbf_cb[trafo_depth - 1])
1940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
1950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                TRACE_CABAC_CTXT("cbf_cb", ps_cabac->u4_range, ctxt_idx);
1960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                value = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
1970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                AEV_TRACE("cbf_cb", value, ps_cabac->u4_range);
1980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->s_parse.s_cu.ai1_cbf_cb[trafo_depth] = value;
1990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
2000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((trafo_depth == 0) || ps_codec->s_parse.s_cu.ai1_cbf_cr[trafo_depth - 1])
2020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
2030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                TRACE_CABAC_CTXT("cbf_cr", ps_cabac->u4_range, ctxt_idx);
2040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                value = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
2050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                AEV_TRACE("cbf_cr", value, ps_cabac->u4_range);
2060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->s_parse.s_cu.ai1_cbf_cr[trafo_depth] = value;
2070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
2080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
2090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(split_transform_flag)
2100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
2110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 intra_pred_mode_tmp;
2120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            x1 = x0 + ((1 << log2_trafo_size) >> 1);
2130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            y1 = y0 + ((1 << log2_trafo_size) >> 1);
2140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* For transform depth of zero, intra pred mode as decoded at CU */
2160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* level is sent to the transform tree nodes */
2170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* When depth is non-zero intra pred mode of parent node is sent */
2180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* This takes care of passing correct mode to all the child nodes */
2190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            intra_pred_mode_tmp = trafo_depth ? intra_pred_mode : ps_codec->s_parse.s_cu.ai4_intra_luma_pred_mode[0];
220453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P            ret = ihevcd_parse_transform_tree(ps_codec, x0, y0, x0, y0, log2_trafo_size - 1, trafo_depth + 1, 0, intra_pred_mode_tmp);
221453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P            RETURN_IF((IHEVCD_ERROR_T)IHEVCD_SUCCESS != ret, ret);
2220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            intra_pred_mode_tmp = trafo_depth ? intra_pred_mode : ps_codec->s_parse.s_cu.ai4_intra_luma_pred_mode[1];
224453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P            ret = ihevcd_parse_transform_tree(ps_codec, x1, y0, x0, y0, log2_trafo_size - 1, trafo_depth + 1, 1, intra_pred_mode_tmp);
225453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P            RETURN_IF((IHEVCD_ERROR_T)IHEVCD_SUCCESS != ret, ret);
2260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            intra_pred_mode_tmp = trafo_depth ? intra_pred_mode : ps_codec->s_parse.s_cu.ai4_intra_luma_pred_mode[2];
228453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P            ret = ihevcd_parse_transform_tree(ps_codec, x0, y1, x0, y0, log2_trafo_size - 1, trafo_depth + 1, 2, intra_pred_mode_tmp);
229453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P            RETURN_IF((IHEVCD_ERROR_T)IHEVCD_SUCCESS != ret, ret);
2300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            intra_pred_mode_tmp = trafo_depth ? intra_pred_mode : ps_codec->s_parse.s_cu.ai4_intra_luma_pred_mode[3];
232453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P            ret = ihevcd_parse_transform_tree(ps_codec, x1, y1, x0, y0, log2_trafo_size - 1, trafo_depth + 1, 3, intra_pred_mode_tmp);
233453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P            RETURN_IF((IHEVCD_ERROR_T)IHEVCD_SUCCESS != ret, ret);
2340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
2360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else
2370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
2380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 ctb_x_base;
2390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 ctb_y_base;
2400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 cu_qp_delta_abs;
2410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            tu_t *ps_tu = ps_codec->s_parse.ps_tu;
2450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            cu_qp_delta_abs = 0;
2460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ctb_x_base = ps_codec->s_parse.i4_ctb_x << ps_sps->i1_log2_ctb_size;
2470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ctb_y_base = ps_codec->s_parse.i4_ctb_y << ps_sps->i1_log2_ctb_size;
2480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((ps_codec->s_parse.s_cu.i4_pred_mode == PRED_MODE_INTRA) ||
2500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            (trafo_depth != 0) ||
2510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            (ps_codec->s_parse.s_cu.ai1_cbf_cb[trafo_depth]) ||
2520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            (ps_codec->s_parse.s_cu.ai1_cbf_cr[trafo_depth]))
2530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
2540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ctxt_idx = IHEVC_CAB_CBF_LUMA_IDX;
2550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ctxt_idx += (trafo_depth == 0) ? 1 : 0;
2560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                TRACE_CABAC_CTXT("cbf_luma", ps_cabac->u4_range, ctxt_idx);
2580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                value = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
2590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                AEV_TRACE("cbf_luma", value, ps_cabac->u4_range);
2600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->s_parse.s_cu.i1_cbf_luma = value;
2620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
2630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            else
2640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
2650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->s_parse.s_cu.i1_cbf_luma = 1;
2660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
2670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Initialize ps_tu to default values */
2690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* If required change this to WORD32 packed write */
2700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_tu->b1_cb_cbf = 0;
2710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_tu->b1_cr_cbf = 0;
2720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_tu->b1_y_cbf = 0;
2730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_tu->b4_pos_x = ((x0 - ctb_x_base) >> 2);
2740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_tu->b4_pos_y = ((y0 - ctb_y_base) >> 2);
2750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_tu->b1_transquant_bypass = ps_codec->s_parse.s_cu.i4_cu_transquant_bypass;
2760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_tu->b3_size = (log2_trafo_size - 2);
2770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_tu->b7_qp = ps_codec->s_parse.u4_qp;
2780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_tu->b6_luma_intra_mode = intra_pred_mode;
2800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_tu->b3_chroma_intra_mode_idx = ps_codec->s_parse.s_cu.i4_intra_chroma_pred_mode_idx;
2810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Section:7.3.12  Transform unit syntax inlined here */
2830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(ps_codec->s_parse.s_cu.i1_cbf_luma ||
2840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ps_codec->s_parse.s_cu.ai1_cbf_cb[trafo_depth] ||
2850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ps_codec->s_parse.s_cu.ai1_cbf_cr[trafo_depth])
2860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
2870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                WORD32 intra_pred_mode_chroma;
2880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(ps_pps->i1_cu_qp_delta_enabled_flag && !ps_codec->s_parse.i4_is_cu_qp_delta_coded)
2890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
2900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    WORD32 c_max        = TU_MAX_QP_DELTA_ABS;
2930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    WORD32 ctxt_inc     = IHEVC_CAB_QP_DELTA_ABS;
2940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    WORD32 ctxt_inc_max = CTXT_MAX_QP_DELTA_ABS;
2950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    TRACE_CABAC_CTXT("cu_qp_delta_abs", ps_cabac->u4_range, ctxt_inc);
2970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    /* qp_delta_abs is coded as combination of tunary and eg0 code  */
2980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    /* See Table 9-32 and Table 9-37 for details on cu_qp_delta_abs */
2990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    cu_qp_delta_abs = ihevcd_cabac_decode_bins_tunary(ps_cabac,
3000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                      ps_bitstrm,
3010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                      c_max,
3020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                      ctxt_inc,
3030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                      0,
3040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                      ctxt_inc_max);
3050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(cu_qp_delta_abs >= c_max)
3060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
3070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        value = ihevcd_cabac_decode_bypass_bins_egk(ps_cabac, ps_bitstrm, 0);
3080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        cu_qp_delta_abs += value;
3090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
3100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    AEV_TRACE("cu_qp_delta_abs", cu_qp_delta_abs, ps_cabac->u4_range);
3110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_parse.i4_is_cu_qp_delta_coded = 1;
3130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(cu_qp_delta_abs)
3160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
3170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        value = ihevcd_cabac_decode_bypass_bin(ps_cabac, ps_bitstrm);
3180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        AEV_TRACE("cu_qp_delta_sign", value, ps_cabac->u4_range);
3190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        if(value)
3210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            cu_qp_delta_abs = -cu_qp_delta_abs;
3220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
32401ca88bb6c5bdd44e071f8effebe12f1d7da9853Harish Mahendrakar
32501ca88bb6c5bdd44e071f8effebe12f1d7da9853Harish Mahendrakar                    if (cu_qp_delta_abs < MIN_CU_QP_DELTA_ABS(ps_sps->i1_bit_depth_luma_minus8)
32601ca88bb6c5bdd44e071f8effebe12f1d7da9853Harish Mahendrakar                                    || cu_qp_delta_abs > MAX_CU_QP_DELTA_ABS(ps_sps->i1_bit_depth_luma_minus8))
32701ca88bb6c5bdd44e071f8effebe12f1d7da9853Harish Mahendrakar                    {
32801ca88bb6c5bdd44e071f8effebe12f1d7da9853Harish Mahendrakar                        return IHEVCD_INVALID_PARAMETER;
32901ca88bb6c5bdd44e071f8effebe12f1d7da9853Harish Mahendrakar                    }
33001ca88bb6c5bdd44e071f8effebe12f1d7da9853Harish Mahendrakar
3310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_parse.s_cu.i4_cu_qp_delta = cu_qp_delta_abs;
3320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
3340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(ps_codec->s_parse.s_cu.i1_cbf_luma)
3360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
3370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_tu->b1_y_cbf = 1;
3380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ihevcd_parse_residual_coding(ps_codec, x0, y0, log2_trafo_size, 0, intra_pred_mode);
3390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
3400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(4 == ps_codec->s_parse.s_cu.i4_intra_chroma_pred_mode_idx)
3420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    intra_pred_mode_chroma = ps_codec->s_parse.s_cu.ai4_intra_luma_pred_mode[0];
3430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                else
3440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
3450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    intra_pred_mode_chroma = gau1_intra_pred_chroma_modes[ps_codec->s_parse.s_cu.i4_intra_chroma_pred_mode_idx];
3460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(intra_pred_mode_chroma ==
3480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    ps_codec->s_parse.s_cu.ai4_intra_luma_pred_mode[0])
3490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
3500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        intra_pred_mode_chroma = INTRA_ANGULAR(34);
3510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
3520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
3540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(log2_trafo_size > 2)
3550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
3560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_codec->s_parse.s_cu.ai1_cbf_cb[trafo_depth])
3570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
3580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_tu->b1_cb_cbf = 1;
3590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ihevcd_parse_residual_coding(ps_codec, x0, y0, log2_trafo_size - 1, 1, intra_pred_mode_chroma);
3600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
3610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_codec->s_parse.s_cu.ai1_cbf_cr[trafo_depth])
3630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
3640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_tu->b1_cr_cbf = 1;
3650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ihevcd_parse_residual_coding(ps_codec, x0, y0, log2_trafo_size - 1, 2, intra_pred_mode_chroma);
3660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
3670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
3680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                else if(blk_idx == 3)
3690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
3700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_codec->s_parse.s_cu.ai1_cbf_cb[trafo_depth])
3710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
3720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_tu->b1_cb_cbf = 1;
3730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ihevcd_parse_residual_coding(ps_codec, cu_x_base, cu_y_base, log2_trafo_size, 1, intra_pred_mode_chroma);
3740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
3750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_codec->s_parse.s_cu.ai1_cbf_cr[trafo_depth])
3770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
3780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_tu->b1_cr_cbf = 1;
3790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ihevcd_parse_residual_coding(ps_codec, cu_x_base, cu_y_base, log2_trafo_size, 2, intra_pred_mode_chroma);
3800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
3810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
3820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                else
3830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
3840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    //ps_tu->b1_chroma_present = 0;
3850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_tu->b3_chroma_intra_mode_idx = INTRA_PRED_CHROMA_IDX_NONE;
3860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
3870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
3880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            else
3890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
3900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if((3 != blk_idx) && (2 == log2_trafo_size))
3910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
3920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_tu->b3_chroma_intra_mode_idx = INTRA_PRED_CHROMA_IDX_NONE;
3930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
3940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
3950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Set the first TU in CU flag */
3970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
3980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if((ps_codec->s_parse.s_cu.i4_pos_x << 3) == (ps_tu->b4_pos_x << 2) &&
3990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                (ps_codec->s_parse.s_cu.i4_pos_y << 3) == (ps_tu->b4_pos_y << 2))
4000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
4010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_tu->b1_first_tu_in_cu = 1;
4020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
4030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                else
4040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
4050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_tu->b1_first_tu_in_cu = 0;
4060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
4070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
4080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.ps_tu++;
4090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.s_cu.i4_tu_cnt++;
4100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.i4_pic_tu_idx++;
4110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
4120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
4130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return ret;
4140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
4150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
4160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
4170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
4180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @brief
4190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Parses Motion vector difference
4200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
4210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @par Description:
4220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Parses Motion vector difference as per Section:7.3.9.9
4230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
4240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] ps_codec
4250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Pointer to codec context
4260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
4270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @returns  Error from IHEVCD_ERROR_T
4280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
4290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @remarks
4300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
4310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
4320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
4330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */
4340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarIHEVCD_ERROR_T ihevcd_parse_mvd(codec_t *ps_codec, mv_t *ps_mv)
4350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
4360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
4370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 value;
4380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 abs_mvd;
4390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    bitstrm_t *ps_bitstrm = &ps_codec->s_parse.s_bitstrm;
4400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 abs_mvd_greater0_flag[2];
4410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 abs_mvd_greater1_flag[2];
4420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 ctxt_idx;
4430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    cab_ctxt_t *ps_cabac = &ps_codec->s_parse.s_cabac;
4440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ctxt_idx  = IHEVC_CAB_MVD_GRT0;
4470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* encode absmvd_x > 0 */
4480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    TRACE_CABAC_CTXT("abs_mvd_greater0_flag[0]", ps_cabac->u4_range, ctxt_idx);
4490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    abs_mvd_greater0_flag[0] = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
4500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    AEV_TRACE("abs_mvd_greater0_flag[0]", abs_mvd_greater0_flag[0], ps_cabac->u4_range);
4510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* encode absmvd_y > 0 */
4530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    TRACE_CABAC_CTXT("abs_mvd_greater0_flag[1]", ps_cabac->u4_range, ctxt_idx);
4540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    abs_mvd_greater0_flag[1] = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
4550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    AEV_TRACE("abs_mvd_greater0_flag[1]", abs_mvd_greater0_flag[1], ps_cabac->u4_range);
4560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ctxt_idx  = IHEVC_CAB_MVD_GRT1;
4580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    abs_mvd_greater1_flag[0] = 0;
4590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    abs_mvd_greater1_flag[1] = 0;
4600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(abs_mvd_greater0_flag[0])
4620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
4630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        TRACE_CABAC_CTXT("abs_mvd_greater1_flag[0]", ps_cabac->u4_range, ctxt_idx);
4640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        abs_mvd_greater1_flag[0] = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
4650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        AEV_TRACE("abs_mvd_greater1_flag[0]", abs_mvd_greater1_flag[0], ps_cabac->u4_range);
4660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
4670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(abs_mvd_greater0_flag[1])
4680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
4690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        TRACE_CABAC_CTXT("abs_mvd_greater1_flag[1]", ps_cabac->u4_range, ctxt_idx);
4700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        abs_mvd_greater1_flag[1] = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
4710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        AEV_TRACE("abs_mvd_greater1_flag[1]", abs_mvd_greater1_flag[1], ps_cabac->u4_range);
4720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
4730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    abs_mvd = 0;
4740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(abs_mvd_greater0_flag[0])
4750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
4760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        abs_mvd = 1;
4770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(abs_mvd_greater1_flag[0])
4780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
4790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            value = ihevcd_cabac_decode_bypass_bins_egk(ps_cabac, ps_bitstrm, 1);
4800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            AEV_TRACE("abs_mvd_minus2[0]", value, ps_cabac->u4_range);
4810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            abs_mvd = value + 2;
4820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
4830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        value = ihevcd_cabac_decode_bypass_bin(ps_cabac, ps_bitstrm);
4840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        AEV_TRACE("mvd_sign_flag[0]", value, ps_cabac->u4_range);
4850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(value)
4860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
4870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            abs_mvd = -abs_mvd;
4880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
4890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
4910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mv->i2_mvx = abs_mvd;
4920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    abs_mvd = 0;
4930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(abs_mvd_greater0_flag[1])
4940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
4950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        abs_mvd = 1;
4960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(abs_mvd_greater1_flag[1])
4970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
4980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            value = ihevcd_cabac_decode_bypass_bins_egk(ps_cabac, ps_bitstrm, 1);
4990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            AEV_TRACE("abs_mvd_minus2[1]", value, ps_cabac->u4_range);
5000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            abs_mvd = value + 2;
5010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
5030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        value = ihevcd_cabac_decode_bypass_bin(ps_cabac, ps_bitstrm);
5040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        AEV_TRACE("mvd_sign_flag[1]", value, ps_cabac->u4_range);
5050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(value)
5070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
5080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            abs_mvd = -abs_mvd;
5090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
5100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
5110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mv->i2_mvy = abs_mvd;
5120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return ret;
5140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
5150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
5170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
5180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
5190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @brief
5200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Parses PCM sample
5210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
5220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
5230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @par Description:
5240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Parses PCM sample as per Section:7.3.9.7 Pcm sample syntax
5250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
5260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] ps_codec
5270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Pointer to codec context
5280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
5290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @returns  Error from IHEVCD_ERROR_T
5300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
5310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @remarks
5320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
5330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
5340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
5350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */
5360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarIHEVCD_ERROR_T  ihevcd_parse_pcm_sample(codec_t *ps_codec,
5380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        WORD32 x0,
5390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        WORD32 y0,
5400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        WORD32 log2_cb_size)
5410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
5420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
5430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    cab_ctxt_t *ps_cabac = &ps_codec->s_parse.s_cabac;
5440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    sps_t *ps_sps;
5450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 value;
5470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 i;
5480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 num_bits;
5500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32 u4_sig_coeff_map;
5510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    bitstrm_t *ps_bitstrm = &ps_codec->s_parse.s_bitstrm;
5520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    tu_t *ps_tu = ps_codec->s_parse.ps_tu;
5530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    tu_sblk_coeff_data_t *ps_tu_sblk_coeff_data;
5540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD8 *pu1_coeff_data;
5550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_sps = ps_codec->s_parse.ps_sps;
5560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UNUSED(value);
5580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UNUSED(ps_tu);
5590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UNUSED(ps_cabac);
5600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UNUSED(x0);
5610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UNUSED(y0);
5620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
5640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD8 *pi1_scan_idx;
5650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD8 *pi1_buf = (WORD8 *)ps_codec->s_parse.pv_tu_coeff_data;
5660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD8 *pi1_num_coded_subblks;
5670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* First WORD8 gives number of coded subblocks */
5690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pi1_num_coded_subblks = pi1_buf++;
5700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Set number of coded subblocks in the current TU to zero */
5720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* For PCM there will be only one subblock which is the same size as CU */
5730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        *pi1_num_coded_subblks = 1;
5740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Second WORD8 gives (scan idx << 1) | trans_skip */
5760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pi1_scan_idx = pi1_buf++;
5770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        *pi1_scan_idx = (0 << 1) | 1;
5780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Store the incremented pointer in pv_tu_coeff_data */
5800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.pv_tu_coeff_data = pi1_buf;
5810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
5830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    u4_sig_coeff_map = 0xFFFFFFFF;
5850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_tu_sblk_coeff_data = (tu_sblk_coeff_data_t *)ps_codec->s_parse.pv_tu_coeff_data;
5860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_tu_sblk_coeff_data->u2_sig_coeff_map = u4_sig_coeff_map;
5870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_tu_sblk_coeff_data->u2_subblk_pos = 0;
5880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    pu1_coeff_data = (UWORD8 *)&ps_tu_sblk_coeff_data->ai2_level[0];
5900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    num_bits = ps_sps->i1_pcm_sample_bit_depth_luma;
5920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    for(i = 0; i < 1 << (log2_cb_size << 1); i++)
5940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
5950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        TRACE_CABAC_CTXT("pcm_sample_luma", ps_cabac->u4_range, 0);
5960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        BITS_PARSE("pcm_sample_luma", value, ps_bitstrm, num_bits);
5970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        //ps_pcmsample_t->i1_pcm_sample_luma[i] = value;
5990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        *pu1_coeff_data++ = value << (BIT_DEPTH_LUMA - num_bits);
6000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
6010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    num_bits = ps_sps->i1_pcm_sample_bit_depth_chroma;
6030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    for(i = 0; i < (1 << (log2_cb_size << 1)) >> 1; i++)
6050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
6060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        TRACE_CABAC_CTXT("pcm_sample_chroma", ps_cabac->u4_range, 0);
6070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        BITS_PARSE("pcm_sample_chroma", value, ps_bitstrm, num_bits);
6080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        // ps_pcmsample_t->i1_pcm_sample_chroma[i] = value;
6100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        *pu1_coeff_data++ = value << (BIT_DEPTH_CHROMA - num_bits);
6110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
6120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.pv_tu_coeff_data = pu1_coeff_data;
6140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return ret;
6160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
6170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
6180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
6190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
6200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @brief
6210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Parses Prediction unit
6220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
6230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @par Description:
6240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Parses Prediction unit as per Section:7.3.9.6
6250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
6260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] ps_codec
6270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Pointer to codec context
6280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
6290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @returns  Error from IHEVCD_ERROR_T
6300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
6310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @remarks
6320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
6330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
6340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
6350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */
6360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarIHEVCD_ERROR_T  ihevcd_parse_pu_mvp(codec_t *ps_codec, pu_t *ps_pu)
6380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
6390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
6400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 value;
6410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    slice_header_t *ps_slice_hdr;
6420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    bitstrm_t *ps_bitstrm = &ps_codec->s_parse.s_bitstrm;
6430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    cab_ctxt_t *ps_cabac = &ps_codec->s_parse.s_cabac;
6440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 inter_pred_idc;
6450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_slice_hdr = ps_codec->s_parse.ps_slice_hdr;
6470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ps_slice_hdr->i1_slice_type == BSLICE)
6490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
6500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 pu_w_plus_pu_h;
6510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 ctxt_idx;
6520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* required to check if w+h==12 case */
6530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu_w_plus_pu_h = ((ps_pu->b4_wd + 1) << 2) + ((ps_pu->b4_ht + 1) << 2);
6540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(12 == pu_w_plus_pu_h)
6550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
6560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ctxt_idx = IHEVC_CAB_INTER_PRED_IDC + 4;
6570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            TRACE_CABAC_CTXT("inter_pred_idc", ps_cabac->u4_range, ctxt_idx);
6580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            inter_pred_idc = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm,
6590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                     ctxt_idx);
6600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
6610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else
6620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
6630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* larger PUs can be encoded as bi_pred/l0/l1 inter_pred_idc */
6640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 is_bipred;
6650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ctxt_idx = IHEVC_CAB_INTER_PRED_IDC + ps_codec->s_parse.i4_ct_depth;
6670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            TRACE_CABAC_CTXT("inter_pred_idc", ps_cabac->u4_range, ctxt_idx);
6680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            is_bipred = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
6690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            inter_pred_idc = PRED_BI;
6700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(!is_bipred)
6710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
6720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ctxt_idx = IHEVC_CAB_INTER_PRED_IDC + 4;
6730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                inter_pred_idc = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm,
6740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                         ctxt_idx);
6750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
6760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
6770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        AEV_TRACE("inter_pred_idc", inter_pred_idc, ps_cabac->u4_range);
6790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
6800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else
6810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        inter_pred_idc = PRED_L0;
6820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_pu->mv.i1_l0_ref_idx = 0;
6830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_pu->mv.i1_l1_ref_idx = 0;
6840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Decode MVD for L0 for PRED_L0 or PRED_BI */
6850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(inter_pred_idc != PRED_L1)
6860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
6870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 active_refs = ps_slice_hdr->i1_num_ref_idx_l0_active;
6880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 ref_idx = 0;
6890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 ctxt_idx;
6900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(active_refs > 1)
6920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
6930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ctxt_idx = IHEVC_CAB_INTER_REF_IDX;
6940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* encode the context modelled first bin */
6950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            TRACE_CABAC_CTXT("ref_idx", ps_cabac->u4_range, ctxt_idx);
6960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ref_idx = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
6970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((active_refs > 2) && ref_idx)
6990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
7000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                WORD32 value;
7010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* encode the context modelled second bin */
7020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ctxt_idx++;
7030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                value = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
7040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ref_idx += value;
7050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if((active_refs > 3) && value)
7060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
7070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    /* encode remaining bypass bins */
7080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ref_idx = ihevcd_cabac_decode_bypass_bins_tunary(ps_cabac,
7090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                     ps_bitstrm,
7100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                     (active_refs - 3)
7110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    );
7120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ref_idx += 2;
7130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
7140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
7150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            AEV_TRACE("ref_idx", ref_idx, ps_cabac->u4_range);
7160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
7170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ref_idx = CLIP3(ref_idx, 0, MAX_DPB_SIZE - 1);
7190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_pu->mv.i1_l0_ref_idx = ref_idx;
7200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ihevcd_parse_mvd(ps_codec, &ps_pu->mv.s_l0_mv);
7220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ctxt_idx = IHEVC_CAB_MVP_L0L1;
7240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        value = ihevcd_cabac_decode_bin(ps_cabac,
7250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        ps_bitstrm,
7260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        ctxt_idx);
7270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        AEV_TRACE("mvp_l0/l1_flag", value, ps_cabac->u4_range);
7290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_pu->b1_l0_mvp_idx = value;
7310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
7330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Decode MVD for L1 for PRED_L1 or PRED_BI */
7340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(inter_pred_idc != PRED_L0)
7350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
7360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 active_refs = ps_slice_hdr->i1_num_ref_idx_l1_active;
7370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 ref_idx = 0;
7380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 ctxt_idx;
7390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(active_refs > 1)
7410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
7420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ctxt_idx = IHEVC_CAB_INTER_REF_IDX;
7440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            TRACE_CABAC_CTXT("ref_idx", ps_cabac->u4_range, ctxt_idx);
7450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* encode the context modelled first bin */
7460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ref_idx = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
7470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((active_refs > 2) && ref_idx)
7490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
7500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                WORD32 value;
7510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* encode the context modelled second bin */
7520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ctxt_idx++;
7530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                value = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
7540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ref_idx += value;
7550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if((active_refs > 3) && value)
7560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
7570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    /* encode remaining bypass bins */
7580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ref_idx = ihevcd_cabac_decode_bypass_bins_tunary(ps_cabac,
7590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                     ps_bitstrm,
7600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                     (active_refs - 3)
7610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    );
7620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ref_idx += 2;
7630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
7640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
7650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            AEV_TRACE("ref_idx", ref_idx, ps_cabac->u4_range);
7670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
7680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ref_idx = CLIP3(ref_idx, 0, MAX_DPB_SIZE - 1);
7700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_pu->mv.i1_l1_ref_idx = ref_idx;
7710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(ps_slice_hdr->i1_mvd_l1_zero_flag && inter_pred_idc == PRED_BI)
7730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
7740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_pu->mv.s_l1_mv.i2_mvx = 0;
7750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_pu->mv.s_l1_mv.i2_mvy = 0;
7760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
7770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else
7780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
7790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ihevcd_parse_mvd(ps_codec, &ps_pu->mv.s_l1_mv);
7800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
7810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ctxt_idx = IHEVC_CAB_MVP_L0L1;
7830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        value = ihevcd_cabac_decode_bin(ps_cabac,
7840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        ps_bitstrm,
7850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        ctxt_idx);
7860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        AEV_TRACE("mvp_l0/l1_flag", value, ps_cabac->u4_range);
7880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_pu->b1_l1_mvp_idx = value;
7890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
7910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_pu->b2_pred_mode = inter_pred_idc;
7930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return ret;
7940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
7950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
7960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
7970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
7980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @brief
7990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Parses Prediction unit
8000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
8010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @par Description:
8020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Parses Prediction unit as per Section:7.3.9.6
8030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
8040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] ps_codec
8050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Pointer to codec context
8060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
8070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @returns  Error from IHEVCD_ERROR_T
8080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
8090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @remarks
8100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
8110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
8120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
8130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */
8140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarIHEVCD_ERROR_T  ihevcd_parse_prediction_unit(codec_t *ps_codec,
8160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                             WORD32 x0,
8170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                             WORD32 y0,
8180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                             WORD32 wd,
8190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                             WORD32 ht)
8200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
8210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
8220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    slice_header_t *ps_slice_hdr;
8230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    sps_t *ps_sps;
8240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    bitstrm_t *ps_bitstrm = &ps_codec->s_parse.s_bitstrm;
8250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 ctb_x_base;
8260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 ctb_y_base;
8270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    pu_t *ps_pu = ps_codec->s_parse.ps_pu;
8290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    cab_ctxt_t *ps_cabac = &ps_codec->s_parse.s_cabac;
8300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_slice_hdr = ps_codec->s_parse.ps_slice_hdr;
8320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Set PU structure to default values */
8340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    memset(ps_pu, 0, sizeof(pu_t));
8350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_sps = ps_codec->s_parse.ps_sps;
8370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ctb_x_base = ps_codec->s_parse.i4_ctb_x << ps_sps->i1_log2_ctb_size;
8380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ctb_y_base = ps_codec->s_parse.i4_ctb_y << ps_sps->i1_log2_ctb_size;
8390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_pu->b4_pos_x = (x0 - ctb_x_base) >> 2;
8410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_pu->b4_pos_y = (y0 - ctb_y_base) >> 2;
8420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_pu->b4_wd = (wd >> 2) - 1;
8430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_pu->b4_ht = (ht >> 2) - 1;
8440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_pu->b1_intra_flag = 0;
8460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_pu->b3_part_mode = ps_codec->s_parse.s_cu.i4_part_mode;
8470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(PRED_MODE_SKIP == ps_codec->s_parse.s_cu.i4_pred_mode)
8490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
8500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 merge_idx = 0;
8510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(ps_slice_hdr->i1_max_num_merge_cand > 1)
8520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
8530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 ctxt_idx = IHEVC_CAB_MERGE_IDX_EXT;
8540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 bin;
8550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            TRACE_CABAC_CTXT("merge_idx", ps_cabac->u4_range, ctxt_idx);
8570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            bin = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
8580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(bin)
8590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
8600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(ps_slice_hdr->i1_max_num_merge_cand > 2)
8610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
8620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    merge_idx = ihevcd_cabac_decode_bypass_bins_tunary(
8630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    ps_cabac, ps_bitstrm,
8640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    (ps_slice_hdr->i1_max_num_merge_cand - 2));
8650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
8660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                merge_idx++;
8670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
8680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            AEV_TRACE("merge_idx", merge_idx, ps_cabac->u4_range);
8690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
8700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_pu->b1_merge_flag = 1;
8710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_pu->b3_merge_idx = merge_idx;
8720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
8740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else
8750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
8760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* MODE_INTER */
8770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 merge_flag;
8780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 ctxt_idx = IHEVC_CAB_MERGE_FLAG_EXT;
8790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        TRACE_CABAC_CTXT("merge_flag", ps_cabac->u4_range, ctxt_idx);
8800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        merge_flag = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
8810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        AEV_TRACE("merge_flag", merge_flag, ps_cabac->u4_range);
8820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_pu->b1_merge_flag = merge_flag;
8840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(merge_flag)
8860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
8870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 merge_idx = 0;
8880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(ps_slice_hdr->i1_max_num_merge_cand > 1)
8890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
8900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                WORD32 ctxt_idx = IHEVC_CAB_MERGE_IDX_EXT;
8910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                WORD32 bin;
8920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                TRACE_CABAC_CTXT("merge_idx", ps_cabac->u4_range, ctxt_idx);
8930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                bin = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
8940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(bin)
8950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
8960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_slice_hdr->i1_max_num_merge_cand > 2)
8970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
8980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        merge_idx = ihevcd_cabac_decode_bypass_bins_tunary(
8990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        ps_cabac, ps_bitstrm,
9000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        (ps_slice_hdr->i1_max_num_merge_cand - 2));
9010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
9020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    merge_idx++;
9030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
9040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                AEV_TRACE("merge_idx", merge_idx, ps_cabac->u4_range);
9050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
9060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_pu->b3_merge_idx = merge_idx;
9080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
9090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else
9100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
9110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ihevcd_parse_pu_mvp(ps_codec, ps_pu);
9120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
9130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
9150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    STATS_UPDATE_PU_SIZE(ps_pu);
9160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Increment PU pointer */
9170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.ps_pu++;
9180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.i4_pic_pu_idx++;
9190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return ret;
9200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
9210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWORD32 ihevcd_parse_part_mode_amp(cab_ctxt_t *ps_cabac, bitstrm_t *ps_bitstrm)
9240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
9250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 ctxt_idx = IHEVC_CAB_PART_MODE;
9260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 part_mode_idx;
9270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 part_mode;
9280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 bin;
9290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    part_mode = 0;
9310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    TRACE_CABAC_CTXT("part_mode", ps_cabac->u4_range, ctxt_idx);
9320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    bin = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx++);
9330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(!bin)
9350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
9360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        bin = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx++);
9370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        part_mode_idx = bin;
9380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        part_mode_idx <<= 1;
9390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Following takes of handling context increment for 3rd bin in part_mode */
9410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* When AMP is enabled and the current is not min CB */
9420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Context for 3rd bin is 3 and not 2 */
9430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ctxt_idx += 1;
9440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        bin = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
9460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        part_mode_idx |= bin;
9470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        part_mode_idx <<= 1;
9490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(!bin)
9500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
9510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            bin = ihevcd_cabac_decode_bypass_bin(ps_cabac, ps_bitstrm);
9530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            part_mode_idx |= bin;
9540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
9550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        part_mode = gau1_part_mode_amp[part_mode_idx];
9560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
9570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return part_mode;
9580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
9590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarIHEVCD_ERROR_T ihevcd_parse_coding_unit_intra(codec_t *ps_codec,
9600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                              WORD32 x0,
9610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                              WORD32 y0,
9620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                              WORD32 log2_cb_size)
9630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
9640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
9650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    sps_t *ps_sps;
9660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    cab_ctxt_t *ps_cabac = &ps_codec->s_parse.s_cabac;
9670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    bitstrm_t *ps_bitstrm = &ps_codec->s_parse.s_bitstrm;
9680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 pcm_flag;
9690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 value;
9700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 cb_size = 1 << log2_cb_size;
9710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 part_mode =  ps_codec->s_parse.s_cu.i4_part_mode;
9720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    tu_t *ps_tu = ps_codec->s_parse.ps_tu;
9730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    pu_t *ps_pu = ps_codec->s_parse.ps_pu;
9740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 ctb_x_base;
9750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 ctb_y_base;
9760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_sps = ps_codec->s_parse.ps_sps;
9770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ctb_x_base = ps_codec->s_parse.i4_ctb_x << ps_sps->i1_log2_ctb_size;
9780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ctb_y_base = ps_codec->s_parse.i4_ctb_y << ps_sps->i1_log2_ctb_size;
9790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    memset(ps_pu, 0, sizeof(pu_t));
9810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_pu->b1_intra_flag = 1;
9820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_pu->b4_wd = (cb_size >> 2) - 1;
9830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_pu->b4_ht = (cb_size >> 2) - 1;
9840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_pu->b4_pos_x = (x0 - ctb_x_base) >> 2;
9850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_pu->b4_pos_y = (y0 - ctb_y_base) >> 2;
9860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    pcm_flag = 0;
9880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if((PART_2Nx2N == part_mode) && (ps_sps->i1_pcm_enabled_flag)
9890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    && (log2_cb_size
9900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    >= ps_sps->i1_log2_min_pcm_coding_block_size)
9910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    && (log2_cb_size
9920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    <= (ps_sps->i1_log2_min_pcm_coding_block_size + ps_sps->i1_log2_diff_max_min_pcm_coding_block_size)))
9930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
9940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        TRACE_CABAC_CTXT("pcm_flag", ps_cabac->u4_range, 0);
9950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pcm_flag = ihevcd_cabac_decode_terminate(ps_cabac, ps_bitstrm);
9960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        AEV_TRACE("pcm_flag", pcm_flag, ps_cabac->u4_range);
9970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
9980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.i4_cu_pcm_flag = pcm_flag;
10000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(pcm_flag)
10010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
10020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        UWORD8 *pu1_luma_intra_pred_mode_top, *pu1_luma_intra_pred_mode_left;
10030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 i,  num_pred_blocks;
10040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(ps_codec->s_parse.s_bitstrm.u4_bit_ofst % 8)
10060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
10070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            TRACE_CABAC_CTXT("pcm_alignment_zero_bit", ps_cabac->u4_range, 0);
10080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ihevcd_bits_flush_to_byte_boundary(&ps_codec->s_parse.s_bitstrm);
10090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            AEV_TRACE("pcm_alignment_zero_bit", 0, ps_cabac->u4_range);
10100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
10110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ihevcd_parse_pcm_sample(ps_codec, x0, y0, log2_cb_size);
10130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ihevcd_cabac_reset(&ps_codec->s_parse.s_cabac,
10150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                           &ps_codec->s_parse.s_bitstrm);
10160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_tu = ps_codec->s_parse.ps_tu;
10180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_tu->b1_cb_cbf = 1;
10190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_tu->b1_cr_cbf = 1;
10200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_tu->b1_y_cbf = 1;
10210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_tu->b4_pos_x = ((x0 - ctb_x_base) >> 2);
10220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_tu->b4_pos_y = ((y0 - ctb_y_base) >> 2);
10230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_tu->b1_transquant_bypass = 1;
10240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_tu->b3_size = (log2_cb_size - 2);
10250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_tu->b7_qp = ps_codec->s_parse.u4_qp;
10260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_tu->b3_chroma_intra_mode_idx = INTRA_PRED_CHROMA_IDX_NONE;
10270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_tu->b6_luma_intra_mode   = INTRA_PRED_NONE;
10280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Set the first TU in CU flag */
10300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
10310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((ps_codec->s_parse.s_cu.i4_pos_x << 3) == (ps_tu->b4_pos_x << 2) &&
10320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            (ps_codec->s_parse.s_cu.i4_pos_y << 3) == (ps_tu->b4_pos_y << 2))
10330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
10340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_tu->b1_first_tu_in_cu = 1;
10350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
10360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            else
10370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
10380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_tu->b1_first_tu_in_cu = 0;
10390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
10400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
10410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Update the intra pred mode for PCM to INTRA_DC(default mode) */
10430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_luma_intra_pred_mode_top = ps_codec->s_parse.pu1_luma_intra_pred_mode_top
10440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        + (ps_codec->s_parse.s_cu.i4_pos_x * 2);
10450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_luma_intra_pred_mode_left = ps_codec->s_parse.pu1_luma_intra_pred_mode_left
10470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        + (ps_codec->s_parse.s_cu.i4_pos_y * 2);
10480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        num_pred_blocks = 1; /* Because PCM part mode will be 2Nx2N */
10500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_func_selector.ihevc_memset_fptr(pu1_luma_intra_pred_mode_left, INTRA_DC, (cb_size / num_pred_blocks) / MIN_PU_SIZE);
10520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_func_selector.ihevc_memset_fptr(pu1_luma_intra_pred_mode_top, INTRA_DC, (cb_size / num_pred_blocks) / MIN_PU_SIZE);
10530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Set no_loop_filter appropriately */
10560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(1 == ps_sps->i1_pcm_loop_filter_disable_flag)
10570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
10580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            UWORD8 *pu1_pic_no_loop_filter_flag;
10590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 numbytes_row;
10600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            UWORD32 u4_mask;
10610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_pic_no_loop_filter_flag = ps_codec->s_parse.pu1_pic_no_loop_filter_flag;
10630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            numbytes_row =  (ps_sps->i2_pic_width_in_luma_samples + 63) / 64;
10640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_pic_no_loop_filter_flag += (y0 / 8) * numbytes_row;
10650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_pic_no_loop_filter_flag += (x0 / 64);
10660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Generate (cb_size / 8) number of 1s */
10670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* i.e (log2_cb_size - 2) number of 1s */
10680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            u4_mask = LSB_ONES((cb_size >> 3));
10690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            for(i = 0; i < (cb_size / 8); i++)
10700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
10710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                *pu1_pic_no_loop_filter_flag |= (u4_mask << (((x0) / 8) % 8));
10720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_pic_no_loop_filter_flag += numbytes_row;
10730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
10740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
10750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Increment ps_tu and tu_idx */
10760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.ps_tu++;
10770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.s_cu.i4_tu_cnt++;
10780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.i4_pic_tu_idx++;
10790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
10810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else
10820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
10830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 cnt = 0;
10840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 i;
10850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 part_cnt;
10860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        part_cnt = (part_mode == PART_NxN) ? 4 : 1;
10880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(i = 0; i < part_cnt; i++)
10900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
10910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            TRACE_CABAC_CTXT("prev_intra_pred_luma_flag", ps_cabac->u4_range, IHEVC_CAB_INTRA_LUMA_PRED_FLAG);
10920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            value = ihevcd_cabac_decode_bin(ps_cabac,
10930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            ps_bitstrm,
10940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            IHEVC_CAB_INTRA_LUMA_PRED_FLAG);
10950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.s_cu.ai4_prev_intra_luma_pred_flag[i] =
10970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            value;
10980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            AEV_TRACE("prev_intra_pred_luma_flag", value, ps_cabac->u4_range);
10990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
11000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
11010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(i = 0; i < part_cnt; i++)
11020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
11030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(ps_codec->s_parse.s_cu.ai4_prev_intra_luma_pred_flag[cnt])
11040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
11050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                value = ihevcd_cabac_decode_bypass_bins_tunary(ps_cabac, ps_bitstrm, 2);
11060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                AEV_TRACE("mpm_idx", value, ps_cabac->u4_range);
11070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->s_parse.s_cu.ai4_mpm_idx[cnt] = value;
11080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
11090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            else
11100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
11110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                value = ihevcd_cabac_decode_bypass_bins(ps_cabac, ps_bitstrm, 5);
11120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                AEV_TRACE("rem_intra_luma_pred_mode", value,
11130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                          ps_cabac->u4_range);
11140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->s_parse.s_cu.ai4_rem_intra_luma_pred_mode[cnt] =
11150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                value;
11160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
11170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            cnt++;
11180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
11190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        TRACE_CABAC_CTXT("intra_chroma_pred_mode", ps_cabac->u4_range, IHEVC_CAB_CHROMA_PRED_MODE);
11200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        value = ihevcd_cabac_decode_bin(ps_cabac,
11210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        ps_bitstrm,
11220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        IHEVC_CAB_CHROMA_PRED_MODE);
11230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.s_cu.i4_intra_chroma_pred_mode_idx = 4;
11240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(value)
11250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
11260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.s_cu.i4_intra_chroma_pred_mode_idx =
11270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ihevcd_cabac_decode_bypass_bins(ps_cabac,
11280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                            ps_bitstrm, 2);
11290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
11300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        AEV_TRACE("intra_chroma_pred_mode",
11310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                  ps_codec->s_parse.s_cu.i4_intra_chroma_pred_mode_idx,
11320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                  ps_cabac->u4_range);
11330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
11340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
11350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ihevcd_intra_pred_mode_prediction(ps_codec, log2_cb_size, x0, y0);
11360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
11370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    STATS_UPDATE_PU_SIZE(ps_pu);
11380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Increment PU pointer */
11390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.ps_pu++;
11400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.i4_pic_pu_idx++;
11410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
11420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return ret;
11430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
11440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
11450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
11460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
11470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @brief
11480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Parses coding unit
11490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
11500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @par Description:
11510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Parses coding unit as per Section:7.3.9.5
11520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
11530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] ps_codec
11540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Pointer to codec context
11550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
11560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @returns  Error from IHEVCD_ERROR_T
11570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
11580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @remarks
11590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
11600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
11610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
11620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */
11630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
11640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarIHEVCD_ERROR_T  ihevcd_parse_coding_unit(codec_t *ps_codec,
11650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                         WORD32 x0,
11660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                         WORD32 y0,
11670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                         WORD32 log2_cb_size)
11680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
11690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
11700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    sps_t *ps_sps;
11710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    pps_t *ps_pps;
11720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 cb_size;
11730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    slice_header_t *ps_slice_hdr;
11740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 skip_flag;
11750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 pcm_flag;
11760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32 *pu4_skip_top = ps_codec->s_parse.pu4_skip_cu_top;
11770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32 u4_skip_left = ps_codec->s_parse.u4_skip_cu_left;
11780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    bitstrm_t *ps_bitstrm = &ps_codec->s_parse.s_bitstrm;
11790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    tu_t *ps_tu = ps_codec->s_parse.ps_tu;
11800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
11810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 cu_pos_x;
11820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 cu_pos_y;
11830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    cab_ctxt_t *ps_cabac = &ps_codec->s_parse.s_cabac;
11840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
11850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ASSERT(0 == (x0 % 8));
11860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ASSERT(0 == (y0 % 8));
11870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
11880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.s_cu.i4_tu_cnt = 0;
11890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_sps = ps_codec->s_parse.ps_sps;
11900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_pps = ps_codec->s_parse.ps_pps;
11910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
11920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    cu_pos_x = ps_codec->s_parse.s_cu.i4_pos_x;
11930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    cu_pos_y = ps_codec->s_parse.s_cu.i4_pos_y;
11940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
11950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
11960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
11970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_slice_hdr = ps_codec->s_parse.ps_slice_hdr;
11980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
11990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
12000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    cb_size = 1 << log2_cb_size;
12010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
12020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.s_cu.i4_cu_transquant_bypass = 0;
12030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
12040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ps_pps->i1_transquant_bypass_enable_flag)
12050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
12060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        TRACE_CABAC_CTXT("cu_transquant_bypass_flag", ps_cabac->u4_range, IHEVC_CAB_CU_TQ_BYPASS_FLAG);
12070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.s_cu.i4_cu_transquant_bypass =
12080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm,
12090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                IHEVC_CAB_CU_TQ_BYPASS_FLAG);
12100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Update transquant_bypass in ps_tu */
12110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
12120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        AEV_TRACE("cu_transquant_bypass_flag", ps_codec->s_parse.s_cu.i4_cu_transquant_bypass,
12130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                  ps_cabac->u4_range);
12140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
12150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(ps_codec->s_parse.s_cu.i4_cu_transquant_bypass)
12160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
12170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            UWORD8 *pu1_pic_no_loop_filter_flag = ps_codec->s_parse.pu1_pic_no_loop_filter_flag;
12180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            UWORD32 u4_mask;
12190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 i;
12200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 numbytes_row;
12210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            numbytes_row =  (ps_sps->i2_pic_width_in_luma_samples + 63) / 64;
12220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_pic_no_loop_filter_flag += (y0 / 8) * numbytes_row;
12230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_pic_no_loop_filter_flag += (x0 / 64);
12240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
12250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Generate (cb_size / 8) number of 1s */
12260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* i.e (log2_cb_size - 2) number of 1s */
12270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            u4_mask = LSB_ONES((cb_size >> 3));
12280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            for(i = 0; i < (cb_size / 8); i++)
12290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
12300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                *pu1_pic_no_loop_filter_flag |= (u4_mask << (((x0) / 8) % 8));
12310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_pic_no_loop_filter_flag += numbytes_row;
12320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
12330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
12340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
12350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
12360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
12370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        UWORD32 u4_skip_top = 0;
12380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        UWORD32 u4_mask;
12390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        UWORD32 u4_top_mask, u4_left_mask;
12400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        UWORD32 u4_min_cu_x = x0 / 8;
12410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        UWORD32 u4_min_cu_y = y0 / 8;
12420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
12430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu4_skip_top += (u4_min_cu_x / 32);
12440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
12450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
12460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(ps_slice_hdr->i1_slice_type != ISLICE)
12470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
12480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 ctx_idx_inc;
12490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ctx_idx_inc = 0;
12500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
12510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((0 != cu_pos_y) ||
12520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ((0 != ps_codec->s_parse.i4_ctb_slice_y) &&
12530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            (0 != ps_codec->s_parse.i4_ctb_tile_y)))
12540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
12550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                u4_skip_top = *pu4_skip_top;
12560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                u4_skip_top >>= (u4_min_cu_x % 32);
12570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(u4_skip_top & 1)
12580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ctx_idx_inc++;
12590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
12600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
12610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /*****************************************************************/
12620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* If cu_pos_x is non-zero then left is available                */
12630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* If cu_pos_x is zero then ensure both the following are true   */
12640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /*    Current CTB is not the first CTB in a tile row             */
12650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /*    Current CTB is not the first CTB in a slice                */
12660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /*****************************************************************/
12670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((0 != cu_pos_x) ||
12680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            (((0 != ps_codec->s_parse.i4_ctb_slice_x) || (0 != ps_codec->s_parse.i4_ctb_slice_y)) &&
12690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            (0 != ps_codec->s_parse.i4_ctb_tile_x)))
12700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
12710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                u4_skip_left >>= (u4_min_cu_y % 32);
12720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(u4_skip_left & 1)
12730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ctx_idx_inc++;
12740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
12750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            TRACE_CABAC_CTXT("cu_skip_flag", ps_cabac->u4_range, (IHEVC_CAB_SKIP_FLAG + ctx_idx_inc));
12760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            skip_flag = ihevcd_cabac_decode_bin(ps_cabac,
12770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                ps_bitstrm,
12780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                (IHEVC_CAB_SKIP_FLAG + ctx_idx_inc));
12790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
12800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            AEV_TRACE("cu_skip_flag", skip_flag, ps_cabac->u4_range);
12810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
12820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else
12830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            skip_flag = 0;
12840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
12850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Update top skip_flag */
12860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        u4_skip_top = *pu4_skip_top;
12870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Since Max cb_size is 64, maximum of 8 bits will be set or reset */
12880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Also since Coding block will be within 64x64 grid, only 8bits within a WORD32
12890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * need to be updated. These 8 bits will not cross 8 bit boundaries
12900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         */
12910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        u4_mask = LSB_ONES(cb_size / 8);
12920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        u4_top_mask = u4_mask << (u4_min_cu_x % 32);
12930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
12940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
12950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(skip_flag)
12960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
12970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            u4_skip_top |= u4_top_mask;
12980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
12990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else
13000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
13010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            u4_skip_top &= ~u4_top_mask;
13020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
13030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        *pu4_skip_top = u4_skip_top;
13040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
13050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Update left skip_flag */
13060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        u4_skip_left = ps_codec->s_parse.u4_skip_cu_left;
13070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        u4_mask = LSB_ONES(cb_size / 8);
13080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        u4_left_mask = u4_mask << (u4_min_cu_y % 32);
13090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
13100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(skip_flag)
13110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
13120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            u4_skip_left |= u4_left_mask;
13130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
13140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else
13150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
13160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            u4_skip_left &= ~u4_left_mask;
13170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
13180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.u4_skip_cu_left = u4_skip_left;
13190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
13200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.i4_cu_pcm_flag = 0;
13210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
13220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(skip_flag)
13230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
13240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 ctb_x_base;
13250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 ctb_y_base;
13260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
13270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ctb_x_base = ps_codec->s_parse.i4_ctb_x << ps_sps->i1_log2_ctb_size;
13280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ctb_y_base = ps_codec->s_parse.i4_ctb_y << ps_sps->i1_log2_ctb_size;
13290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
13300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_tu->b1_cb_cbf = 0;
13310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_tu->b1_cr_cbf = 0;
13320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_tu->b1_y_cbf = 0;
13330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_tu->b4_pos_x = ((x0 - ctb_x_base) >> 2);
13340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_tu->b4_pos_y = ((y0 - ctb_y_base) >> 2);
13350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_tu->b1_transquant_bypass = 0;
13360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_tu->b3_size = (log2_cb_size - 2);
13370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_tu->b7_qp = ps_codec->s_parse.u4_qp;
13380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_tu->b3_chroma_intra_mode_idx = INTRA_PRED_CHROMA_IDX_NONE;
13390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_tu->b6_luma_intra_mode   = INTRA_PRED_NONE;
13400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
13410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Set the first TU in CU flag */
13420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
13430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((ps_codec->s_parse.s_cu.i4_pos_x << 3) == (ps_tu->b4_pos_x << 2) &&
13440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            (ps_codec->s_parse.s_cu.i4_pos_y << 3) == (ps_tu->b4_pos_y << 2))
13450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
13460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_tu->b1_first_tu_in_cu = 1;
13470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
13480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            else
13490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
13500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_tu->b1_first_tu_in_cu = 0;
13510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
13520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
13530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
13540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.ps_tu++;
13550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.s_cu.i4_tu_cnt++;
13560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.i4_pic_tu_idx++;
13570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
13580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.s_cu.i4_pred_mode = PRED_MODE_SKIP;
13590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.s_cu.i4_part_mode = PART_2Nx2N;
13600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
13610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu_t *ps_pu = ps_codec->s_parse.ps_pu;
13620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_pu->b2_part_idx = 0;
13630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ihevcd_parse_prediction_unit(ps_codec, x0, y0, cb_size, cb_size);
13640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            STATS_UPDATE_PU_SKIP_SIZE(ps_pu);
13650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
13660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
13670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else
13680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
13690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 pred_mode;
13700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 part_mode;
13710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 intra_split_flag;
13720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 is_mincb;
13730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        cb_size = (1 << log2_cb_size);
13740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        is_mincb = (cb_size == (1 << ps_sps->i1_log2_min_coding_block_size));
13750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pcm_flag = 0;
13760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(ps_slice_hdr->i1_slice_type != ISLICE)
13770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
13780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            TRACE_CABAC_CTXT("pred_mode_flag", ps_cabac->u4_range, IHEVC_CAB_PRED_MODE);
13790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pred_mode = ihevcd_cabac_decode_bin(ps_cabac,
13800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                ps_bitstrm,
13810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                IHEVC_CAB_PRED_MODE);
13820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
13830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            AEV_TRACE("pred_mode_flag", pred_mode, ps_cabac->u4_range);
13840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
13850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else
13860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
13870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pred_mode = PRED_MODE_INTRA;
13880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
13890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
13900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* If current CU is intra then set corresponging bit in picture level intra map */
13910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(PRED_MODE_INTRA == pred_mode)
13920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
13930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            UWORD8 *pu1_pic_intra_flag = ps_codec->s_parse.pu1_pic_intra_flag;
13940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            UWORD32 u4_mask;
13950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 i;
13960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 numbytes_row;
13970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            numbytes_row =  (ps_sps->i2_pic_width_in_luma_samples + 63) / 64;
13980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_pic_intra_flag += (y0 / 8) * numbytes_row;
13990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_pic_intra_flag += (x0 / 64);
14000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
14010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Generate (cb_size / 8) number of 1s */
14020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* i.e (log2_cb_size - 2) number of 1s */
14030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            u4_mask = LSB_ONES((cb_size >> 3));
14040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            for(i = 0; i < (cb_size / 8); i++)
14050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
14060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                *pu1_pic_intra_flag |= (u4_mask << (((x0) / 8) % 8));
14070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_pic_intra_flag += numbytes_row;
14080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
14090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
14100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
14110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.s_cu.i4_pred_mode = pred_mode;
14120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        intra_split_flag = 0;
14130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if((PRED_MODE_INTRA != pred_mode) ||
14140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        is_mincb)
14150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
14160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            UWORD32 bin;
14170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(PRED_MODE_INTRA == pred_mode)
14180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
14190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                TRACE_CABAC_CTXT("part_mode", ps_cabac->u4_range, IHEVC_CAB_PART_MODE);
14200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                bin = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, IHEVC_CAB_PART_MODE);
14210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                part_mode = (bin) ? PART_2Nx2N : PART_NxN;
14220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
14230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            else
14240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
14250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                WORD32 amp_enabled = ps_sps->i1_amp_enabled_flag;
14260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
14270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                UWORD32 u4_max_bin_cnt = 0;
14280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
14290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
14300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
14310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(amp_enabled && !is_mincb)
14320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
14330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    part_mode = ihevcd_parse_part_mode_amp(ps_cabac, ps_bitstrm);
14340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
14350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                else
14360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
14370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    WORD32 ctxt_inc = IHEVC_CAB_PART_MODE;
14380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
14390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    u4_max_bin_cnt = 2;
14400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if((is_mincb) && (cb_size > 8))
14410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
14420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        u4_max_bin_cnt++;
14430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
14440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
14450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    part_mode = -1;
14460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    TRACE_CABAC_CTXT("part_mode", ps_cabac->u4_range, IHEVC_CAB_PART_MODE);
14470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    do
14480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
14490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        bin = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm,
14500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                      ctxt_inc++);
14510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        part_mode++;
14520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }while(--u4_max_bin_cnt && !bin);
14530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
14540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    /* If the last bin was zero, then increment part mode by 1 */
14550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(!bin)
14560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        part_mode++;
14570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
14580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
14590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
14600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
14610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
14620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            AEV_TRACE("part_mode", part_mode, ps_cabac->u4_range);
14630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
14640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
14650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else
14660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
14670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            part_mode = 0;
14680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            intra_split_flag = 0;
14690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
14700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.s_cu.i4_part_mode = part_mode;
14710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
14720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if((PRED_MODE_INTRA == ps_codec->s_parse.s_cu.i4_pred_mode) &&
14730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        (PART_NxN == ps_codec->s_parse.s_cu.i4_part_mode))
14740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
14750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            intra_split_flag = 1;
14760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
14770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.s_cu.i4_part_mode = part_mode;
14780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.s_cu.i4_intra_split_flag = intra_split_flag;
14790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(pred_mode == PRED_MODE_INTRA)
14800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
14810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.i4_cu_pcm_flag = 0;
14820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ihevcd_parse_coding_unit_intra(ps_codec, x0, y0, log2_cb_size);
14830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pcm_flag = ps_codec->s_parse.i4_cu_pcm_flag;
14840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
14850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
14860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else
14870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
14880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(part_mode == PART_2Nx2N)
14890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
14900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu_t *ps_pu = ps_codec->s_parse.ps_pu;
14910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ihevcd_parse_prediction_unit(ps_codec, x0, y0, cb_size, cb_size);
14920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_pu->b2_part_idx = 0;
14930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
14940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            else if(part_mode == PART_2NxN)
14950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
14960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu_t *ps_pu = ps_codec->s_parse.ps_pu;
14970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
14980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ihevcd_parse_prediction_unit(ps_codec, x0, y0, cb_size, cb_size / 2);
14990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_pu->b2_part_idx = 0;
15000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
15010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_pu = ps_codec->s_parse.ps_pu;
15020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ihevcd_parse_prediction_unit(ps_codec, x0, y0 + (cb_size / 2), cb_size, cb_size / 2);
15030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
15040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_pu->b2_part_idx = 1;
15050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
15060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            else if(part_mode == PART_Nx2N)
15070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
15080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu_t *ps_pu = ps_codec->s_parse.ps_pu;
15090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ihevcd_parse_prediction_unit(ps_codec, x0, y0, cb_size / 2, cb_size);
15100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_pu->b2_part_idx = 0;
15110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_pu = ps_codec->s_parse.ps_pu;
15120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ihevcd_parse_prediction_unit(ps_codec, x0 + (cb_size / 2), y0, cb_size / 2, cb_size);
15130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
15140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_pu->b2_part_idx = 1;
15150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
15160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            else if(part_mode == PART_2NxnU)
15170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
15180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu_t *ps_pu = ps_codec->s_parse.ps_pu;
15190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ihevcd_parse_prediction_unit(ps_codec, x0, y0, cb_size, cb_size / 4);
15200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_pu->b2_part_idx = 0;
15210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_pu = ps_codec->s_parse.ps_pu;
15220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ihevcd_parse_prediction_unit(ps_codec, x0, y0 + (cb_size / 4), cb_size, cb_size * 3 / 4);
15230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
15240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_pu->b2_part_idx = 1;
15250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
15260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            else if(part_mode == PART_2NxnD)
15270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
15280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu_t *ps_pu = ps_codec->s_parse.ps_pu;
15290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ihevcd_parse_prediction_unit(ps_codec, x0, y0, cb_size, cb_size * 3 / 4);
15300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_pu->b2_part_idx = 0;
15310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_pu = ps_codec->s_parse.ps_pu;
15320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ihevcd_parse_prediction_unit(ps_codec, x0, y0 + (cb_size * 3 / 4), cb_size, cb_size / 4);
15330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
15340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_pu->b2_part_idx = 1;
15350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
15360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            else if(part_mode == PART_nLx2N)
15370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
15380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu_t *ps_pu = ps_codec->s_parse.ps_pu;
15390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ihevcd_parse_prediction_unit(ps_codec, x0, y0, cb_size / 4, cb_size);
15400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_pu->b2_part_idx = 0;
15410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_pu = ps_codec->s_parse.ps_pu;
15420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ihevcd_parse_prediction_unit(ps_codec, x0 + (cb_size / 4), y0, cb_size * 3 / 4, cb_size);
15430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
15440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_pu->b2_part_idx = 1;
15450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
15460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            else if(part_mode == PART_nRx2N)
15470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
15480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu_t *ps_pu = ps_codec->s_parse.ps_pu;
15490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ihevcd_parse_prediction_unit(ps_codec, x0, y0, cb_size * 3 / 4, cb_size);
15500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_pu->b2_part_idx = 0;
15510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_pu = ps_codec->s_parse.ps_pu;
15520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ihevcd_parse_prediction_unit(ps_codec, x0 + (cb_size * 3 / 4), y0, cb_size / 4, cb_size);
15530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_pu->b2_part_idx = 1;
15540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
15550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            else
15560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            { /* PART_NxN */
15570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu_t *ps_pu = ps_codec->s_parse.ps_pu;
15580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
15590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ihevcd_parse_prediction_unit(ps_codec, x0, y0, cb_size / 2, cb_size / 2);
15600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_pu->b2_part_idx = 0;
15610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_pu = ps_codec->s_parse.ps_pu;
15620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ihevcd_parse_prediction_unit(ps_codec, x0 + (cb_size / 2), y0, cb_size / 2, cb_size / 2);
15630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
15640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_pu->b2_part_idx = 1;
15650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_pu = ps_codec->s_parse.ps_pu;
15660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ihevcd_parse_prediction_unit(ps_codec, x0, y0 + (cb_size / 2), cb_size / 2, cb_size / 2);
15670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
15680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_pu->b2_part_idx = 2;
15690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_pu = ps_codec->s_parse.ps_pu;
15700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ihevcd_parse_prediction_unit(ps_codec, x0 + (cb_size / 2), y0 + (cb_size / 2), cb_size / 2, cb_size / 2);
15710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
15720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_pu->b2_part_idx = 3;
15730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
15740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
15750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
15760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(!pcm_flag)
15770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
15780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 no_residual_syntax_flag = 0;
15790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu_t *ps_pu;
15800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Since ps_pu is incremented for each PU parsed, decrement by 1 to
15810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar             *  access last decoded PU
15820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar             */
15830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_pu = ps_codec->s_parse.ps_pu - 1;
15840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((PRED_MODE_INTRA != pred_mode) &&
15850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            (!((part_mode == PART_2Nx2N) && ps_pu->b1_merge_flag)))
15860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
15870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
15880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                TRACE_CABAC_CTXT("rqt_root_cbf", ps_cabac->u4_range, IHEVC_CAB_NORES_IDX);
15890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                no_residual_syntax_flag = ihevcd_cabac_decode_bin(ps_cabac,
15900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                  ps_bitstrm,
15910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                  IHEVC_CAB_NORES_IDX);
15920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
15930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                AEV_TRACE("rqt_root_cbf", no_residual_syntax_flag,
15940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                          ps_cabac->u4_range);
15950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* TODO: HACK FOR COMPLIANCE WITH HM REFERENCE DECODER */
15960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /*********************************************************/
15970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* currently the HM decoder expects qtroot cbf instead of */
15980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* no_residue_flag which has opposite meaning             */
15990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* This will be fixed once the software / spec is fixed   */
16000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /*********************************************************/
16010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                no_residual_syntax_flag = 1 - no_residual_syntax_flag;
16020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
16030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(!no_residual_syntax_flag)
16050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
16060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->s_parse.s_cu.i4_max_trafo_depth = (pred_mode == PRED_MODE_INTRA) ?
16080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                (ps_sps->i1_max_transform_hierarchy_depth_intra + intra_split_flag) :
16090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                (ps_sps->i1_max_transform_hierarchy_depth_inter);
1610453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P                ret = ihevcd_parse_transform_tree(ps_codec, x0, y0, x0, y0,
1611453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P                                                  log2_cb_size, 0, 0,
1612453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P                                                  ps_codec->s_parse.s_cu.ai4_intra_luma_pred_mode[0]);
1613453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P                RETURN_IF((IHEVCD_ERROR_T)IHEVCD_SUCCESS != ret, ret);
16140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
16150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            else
16160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
16170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                WORD32 ctb_x_base;
16180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                WORD32 ctb_y_base;
16190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ctb_x_base = ps_codec->s_parse.i4_ctb_x << ps_sps->i1_log2_ctb_size;
16210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ctb_y_base = ps_codec->s_parse.i4_ctb_y << ps_sps->i1_log2_ctb_size;
16220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_tu = ps_codec->s_parse.ps_tu;
16240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_tu->b1_cb_cbf = 0;
16250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_tu->b1_cr_cbf = 0;
16260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_tu->b1_y_cbf = 0;
16270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_tu->b4_pos_x = ((x0 - ctb_x_base) >> 2);
16280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_tu->b4_pos_y = ((y0 - ctb_y_base) >> 2);
16290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_tu->b1_transquant_bypass = 0;
16300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_tu->b3_size = (log2_cb_size - 2);
16310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_tu->b7_qp = ps_codec->s_parse.u4_qp;
16320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_tu->b3_chroma_intra_mode_idx = INTRA_PRED_CHROMA_IDX_NONE;
16330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_tu->b6_luma_intra_mode   = ps_codec->s_parse.s_cu.ai4_intra_luma_pred_mode[0];
16340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Set the first TU in CU flag */
16360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
16370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if((ps_codec->s_parse.s_cu.i4_pos_x << 3) == (ps_tu->b4_pos_x << 2) &&
16380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    (ps_codec->s_parse.s_cu.i4_pos_y << 3) == (ps_tu->b4_pos_y << 2))
16390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
16400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_tu->b1_first_tu_in_cu = 1;
16410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
16420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    else
16430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
16440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_tu->b1_first_tu_in_cu = 0;
16450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
16460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
16470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->s_parse.ps_tu++;
16480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->s_parse.s_cu.i4_tu_cnt++;
16490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->s_parse.i4_pic_tu_idx++;
16500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
16520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
16530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
16550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return ret;
16600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
16610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
16660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
16670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
16680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @brief
16690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Parses Coding Quad Tree
16700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
16710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @par Description:
16720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Parses Coding Quad Tree as per Section:7.3.9.4
16730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
16740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] ps_codec
16750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Pointer to codec context
16760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
16770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @returns  Error from IHEVCD_ERROR_T
16780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
16790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @remarks
16800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
16810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
16820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
16830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */
16840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarIHEVCD_ERROR_T ihevcd_parse_coding_quadtree(codec_t *ps_codec,
16850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            WORD32 x0,
16860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            WORD32 y0,
16870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            WORD32 log2_cb_size,
16880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            WORD32 ct_depth)
16890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
16900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
16910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    sps_t *ps_sps;
16920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    pps_t *ps_pps;
16930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 split_cu_flag;
16940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 x1, y1;
16950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 cu_pos_x;
16960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 cu_pos_y;
16970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    bitstrm_t *ps_bitstrm = &ps_codec->s_parse.s_bitstrm;
16980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    cab_ctxt_t *ps_cabac = &ps_codec->s_parse.s_cabac;
16990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 cb_size = 1 << log2_cb_size;
17000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_sps = ps_codec->s_parse.ps_sps;
17010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_pps = ps_codec->s_parse.ps_pps;
17020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
17030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Compute CU position with respect to current CTB in (8x8) units */
17040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    cu_pos_x = (x0 - (ps_codec->s_parse.i4_ctb_x << ps_sps->i1_log2_ctb_size)) >> 3;
17050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    cu_pos_y = (y0 - (ps_codec->s_parse.i4_ctb_y << ps_sps->i1_log2_ctb_size)) >> 3;
17060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
17070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.s_cu.i4_pos_x = cu_pos_x;
17080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.s_cu.i4_pos_y = cu_pos_y;
17090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
17100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.s_cu.i4_log2_cb_size = log2_cb_size;
17110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
17120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.i4_ct_depth = ct_depth;
17130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
17140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        UWORD32 *pu4_ct_depth_top = ps_codec->s_parse.pu4_ct_depth_top;
17150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        UWORD32 u4_ct_depth_left = ps_codec->s_parse.u4_ct_depth_left;
17160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        UWORD32 u4_ct_depth_top = 0;
17170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        UWORD32 u4_mask;
17180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        UWORD32 u4_top_mask, u4_left_mask;
17190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32  ctxt_idx;
17200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        UWORD32 u4_min_cu_x = x0 / 8;
17210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        UWORD32 u4_min_cu_y = y0 / 8;
17220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
17230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu4_ct_depth_top += (u4_min_cu_x / 16);
17240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
17250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
17260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
17270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
17280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(((x0 + (1 << log2_cb_size)) <= ps_sps->i2_pic_width_in_luma_samples) &&
17290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ((y0 + (1 << log2_cb_size)) <= ps_sps->i2_pic_height_in_luma_samples) &&
17300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        (log2_cb_size > ps_sps->i1_log2_min_coding_block_size))
17310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
17320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
17330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ctxt_idx = IHEVC_CAB_SPLIT_CU_FLAG;
17340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Split cu context increment is decided based on left and top Coding tree
17350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar             * depth which is stored at frame level
17360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar             */
17370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Check if the CTB is in first row in the current slice or tile */
17380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((0 != cu_pos_y) ||
17390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ((0 != ps_codec->s_parse.i4_ctb_slice_y) &&
17400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            (0 != ps_codec->s_parse.i4_ctb_tile_y)))
17410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
17420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                u4_ct_depth_top = *pu4_ct_depth_top;
17430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                u4_ct_depth_top >>= ((u4_min_cu_x % 16) * 2);
17440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                u4_ct_depth_top &= 3;
17450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
17460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if((WORD32)u4_ct_depth_top > ct_depth)
17470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ctxt_idx++;
17480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
17490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
17500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Check if the CTB is in first column in the current slice or tile */
17510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /*****************************************************************/
17520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* If cu_pos_x is non-zero then left is available                */
17530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* If cu_pos_x is zero then ensure both the following are true   */
17540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /*    Current CTB is not the first CTB in a tile row             */
17550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /*    Current CTB is not the first CTB in a slice                */
17560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /*****************************************************************/
17570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((0 != cu_pos_x) ||
17580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            (((0 != ps_codec->s_parse.i4_ctb_slice_x) || (0 != ps_codec->s_parse.i4_ctb_slice_y)) &&
17590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            (0 != ps_codec->s_parse.i4_ctb_tile_x)))
17600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
17610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                u4_ct_depth_left >>= ((u4_min_cu_y % 16) * 2);
17620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                u4_ct_depth_left &= 3;
17630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if((WORD32)u4_ct_depth_left > ct_depth)
17640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ctxt_idx++;
17650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
17660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            TRACE_CABAC_CTXT("split_cu_flag", ps_cabac->u4_range, ctxt_idx);
17670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            split_cu_flag = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
17680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            AEV_TRACE("split_cu_flag", split_cu_flag, ps_cabac->u4_range);
17690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
17700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else
17710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
17720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(log2_cb_size > ps_sps->i1_log2_min_coding_block_size)
17730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                split_cu_flag = 1;
17740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            else
17750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                split_cu_flag = 0;
17760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
17770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
17780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(0 == split_cu_flag)
17790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
17800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Update top ct_depth */
17810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            u4_ct_depth_top = *pu4_ct_depth_top;
17820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Since Max cb_size is 64, maximum of 8 bits will be set or reset */
17830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Also since Coding block will be within 64x64 grid, only 8bits within a WORD32
17840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar             * need to be updated. These 8 bits will not cross 8 bit boundaries
17850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar             */
17860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            u4_mask = DUP_LSB_11(cb_size / 8);
17870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
17880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            u4_top_mask = u4_mask << ((u4_min_cu_x % 16) * 2);
17890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            u4_ct_depth_top &= ~u4_top_mask;
17900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
17910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(ct_depth)
17920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
17930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                u4_top_mask = gau4_ct_depth_mask[ct_depth] & u4_mask;
17940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
17950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                u4_top_mask = u4_top_mask << ((u4_min_cu_x % 16) * 2);
17960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                u4_ct_depth_top |= u4_top_mask;
17970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
17980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
17990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            *pu4_ct_depth_top = u4_ct_depth_top;
18000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
18010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Update left ct_depth */
18020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            u4_ct_depth_left = ps_codec->s_parse.u4_ct_depth_left;
18030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
18040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            u4_left_mask = u4_mask << ((u4_min_cu_y % 16) * 2);
18050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
18060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            u4_ct_depth_left &= ~u4_left_mask;
18070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(ct_depth)
18080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
18090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                u4_left_mask = gau4_ct_depth_mask[ct_depth] & u4_mask;
18100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
18110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                u4_left_mask = u4_left_mask << ((u4_min_cu_y % 16) * 2);
18120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                u4_ct_depth_left |= u4_left_mask;
18130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
18140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
18150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.u4_ct_depth_left = u4_ct_depth_left;
18160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
18170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
18180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if((ps_pps->i1_cu_qp_delta_enabled_flag) &&
18190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    (log2_cb_size >= ps_pps->i1_log2_min_cu_qp_delta_size))
18200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
18210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.i4_is_cu_qp_delta_coded = 0;
18220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.i4_cu_qp_delta = 0;
18230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
18240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(split_cu_flag)
18250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
18260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        x1 = x0 + ((1 << log2_cb_size) >> 1);
18270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        y1 = y0 + ((1 << log2_cb_size) >> 1);
18280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1829453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P        ret = ihevcd_parse_coding_quadtree(ps_codec, x0, y0, log2_cb_size - 1, ct_depth + 1);
1830453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P        RETURN_IF((IHEVCD_ERROR_T)IHEVCD_SUCCESS != ret, ret);
18310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
18320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* At frame boundaries coding quadtree nodes are sent only if they fall within the frame */
18330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(x1 < ps_sps->i2_pic_width_in_luma_samples)
1834453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P        {
1835453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P            ret = ihevcd_parse_coding_quadtree(ps_codec, x1, y0, log2_cb_size - 1, ct_depth + 1);
1836453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P            RETURN_IF((IHEVCD_ERROR_T)IHEVCD_SUCCESS != ret, ret);
1837453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P        }
18380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
18390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(y1 < ps_sps->i2_pic_height_in_luma_samples)
1840453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P        {
1841453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P            ret = ihevcd_parse_coding_quadtree(ps_codec, x0, y1, log2_cb_size - 1, ct_depth + 1);
1842453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P            RETURN_IF((IHEVCD_ERROR_T)IHEVCD_SUCCESS != ret, ret);
1843453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P        }
18440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
18450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if((x1 < ps_sps->i2_pic_width_in_luma_samples) &&
18460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        (y1 < ps_sps->i2_pic_height_in_luma_samples))
1847453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P        {
1848453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P            ret = ihevcd_parse_coding_quadtree(ps_codec, x1, y1, log2_cb_size - 1, ct_depth + 1);
1849453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P            RETURN_IF((IHEVCD_ERROR_T)IHEVCD_SUCCESS != ret, ret);
1850453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P        }
18510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
18520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else
18530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
18540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Set current group QP if current CU is aligned with the group */
18550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
18560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 cu_pos_x = ps_codec->s_parse.s_cu.i4_pos_x << 3;
18570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 cu_pos_y = ps_codec->s_parse.s_cu.i4_pos_y << 3;
18580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
18590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 qpg_x = (cu_pos_x - (cu_pos_x & ((1 << ps_pps->i1_log2_min_cu_qp_delta_size) - 1)));
18600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 qpg_y = (cu_pos_y - (cu_pos_y & ((1 << ps_pps->i1_log2_min_cu_qp_delta_size) - 1)));
18610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
18620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((cu_pos_x == qpg_x) &&
18630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            (cu_pos_y == qpg_y))
18640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
18650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->s_parse.u4_qpg = ps_codec->s_parse.u4_qp;
18660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
18670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->s_parse.s_cu.i4_cu_qp_delta = 0;
18680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
18690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
18700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
18710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1872453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P        ret = ihevcd_parse_coding_unit(ps_codec, x0, y0, log2_cb_size);
1873453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P        RETURN_IF((IHEVCD_ERROR_T)IHEVCD_SUCCESS != ret, ret);
18740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
18750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(ps_pps->i1_cu_qp_delta_enabled_flag)
18760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
18770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 qp_pred, qp_left, qp_top;
18780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 cu_pos_x;
18790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 cu_pos_y;
18800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 qpg_x;
18810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 qpg_y;
18820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 i, j;
18830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 qp;
18840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 cur_cu_offset;
18850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            tu_t *ps_tu = ps_codec->s_parse.ps_tu;
18860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 cb_size = 1 << ps_codec->s_parse.s_cu.i4_log2_cb_size;
18870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
18880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            cu_pos_x = ps_codec->s_parse.s_cu.i4_pos_x << 3;
18890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            cu_pos_y = ps_codec->s_parse.s_cu.i4_pos_y << 3;
18900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
18910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            qpg_x = (cu_pos_x - (cu_pos_x & ((1 << ps_pps->i1_log2_min_cu_qp_delta_size) - 1))) >> 3;
18920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            qpg_y = (cu_pos_y - (cu_pos_y & ((1 << ps_pps->i1_log2_min_cu_qp_delta_size) - 1))) >> 3;
18930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
18940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /*previous coded Qp*/
18950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            qp_left = ps_codec->s_parse.u4_qpg;
18960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            qp_top = ps_codec->s_parse.u4_qpg;
18970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
18980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(qpg_x > 0)
18990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
19000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                qp_left = ps_codec->s_parse.ai1_8x8_cu_qp[qpg_x - 1 + (qpg_y * 8)];
19010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
19020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(qpg_y > 0)
19030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
19040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                qp_top = ps_codec->s_parse.ai1_8x8_cu_qp[qpg_x + ((qpg_y - 1) * 8)];
19050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
19060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            qp_pred = (qp_left + qp_top + 1) >> 1;
19080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Since qp_pred + ps_codec->s_parse.s_cu.i4_cu_qp_delta can be negative,
19090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            52 is added before taking modulo 52 */
19100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            qp = (qp_pred + ps_codec->s_parse.s_cu.i4_cu_qp_delta + 52) % 52;
19110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            cur_cu_offset = (cu_pos_x >> 3) + cu_pos_y;
19130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            for(i = 0; i < (cb_size >> 3); i++)
19140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
19150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(j = 0; j < (cb_size >> 3); j++)
19160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
19170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_parse.ai1_8x8_cu_qp[cur_cu_offset + (i * 8) + j] = qp;
19180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
19190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
19200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.u4_qp = qp;
19220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.s_cu.i4_qp = qp;
19230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* When change in QP is signaled, update the QP in TUs that are already parsed in the CU */
19260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
19270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                tu_t *ps_tu_tmp;
19280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_tu_tmp = ps_tu - ps_codec->s_parse.s_cu.i4_tu_cnt;
19290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_tu->b7_qp = ps_codec->s_parse.u4_qp;
19300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                while(ps_tu_tmp != ps_tu)
19310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
19320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_tu_tmp->b7_qp = ps_codec->s_parse.u4_qp;
19330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_tu_tmp++;
19350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
19360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
19370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(ps_codec->s_parse.s_cu.i4_cu_qp_delta)
19380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
19390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                WORD32 ctb_indx;
19400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ctb_indx = ps_codec->s_parse.i4_ctb_x + ps_sps->i2_pic_wd_in_ctb * ps_codec->s_parse.i4_ctb_y;
19410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->s_parse.s_bs_ctxt.pu1_pic_qp_const_in_ctb[ctb_indx >> 3] &= (~(1 << (ctb_indx & 7)));
19420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
19430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
19450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
19470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return ret;
19520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
19530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
19560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
19570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
19580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @brief
19590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Parses SAO (Sample adaptive offset syntax)
19600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
19610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @par Description:
19620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Parses SAO (Sample adaptive offset syntax) as per  Section:7.3.9.3
19630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
19640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] ps_codec
19650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Pointer to codec context
19660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
19670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @returns  Error from IHEVCD_ERROR_T
19680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
19690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @remarks
19700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
19710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
19720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
19730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */
19740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarIHEVCD_ERROR_T  ihevcd_parse_sao(codec_t *ps_codec)
19750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
19760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
19770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    sps_t *ps_sps;
19780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    sao_t *ps_sao;
19790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 rx;
19800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 ry;
19810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 value;
19820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    bitstrm_t *ps_bitstrm = &ps_codec->s_parse.s_bitstrm;
19830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 sao_merge_left_flag;
19840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 sao_merge_up_flag;
19850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    slice_header_t *ps_slice_hdr;
19860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    cab_ctxt_t *ps_cabac = &ps_codec->s_parse.s_cabac;
19870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 ctxt_idx;
19880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_slice_hdr = ps_codec->s_parse.ps_slice_hdr_base;
19900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_slice_hdr += (ps_codec->s_parse.i4_cur_slice_idx & (MAX_SLICE_HDR_CNT - 1));
19910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_sps = (ps_codec->s_parse.ps_sps);
19930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    rx = ps_codec->s_parse.i4_ctb_x;
19940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ry = ps_codec->s_parse.i4_ctb_y;
19950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_sao = ps_codec->s_parse.ps_pic_sao + rx + ry * ps_sps->i2_pic_wd_in_ctb;
19970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Default values */
19990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_sao->b3_y_type_idx = 0;
20000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_sao->b3_cb_type_idx = 0;
20010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_sao->b3_cr_type_idx = 0;
20020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UNUSED(value);
20040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ctxt_idx = IHEVC_CAB_SAO_MERGE;
20050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    sao_merge_left_flag = 0;
20060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    sao_merge_up_flag = 0;
20070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(rx > 0)
20080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
20090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /*TODO:Implemented only for slice. condition for tile is not tested*/
20100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(((0 != ps_codec->s_parse.i4_ctb_slice_x) || (0 != ps_codec->s_parse.i4_ctb_slice_y)) &&
20110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        (0 != ps_codec->s_parse.i4_ctb_tile_x))
20120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
20130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            TRACE_CABAC_CTXT("sao_merge_flag", ps_cabac->u4_range, ctxt_idx);
20150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            sao_merge_left_flag = ihevcd_cabac_decode_bin(ps_cabac,
20160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                          ps_bitstrm,
20170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                          ctxt_idx);
20180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            AEV_TRACE("sao_merge_flag", sao_merge_left_flag, ps_cabac->u4_range);
20190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
20200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
20220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ry > 0 && !sao_merge_left_flag)
20230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
20240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if((ps_codec->s_parse.i4_ctb_slice_y > 0) && (ps_codec->s_parse.i4_ctb_tile_y > 0))
20250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
20260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            TRACE_CABAC_CTXT("sao_merge_flag", ps_cabac->u4_range, ctxt_idx);
20270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            sao_merge_up_flag = ihevcd_cabac_decode_bin(ps_cabac,
20280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                        ps_bitstrm,
20290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                        ctxt_idx);
20300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            AEV_TRACE("sao_merge_flag", sao_merge_up_flag, ps_cabac->u4_range);
20310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
20320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
20330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ctxt_idx = IHEVC_CAB_SAO_TYPE;
20340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(sao_merge_left_flag)
20360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
20370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        *ps_sao = *(ps_sao - 1);
20380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
20390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else if(sao_merge_up_flag)
20400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
20410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        *ps_sao = *(ps_sao - ps_sps->i2_pic_wd_in_ctb);
20420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
20430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else // if(!sao_merge_up_flag && !sao_merge_left_flag)
20440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
20450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 c_idx;
20460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 sao_type_idx = 0;
20470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(c_idx = 0; c_idx < 3; c_idx++)
20480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
20490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((ps_slice_hdr->i1_slice_sao_luma_flag && c_idx == 0) || (ps_slice_hdr->i1_slice_sao_chroma_flag && c_idx > 0))
20500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
20510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* sao_type_idx will be same for c_idx == 1 and c_idx == 2 - hence not initialized to zero for c_idx == 2*/
20540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(c_idx == 0)
20560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
20570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    sao_type_idx = 0;
20580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    TRACE_CABAC_CTXT("sao_type_idx", ps_cabac->u4_range, ctxt_idx);
20590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    sao_type_idx = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
20600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(sao_type_idx)
20620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
20630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        sao_type_idx += ihevcd_cabac_decode_bypass_bin(ps_cabac, ps_bitstrm);
20640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
20650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    AEV_TRACE("sao_type_idx", sao_type_idx,  ps_cabac->u4_range);
20660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_sao->b3_y_type_idx = sao_type_idx;
20680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
20690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(c_idx == 1)
20700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
20710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    sao_type_idx = 0;
20720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    TRACE_CABAC_CTXT("sao_type_idx", ps_cabac->u4_range, ctxt_idx);
20730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    sao_type_idx = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
20740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(sao_type_idx)
20750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
20760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        sao_type_idx += ihevcd_cabac_decode_bypass_bin(ps_cabac, ps_bitstrm);
20770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
20780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    AEV_TRACE("sao_type_idx", sao_type_idx,  ps_cabac->u4_range);
20800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_sao->b3_cb_type_idx = sao_type_idx;
20820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_sao->b3_cr_type_idx = sao_type_idx;
20830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
20840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(sao_type_idx != 0)
20860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
20870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    WORD32 i;
20880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    WORD32 sao_offset[4];
20890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    WORD32 sao_band_position = 0;
20900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    WORD32 c_max =  (1 << (MIN(BIT_DEPTH, 10) - 5)) - 1;
20910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    for(i = 0; i < 4; i++)
20920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
20930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        sao_offset[i] = ihevcd_cabac_decode_bypass_bins_tunary(ps_cabac, ps_bitstrm, c_max);
20940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        AEV_TRACE("sao_offset_abs", sao_offset[i], ps_cabac->u4_range);
20950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        if((2 == sao_type_idx) && (i > 1))
20970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        {
20980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            sao_offset[i] = -sao_offset[i];
20990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        }
21000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
21010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(sao_type_idx == 1)
21030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
21040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        for(i = 0; i < 4; i++)
21050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        {
21060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            if(sao_offset[i] != 0)
21070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            {
21080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                value = ihevcd_cabac_decode_bypass_bin(ps_cabac, ps_bitstrm);
21090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                AEV_TRACE("sao_offset_sign", value, ps_cabac->u4_range);
21100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                if(value)
21120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                {
21130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    sao_offset[i] = -sao_offset[i];
21140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                }
21150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            }
21160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        }
21170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        value = ihevcd_cabac_decode_bypass_bins(ps_cabac, ps_bitstrm, 5);
21180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        AEV_TRACE("sao_band_position", value, ps_cabac->u4_range);
21190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        sao_band_position = value;
21210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
21220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    else
21230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
21240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        if(c_idx == 0)
21250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        {
21260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            value = ihevcd_cabac_decode_bypass_bins(ps_cabac, ps_bitstrm, 2);
21270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            AEV_TRACE("sao_eo_class", value, ps_cabac->u4_range);
21280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ps_sao->b3_y_type_idx += value;
21300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        }
21310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        if(c_idx == 1)
21330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        {
21340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            value = ihevcd_cabac_decode_bypass_bins(ps_cabac, ps_bitstrm, 2);
21350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            AEV_TRACE("sao_eo_class", value, ps_cabac->u4_range);
21360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ps_sao->b3_cb_type_idx += value;
21380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ps_sao->b3_cr_type_idx += value;
21390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        }
21400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
21410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(0 == c_idx)
21430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
21440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_sao->b4_y_offset_1 = sao_offset[0];
21450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_sao->b4_y_offset_2 = sao_offset[1];
21460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_sao->b4_y_offset_3 = sao_offset[2];
21470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_sao->b4_y_offset_4 = sao_offset[3];
21480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_sao->b5_y_band_pos = sao_band_position;
21500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
21510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    else if(1 == c_idx)
21520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
21530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_sao->b4_cb_offset_1 = sao_offset[0];
21540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_sao->b4_cb_offset_2 = sao_offset[1];
21550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_sao->b4_cb_offset_3 = sao_offset[2];
21560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_sao->b4_cb_offset_4 = sao_offset[3];
21570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_sao->b5_cb_band_pos = sao_band_position;
21590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
21600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    else // 2 == c_idx
21610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
21620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_sao->b4_cr_offset_1 = sao_offset[0];
21630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_sao->b4_cr_offset_2 = sao_offset[1];
21640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_sao->b4_cr_offset_3 = sao_offset[2];
21650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_sao->b4_cr_offset_4 = sao_offset[3];
21660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_sao->b5_cr_band_pos = sao_band_position;
21680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
21690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
21700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
21710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
21720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
21730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return ret;
21750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
21760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
21770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
21780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
21790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @brief
21802b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P *  Set ctb skip
21812b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P *
21822b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P * @par Description:
21832b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P *  During error, sets tu and pu params of a ctb as skip.
21842b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P *
21852b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P * @param[in] ps_codec
21862b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P *  Pointer to codec context
21872b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P *
21882b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P * @returns  None
21892b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P *
21902b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P * @remarks
21912b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P *
21922b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P *
21932b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P *******************************************************************************
21942b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P */
21952b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar Pvoid ihevcd_set_ctb_skip(codec_t *ps_codec)
21962b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P{
21972b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P    tu_t *ps_tu;
21982b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P    pu_t *ps_pu;
21992b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P    sps_t *ps_sps = ps_codec->s_parse.ps_sps;
22002b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P    WORD32 ctb_size = 1 << ps_sps->i1_log2_ctb_size;
22012b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P    WORD32 ctb_skip_wd, ctb_skip_ht;
22022b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P    WORD32 rows_remaining, cols_remaining;
22032b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P    WORD32 tu_abs_x, tu_abs_y;
22042b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P    WORD32 numbytes_row =  (ps_sps->i2_pic_width_in_luma_samples + 63) / 64;
22052b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P    UWORD8 *pu1_pic_intra_flag;
22062b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P    UWORD32 u4_mask;
22072b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P    WORD32 pu_x,pu_y;
22082b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P
22092b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P    /* Set pu wd and ht based on whether the ctb is complete or not */
22102b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P    rows_remaining = ps_sps->i2_pic_height_in_luma_samples
22112b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P                    - (ps_codec->s_parse.i4_ctb_y << ps_sps->i1_log2_ctb_size);
22122b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P    ctb_skip_ht = MIN(ctb_size, rows_remaining);
22132b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P
22142b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P    cols_remaining = ps_sps->i2_pic_width_in_luma_samples
22152b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P                    - (ps_codec->s_parse.i4_ctb_x << ps_sps->i1_log2_ctb_size);
22162b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P    ctb_skip_wd = MIN(ctb_size, cols_remaining);
22172b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P
22182b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P    ps_codec->s_parse.s_cu.i4_pred_mode = PRED_MODE_SKIP;
22192b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P    ps_codec->s_parse.s_cu.i4_part_mode = PART_2Nx2N;
22202b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P
22212b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P    for (pu_y = 0; pu_y < ctb_skip_ht ; pu_y += MIN_CU_SIZE)
22222b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P    {
22232b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P        for (pu_x = 0; pu_x < ctb_skip_wd ; pu_x += MIN_CU_SIZE)
22242b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P        {
22252b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            ps_tu = ps_codec->s_parse.ps_tu;
22262b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            ps_tu->b1_cb_cbf = 0;
22272b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            ps_tu->b1_cr_cbf = 0;
22282b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            ps_tu->b1_y_cbf = 0;
22292b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            ps_tu->b4_pos_x = pu_x >> 2;
22302b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            ps_tu->b4_pos_y = pu_y >> 2;
22312b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            ps_tu->b1_transquant_bypass = 0;
22322b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            ps_tu->b3_size = 1;
22332b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            ps_tu->b7_qp = ps_codec->s_parse.u4_qp;
22342b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            ps_tu->b3_chroma_intra_mode_idx = INTRA_PRED_CHROMA_IDX_NONE;
22352b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            ps_tu->b6_luma_intra_mode   = INTRA_PRED_NONE;
22362b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            ps_tu->b1_first_tu_in_cu = 1;
22372b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P
22382b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            ps_codec->s_parse.ps_tu++;
22392b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            ps_codec->s_parse.s_cu.i4_tu_cnt++;
22402b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            ps_codec->s_parse.i4_pic_tu_idx++;
22412b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P
22422b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            tu_abs_x = (ps_codec->s_parse.i4_ctb_x << ps_sps->i1_log2_ctb_size) + pu_x;
22432b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            tu_abs_y = (ps_codec->s_parse.i4_ctb_y << ps_sps->i1_log2_ctb_size) + pu_y;
22442b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            pu1_pic_intra_flag = ps_codec->s_parse.pu1_pic_intra_flag;
22452b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            pu1_pic_intra_flag += (tu_abs_y >> 3) * numbytes_row;
22462b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            pu1_pic_intra_flag += (tu_abs_x >> 6);
22472b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            u4_mask = (LSB_ONES((MIN_CU_SIZE >> 3)) << (((tu_abs_x) / 8) % 8));
22482b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            u4_mask = ~u4_mask;
22492b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            *pu1_pic_intra_flag &= u4_mask;
22502b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P
22512b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            ps_pu = ps_codec->s_parse.ps_pu;
22522b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            ps_pu->b2_part_idx = 0;
22532b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            ps_pu->b4_pos_x = pu_x >> 2;
22542b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            ps_pu->b4_pos_y = pu_y >> 2;
22552b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            ps_pu->b4_wd = 1;
22562b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            ps_pu->b4_ht = 1;
22572b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            ps_pu->b1_intra_flag = 0;
22582b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            ps_pu->b3_part_mode = ps_codec->s_parse.s_cu.i4_part_mode;
22592b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            ps_pu->b1_merge_flag = 1;
22602b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            ps_pu->b3_merge_idx = 0;
22612b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P
22622b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            ps_codec->s_parse.ps_pu++;
22632b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            ps_codec->s_parse.i4_pic_pu_idx++;
22642b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P        }
22652b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P    }
22662b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P}
22672b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P
22682b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P/**
22692b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P *******************************************************************************
22702b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P *
22712b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P * @brief
22720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Parses Slice data syntax
22730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
22740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @par Description:
22750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Parses Slice data syntax as per Section:7.3.9.1
22760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
22770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] ps_codec
22780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Pointer to codec context
22790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
22800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @returns  Error from IHEVCD_ERROR_T
22810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
22820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @remarks
22830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
22840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
22850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
22860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */
22870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarIHEVCD_ERROR_T ihevcd_parse_slice_data(codec_t *ps_codec)
22880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
22890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
22900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
2291453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P    WORD32 end_of_slice_flag = 0;
22920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    sps_t *ps_sps;
22930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    pps_t *ps_pps;
22940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    slice_header_t *ps_slice_hdr;
22950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 end_of_pic;
22960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    tile_t *ps_tile, *ps_tile_prev;
22970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 i;
22980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 ctb_addr;
22990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 tile_idx;
23000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 cabac_init_idc;
23010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 ctb_size;
23020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 num_ctb_in_row;
23030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 num_min4x4_in_ctb;
23040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 slice_qp;
23050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 slice_start_ctb_idx;
23060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 tile_start_ctb_idx;
23070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
23080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
23090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_slice_hdr = ps_codec->s_parse.ps_slice_hdr_base;
23100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_pps = ps_codec->s_parse.ps_pps_base;
23110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_sps = ps_codec->s_parse.ps_sps_base;
23120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
23130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Get current slice header, pps and sps */
23140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_slice_hdr += (ps_codec->s_parse.i4_cur_slice_idx & (MAX_SLICE_HDR_CNT - 1));
23150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_pps  += ps_slice_hdr->i1_pps_id;
23160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_sps  += ps_pps->i1_sps_id;
23170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
23180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(0 != ps_codec->s_parse.i4_cur_slice_idx)
23190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
23200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(!ps_slice_hdr->i1_dependent_slice_flag)
23210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
23229663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy            ps_codec->s_parse.i4_cur_independent_slice_idx =
23239663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                    ps_codec->s_parse.i4_cur_slice_idx & (MAX_SLICE_HDR_CNT - 1);
23240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
23250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
23260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
23270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
23280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ctb_size = 1 << ps_sps->i1_log2_ctb_size;
23290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    num_min4x4_in_ctb = (ctb_size / 4) * (ctb_size / 4);
23300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    num_ctb_in_row = ps_sps->i2_pic_wd_in_ctb;
23310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
23320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Update the parse context */
23330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(0 == ps_codec->i4_slice_error)
23340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
23350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.i4_ctb_x = ps_slice_hdr->i2_ctb_x;
23360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.i4_ctb_y = ps_slice_hdr->i2_ctb_y;
23370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
23380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.ps_pps = ps_pps;
23390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.ps_sps = ps_sps;
23400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.ps_slice_hdr = ps_slice_hdr;
23410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
23420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Derive Tile positions for the current CTB */
23430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Change this to lookup if required */
23440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ihevcd_get_tile_pos(ps_pps, ps_sps, ps_codec->s_parse.i4_ctb_x,
23450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_codec->s_parse.i4_ctb_y,
23460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        &ps_codec->s_parse.i4_ctb_tile_x,
23470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        &ps_codec->s_parse.i4_ctb_tile_y,
23480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        &tile_idx);
23490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.ps_tile = ps_pps->ps_tile + tile_idx;
23500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.i4_cur_tile_idx = tile_idx;
23510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_tile = ps_codec->s_parse.ps_tile;
23520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(tile_idx)
23530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_tile_prev = ps_tile - 1;
23540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else
23550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_tile_prev = ps_tile;
23560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
23570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* If the present slice is dependent, then store the previous
23580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * independent slices' ctb x and y values for decoding process */
23590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(0 == ps_codec->i4_slice_error)
23600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
23610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(1 == ps_slice_hdr->i1_dependent_slice_flag)
23620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
23630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /*If slice is present at the start of a new tile*/
23640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((0 == ps_codec->s_parse.i4_ctb_tile_x) && (0 == ps_codec->s_parse.i4_ctb_tile_y))
23650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
23660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->s_parse.i4_ctb_slice_x = 0;
23670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->s_parse.i4_ctb_slice_y = 0;
23680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
23690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
23700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
23710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(!ps_slice_hdr->i1_dependent_slice_flag)
23720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
23730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.i4_ctb_slice_x = 0;
23740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.i4_ctb_slice_y = 0;
23750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
23760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
23770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
23780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Frame level initializations */
23790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if((0 == ps_codec->s_parse.i4_ctb_y) &&
23800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    (0 == ps_codec->s_parse.i4_ctb_x))
23810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
23820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ret = ihevcd_parse_pic_init(ps_codec);
23830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret);
23840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
23850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.pu4_pic_tu_idx[0] = 0;
23860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.pu4_pic_pu_idx[0] = 0;
23870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.i4_cur_independent_slice_idx = 0;
23880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.i4_ctb_tile_x = 0;
23890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.i4_ctb_tile_y = 0;
23900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
23910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
23920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
23930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Updating the poc list of current slice to ps_mv_buf */
23940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        mv_buf_t *ps_mv_buf = ps_codec->s_parse.ps_cur_mv_buf;
23950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
23960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(ps_slice_hdr->i1_num_ref_idx_l1_active != 0)
23970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
23980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            for(i = 0; i < ps_slice_hdr->i1_num_ref_idx_l1_active; i++)
23990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
24009663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                ps_mv_buf->ai4_l1_collocated_poc[(ps_codec->s_parse.i4_cur_slice_idx & (MAX_SLICE_HDR_CNT - 1))][i] = ((pic_buf_t *)ps_slice_hdr->as_ref_pic_list1[i].pv_pic_buf)->i4_abs_poc;
24019663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                ps_mv_buf->ai1_l1_collocated_poc_lt[(ps_codec->s_parse.i4_cur_slice_idx & (MAX_SLICE_HDR_CNT - 1))][i] = ((pic_buf_t *)ps_slice_hdr->as_ref_pic_list1[i].pv_pic_buf)->u1_used_as_ref;
24020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
24030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
24040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
24050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(ps_slice_hdr->i1_num_ref_idx_l0_active != 0)
24060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
24070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            for(i = 0; i < ps_slice_hdr->i1_num_ref_idx_l0_active; i++)
24080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
24099663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                ps_mv_buf->ai4_l0_collocated_poc[(ps_codec->s_parse.i4_cur_slice_idx & (MAX_SLICE_HDR_CNT - 1))][i] = ((pic_buf_t *)ps_slice_hdr->as_ref_pic_list0[i].pv_pic_buf)->i4_abs_poc;
24109663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                ps_mv_buf->ai1_l0_collocated_poc_lt[(ps_codec->s_parse.i4_cur_slice_idx & (MAX_SLICE_HDR_CNT - 1))][i] = ((pic_buf_t *)ps_slice_hdr->as_ref_pic_list0[i].pv_pic_buf)->u1_used_as_ref;
24110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
24120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
24130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
24140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
24150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /*Initialize the low delay flag at the beginning of every slice*/
24160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if((0 == ps_codec->s_parse.i4_ctb_slice_x) || (0 == ps_codec->s_parse.i4_ctb_slice_y))
24170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
24180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Lowdelay flag */
24190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 cur_poc, ref_list_poc, flag = 1;
24200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        cur_poc = ps_slice_hdr->i4_abs_pic_order_cnt;
24210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(i = 0; i < ps_slice_hdr->i1_num_ref_idx_l0_active; i++)
24220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
24230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ref_list_poc = ((mv_buf_t *)ps_slice_hdr->as_ref_pic_list0[i].pv_mv_buf)->i4_abs_poc;
24240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(ref_list_poc > cur_poc)
24250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
24260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                flag = 0;
24270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                break;
24280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
24290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
24300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(flag && (ps_slice_hdr->i1_slice_type == BSLICE))
24310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
24320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            for(i = 0; i < ps_slice_hdr->i1_num_ref_idx_l1_active; i++)
24330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
24340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ref_list_poc = ((mv_buf_t *)ps_slice_hdr->as_ref_pic_list1[i].pv_mv_buf)->i4_abs_poc;
24350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(ref_list_poc > cur_poc)
24360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
24370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    flag = 0;
24380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    break;
24390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
24400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
24410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
24420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_slice_hdr->i1_low_delay_flag = flag;
24430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
24440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
24450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* initialize the cabac init idc based on slice type */
24460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ps_slice_hdr->i1_slice_type == ISLICE)
24470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
24480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        cabac_init_idc = 0;
24490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
24500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else if(ps_slice_hdr->i1_slice_type == PSLICE)
24510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
24520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        cabac_init_idc = ps_slice_hdr->i1_cabac_init_flag ? 2 : 1;
24530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
24540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else
24550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
24560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        cabac_init_idc = ps_slice_hdr->i1_cabac_init_flag ? 1 : 2;
24570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
24580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
24590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    slice_qp = ps_slice_hdr->i1_slice_qp_delta + ps_pps->i1_pic_init_qp;
24600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    slice_qp = CLIP3(slice_qp, 0, 51);
24610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
24620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /*Update QP value for every indepndent slice or for every dependent slice that begins at the start of a new tile*/
24630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if((0 == ps_slice_hdr->i1_dependent_slice_flag) ||
24640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ((1 == ps_slice_hdr->i1_dependent_slice_flag) && ((0 == ps_codec->s_parse.i4_ctb_tile_x) && (0 == ps_codec->s_parse.i4_ctb_tile_y))))
24650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
24660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.u4_qp = slice_qp;
24670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
24680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
24690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /*Cabac init at the beginning of a slice*/
24700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    //If the slice is a dependent slice, not present at the start of a tile
24718fff219facbecceee193e823d4faf7866524e92aNaveen Kumar P    if(0 == ps_codec->i4_slice_error)
24720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
24738fff219facbecceee193e823d4faf7866524e92aNaveen Kumar P        if((1 == ps_slice_hdr->i1_dependent_slice_flag) && (!((ps_codec->s_parse.i4_ctb_tile_x == 0) && (ps_codec->s_parse.i4_ctb_tile_y == 0))))
24740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
24758fff219facbecceee193e823d4faf7866524e92aNaveen Kumar P            if((0 == ps_pps->i1_entropy_coding_sync_enabled_flag) || (ps_pps->i1_entropy_coding_sync_enabled_flag && (0 != ps_codec->s_parse.i4_ctb_x)))
24768fff219facbecceee193e823d4faf7866524e92aNaveen Kumar P            {
24778fff219facbecceee193e823d4faf7866524e92aNaveen Kumar P                ihevcd_cabac_reset(&ps_codec->s_parse.s_cabac,
24788fff219facbecceee193e823d4faf7866524e92aNaveen Kumar P                                   &ps_codec->s_parse.s_bitstrm);
24798fff219facbecceee193e823d4faf7866524e92aNaveen Kumar P            }
24800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
24818fff219facbecceee193e823d4faf7866524e92aNaveen Kumar P        else if((0 == ps_pps->i1_entropy_coding_sync_enabled_flag) || (ps_pps->i1_entropy_coding_sync_enabled_flag && (0 != ps_codec->s_parse.i4_ctb_x)))
2482b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy        {
24838fff219facbecceee193e823d4faf7866524e92aNaveen Kumar P            ret = ihevcd_cabac_init(&ps_codec->s_parse.s_cabac,
24848fff219facbecceee193e823d4faf7866524e92aNaveen Kumar P                                    &ps_codec->s_parse.s_bitstrm,
24858fff219facbecceee193e823d4faf7866524e92aNaveen Kumar P                                    slice_qp,
24868fff219facbecceee193e823d4faf7866524e92aNaveen Kumar P                                    cabac_init_idc,
24878fff219facbecceee193e823d4faf7866524e92aNaveen Kumar P                                    &gau1_ihevc_cab_ctxts[cabac_init_idc][slice_qp][0]);
24888fff219facbecceee193e823d4faf7866524e92aNaveen Kumar P            if(ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS)
24898fff219facbecceee193e823d4faf7866524e92aNaveen Kumar P            {
24908fff219facbecceee193e823d4faf7866524e92aNaveen Kumar P                ps_codec->i4_slice_error = 1;
24918fff219facbecceee193e823d4faf7866524e92aNaveen Kumar P                end_of_slice_flag = 1;
24928fff219facbecceee193e823d4faf7866524e92aNaveen Kumar P                ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
24938fff219facbecceee193e823d4faf7866524e92aNaveen Kumar P            }
2494b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy        }
24950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
24960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
24970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
24980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    do
24990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
25000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
25010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
25020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 cur_ctb_idx = ps_codec->s_parse.i4_ctb_x
25030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            + ps_codec->s_parse.i4_ctb_y * (ps_sps->i2_pic_wd_in_ctb);
25040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(1 == ps_codec->i4_num_cores && 0 == cur_ctb_idx % RESET_TU_BUF_NCTB)
25050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
25060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->s_parse.ps_tu = ps_codec->s_parse.ps_pic_tu;
25070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->s_parse.i4_pic_tu_idx = 0;
25080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
25090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
25100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
25110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        end_of_pic = 0;
25120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Section:7.3.7 Coding tree unit syntax */
25130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* coding_tree_unit() inlined here */
25140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* If number of cores is greater than 1, then add job to the queue */
25150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        //TODO: Dual core implementation might need a different algo for better load balancing
25160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* At the start of ctb row parsing in a tile, queue a job for processing the current tile row */
25170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.i4_ctb_num_pcm_blks = 0;
25180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
25190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
25200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /*At the beginning of each tile-which is not the beginning of a slice, cabac context must be initialized.
25210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * Hence, check for the tile beginning here */
25220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(((0 == ps_codec->s_parse.i4_ctb_tile_x) && (0 == ps_codec->s_parse.i4_ctb_tile_y))
25230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        && (!((ps_tile->u1_pos_x == 0) && (ps_tile->u1_pos_y == 0)))
25240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        && (!((0 == ps_codec->s_parse.i4_ctb_slice_x) && (0 == ps_codec->s_parse.i4_ctb_slice_y))))
25250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
25260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            slice_qp = ps_slice_hdr->i1_slice_qp_delta + ps_pps->i1_pic_init_qp;
25270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            slice_qp = CLIP3(slice_qp, 0, 51);
25280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.u4_qp = slice_qp;
25290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
25300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ihevcd_get_tile_pos(ps_pps, ps_sps, ps_codec->s_parse.i4_ctb_x,
25310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                ps_codec->s_parse.i4_ctb_y,
25320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                &ps_codec->s_parse.i4_ctb_tile_x,
25330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                &ps_codec->s_parse.i4_ctb_tile_y,
25340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                &tile_idx);
25350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
25360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.ps_tile = ps_pps->ps_tile + tile_idx;
25370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.i4_cur_tile_idx = tile_idx;
25380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_tile_prev = ps_tile - 1;
25390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
25400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            tile_start_ctb_idx = ps_tile->u1_pos_x
25410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            + ps_tile->u1_pos_y * (ps_sps->i2_pic_wd_in_ctb);
25420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
25430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            slice_start_ctb_idx =  ps_slice_hdr->i2_ctb_x
25440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            + ps_slice_hdr->i2_ctb_y * (ps_sps->i2_pic_wd_in_ctb);
25450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
25460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /*For slices that span across multiple tiles*/
25470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(slice_start_ctb_idx < tile_start_ctb_idx)
25480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {       /* 2 Cases
25490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar             * 1 - slice spans across frame-width- but does not start from 1st column
25500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar             * 2 - Slice spans across multiple tiles anywhere is a frame
25510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar             */
25520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->s_parse.i4_ctb_slice_y = ps_tile->u1_pos_y - ps_slice_hdr->i2_ctb_y;
25530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(!(((ps_slice_hdr->i2_ctb_x + ps_tile_prev->u2_wd) % ps_sps->i2_pic_wd_in_ctb) == ps_tile->u1_pos_x)) //Case 2
25540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
25550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_slice_hdr->i2_ctb_y <= ps_tile->u1_pos_y)
25560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
25570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        //Check if ctb x is before or after
25580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        if(ps_slice_hdr->i2_ctb_x > ps_tile->u1_pos_x)
25590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        {
25600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ps_codec->s_parse.i4_ctb_slice_y -= 1;
25610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        }
25620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
25630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
25640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /*ps_codec->s_parse.i4_ctb_slice_y = ps_tile->u1_pos_y - ps_slice_hdr->i2_ctb_y;
25650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if (ps_slice_hdr->i2_ctb_y <= ps_tile->u1_pos_y)
25660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
25670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    //Check if ctb x is before or after
25680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if (ps_slice_hdr->i2_ctb_x > ps_tile->u1_pos_x )
25690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
25700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_codec->s_parse.i4_ctb_slice_y -= 1 ;
25710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
25720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }*/
25730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
25740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
25759663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy            /* Cabac init is done unconditionally at the start of the tile irrespective
25769663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy             * of whether it is a dependent or an independent slice */
25778fff219facbecceee193e823d4faf7866524e92aNaveen Kumar P            if(0 == ps_codec->i4_slice_error)
25780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
2579b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy                ret = ihevcd_cabac_init(&ps_codec->s_parse.s_cabac,
2580b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy                                        &ps_codec->s_parse.s_bitstrm,
2581b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy                                        slice_qp,
2582b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy                                        cabac_init_idc,
2583b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy                                        &gau1_ihevc_cab_ctxts[cabac_init_idc][slice_qp][0]);
2584b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy                if(ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS)
2585b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy                {
2586b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy                    ps_codec->i4_slice_error = 1;
2587b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy                    end_of_slice_flag = 1;
2588b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy                    ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
2589b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy                }
25900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
25910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
25920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
25930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* If number of cores is greater than 1, then add job to the queue */
25940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        //TODO: Dual core implementation might need a different algo for better load balancing
25950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* At the start of ctb row parsing in a tile, queue a job for processing the current tile row */
25960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
25970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(0 == ps_codec->s_parse.i4_ctb_tile_x)
25980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
25990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(1 < ps_codec->i4_num_cores)
26010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
26020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                proc_job_t s_job;
26030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                IHEVCD_ERROR_T ret;
26040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                s_job.i4_cmd    = CMD_PROCESS;
26050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                s_job.i2_ctb_cnt = (WORD16)ps_tile->u2_wd;
26060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                s_job.i2_ctb_x = (WORD16)ps_codec->s_parse.i4_ctb_x;
26070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                s_job.i2_ctb_y = (WORD16)ps_codec->s_parse.i4_ctb_y;
26080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                s_job.i2_slice_idx = (WORD16)ps_codec->s_parse.i4_cur_slice_idx;
26090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                s_job.i4_tu_coeff_data_ofst = (UWORD8 *)ps_codec->s_parse.pv_tu_coeff_data -
26100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                (UWORD8 *)ps_codec->s_parse.pv_pic_tu_coeff_data;
26110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ret = ihevcd_jobq_queue((jobq_t *)ps_codec->s_parse.pv_proc_jobq, &s_job, sizeof(proc_job_t), 1);
26120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS)
26140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    return ret;
26150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
26160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            else
26170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
26180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                process_ctxt_t *ps_proc = &ps_codec->as_process[0];
26190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                WORD32 tu_coeff_data_ofst = (UWORD8 *)ps_codec->s_parse.pv_tu_coeff_data -
26200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                (UWORD8 *)ps_codec->s_parse.pv_pic_tu_coeff_data;
26210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* If the codec is running in single core mode,
26230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                 * initialize zeroth process context
26240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                 * TODO: Dual core mode might need a different implementation instead of jobq
26250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                 */
26260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_proc->i4_ctb_cnt = ps_tile->u2_wd;
26280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_proc->i4_ctb_x   = ps_codec->s_parse.i4_ctb_x;
26290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_proc->i4_ctb_y   = ps_codec->s_parse.i4_ctb_y;
26300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_proc->i4_cur_slice_idx = ps_codec->s_parse.i4_cur_slice_idx;
26310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ihevcd_init_proc_ctxt(ps_proc, tu_coeff_data_ofst);
26330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
26340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
26350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Restore cabac context model from top right CTB if entropy sync is enabled */
26380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(ps_pps->i1_entropy_coding_sync_enabled_flag)
26390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
26400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /*TODO Handle single CTB and top-right belonging to a different slice */
26418fff219facbecceee193e823d4faf7866524e92aNaveen Kumar P            if(0 == ps_codec->s_parse.i4_ctb_x && 0 == ps_codec->i4_slice_error)
26420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
26430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                //WORD32 size = sizeof(ps_codec->s_parse.s_cabac.au1_ctxt_models);
26440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                WORD32 default_ctxt = 0;
26450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if((0 == ps_codec->s_parse.i4_ctb_slice_y) && (!ps_slice_hdr->i1_dependent_slice_flag))
26470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    default_ctxt = 1;
26480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(1 == ps_sps->i2_pic_wd_in_ctb)
26490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    default_ctxt = 1;
26500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->s_parse.u4_qp = slice_qp;
26520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(default_ctxt)
26530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
26540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    //memcpy(&ps_codec->s_parse.s_cabac.au1_ctxt_models, &gau1_ihevc_cab_ctxts[cabac_init_idc][slice_qp][0], size);
2655b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy                    ret = ihevcd_cabac_init(&ps_codec->s_parse.s_cabac,
2656b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy                                            &ps_codec->s_parse.s_bitstrm,
2657b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy                                            slice_qp,
2658b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy                                            cabac_init_idc,
2659b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy                                            &gau1_ihevc_cab_ctxts[cabac_init_idc][slice_qp][0]);
26600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2661b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy                    if(ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS)
2662b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy                    {
2663b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy                        ps_codec->i4_slice_error = 1;
2664b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy                        end_of_slice_flag = 1;
2665b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy                        ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
2666b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy                    }
26670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
26680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                else
26690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
26700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    //memcpy(&ps_codec->s_parse.s_cabac.au1_ctxt_models, &ps_codec->s_parse.s_cabac.au1_ctxt_models_sync, size);
2671b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy                    ret = ihevcd_cabac_init(&ps_codec->s_parse.s_cabac,
2672b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy                                            &ps_codec->s_parse.s_bitstrm,
2673b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy                                            slice_qp,
2674b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy                                            cabac_init_idc,
2675b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy                                            (const UWORD8 *)&ps_codec->s_parse.s_cabac.au1_ctxt_models_sync);
26760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2677b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy                    if(ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS)
2678b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy                    {
2679b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy                        ps_codec->i4_slice_error = 1;
2680b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy                        end_of_slice_flag = 1;
2681b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy                        ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
2682b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy                    }
26830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
26840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
26850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
26860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(0 == ps_codec->i4_slice_error)
26900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
26910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(ps_slice_hdr->i1_slice_sao_luma_flag || ps_slice_hdr->i1_slice_sao_chroma_flag)
26920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ihevcd_parse_sao(ps_codec);
26930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
26940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else
26950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
26960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            sao_t *ps_sao = ps_codec->s_parse.ps_pic_sao +
26970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ps_codec->s_parse.i4_ctb_x +
26980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ps_codec->s_parse.i4_ctb_y * ps_sps->i2_pic_wd_in_ctb;
26990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
27000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Default values */
27010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_sao->b3_y_type_idx = 0;
27020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_sao->b3_cb_type_idx = 0;
27030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_sao->b3_cr_type_idx = 0;
27040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
27050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
27060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        //AEV_TRACE("CTB x", ps_codec->s_parse.i4_ctb_x, 0);
27070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        //AEV_TRACE("CTB y", ps_codec->s_parse.i4_ctb_y, 0);
27080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
27090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
27100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 ctb_indx;
27110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ctb_indx = ps_codec->s_parse.i4_ctb_x + ps_sps->i2_pic_wd_in_ctb * ps_codec->s_parse.i4_ctb_y;
27120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.s_bs_ctxt.pu1_pic_qp_const_in_ctb[ctb_indx >> 3] |= (1 << (ctb_indx & 7));
27130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
27140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                UWORD16 *pu1_slice_idx = ps_codec->s_parse.pu1_slice_idx;
27150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_slice_idx[ctb_indx] = ps_codec->s_parse.i4_cur_independent_slice_idx;
27160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
27170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
27180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
27190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(0 == ps_codec->i4_slice_error)
27200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
2721453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P            tu_t *ps_tu = ps_codec->s_parse.ps_tu;
2722453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P            WORD32 i4_tu_cnt = ps_codec->s_parse.s_cu.i4_tu_cnt;
2723453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P            WORD32 i4_pic_tu_idx = ps_codec->s_parse.i4_pic_tu_idx;
2724453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P
2725453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P            pu_t *ps_pu = ps_codec->s_parse.ps_pu;
2726453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P            WORD32 i4_pic_pu_idx = ps_codec->s_parse.i4_pic_pu_idx;
2727453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P
2728453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P            UWORD8 *pu1_tu_coeff_data = (UWORD8 *)ps_codec->s_parse.pv_tu_coeff_data;
2729453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P
2730453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P            ret = ihevcd_parse_coding_quadtree(ps_codec,
2731453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P                                               (ps_codec->s_parse.i4_ctb_x << ps_sps->i1_log2_ctb_size),
2732453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P                                               (ps_codec->s_parse.i4_ctb_y << ps_sps->i1_log2_ctb_size),
2733453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P                                               ps_sps->i1_log2_ctb_size,
2734453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P                                               0);
2735453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P            /* Check for error */
2736453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P            if (ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS)
2737453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P            {
2738453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P                /* Reset tu and pu parameters, and signal current ctb as skip */
2739453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P                WORD32 tu_coeff_data_reset_size;
2740453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P
2741453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P                ps_codec->s_parse.ps_tu = ps_tu;
2742453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P                ps_codec->s_parse.s_cu.i4_tu_cnt = i4_tu_cnt;
2743453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P                ps_codec->s_parse.i4_pic_tu_idx = i4_pic_tu_idx;
2744453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P
2745453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P                ps_codec->s_parse.ps_pu = ps_pu;
2746453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P                ps_codec->s_parse.i4_pic_pu_idx = i4_pic_pu_idx;
2747453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P
2748453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P                tu_coeff_data_reset_size = (UWORD8 *)ps_codec->s_parse.pv_tu_coeff_data - pu1_tu_coeff_data;
2749453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P                memset(pu1_tu_coeff_data, 0, tu_coeff_data_reset_size);
2750453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P                ps_codec->s_parse.pv_tu_coeff_data = (void *)pu1_tu_coeff_data;
2751453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P
27522b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P                ihevcd_set_ctb_skip(ps_codec);
2753453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P
2754453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P                /* Set slice error to suppress further parsing and
2755453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P                 * signal end of slice.
2756453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P                 */
2757453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P                ps_codec->i4_slice_error = 1;
2758453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P                end_of_slice_flag = 1;
2759453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P                ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
2760453587489900c62280aadd1d1c8e3899dc57e965Naveen Kumar P            }
27610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
27620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else
27630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
27642b9fb0c2074d370a254b35e2489de2d94943578dNaveen Kumar P            ihevcd_set_ctb_skip(ps_codec);
27650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
27660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
27670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(0 == ps_codec->i4_slice_error)
27680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            end_of_slice_flag = ihevcd_cabac_decode_terminate(&ps_codec->s_parse.s_cabac, &ps_codec->s_parse.s_bitstrm);
27690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
27700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        AEV_TRACE("end_of_slice_flag", end_of_slice_flag, ps_codec->s_parse.s_cabac.u4_range);
27710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
27720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
27730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* In case of tiles or entropy sync, terminate cabac and copy cabac context backed up at the end of top-right CTB */
27740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(ps_pps->i1_tiles_enabled_flag || ps_pps->i1_entropy_coding_sync_enabled_flag)
27750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
27760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 end_of_tile = 0;
27770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 end_of_tile_row = 0;
27780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
27790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Take a back up of cabac context models if entropy sync is enabled */
27800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(ps_pps->i1_entropy_coding_sync_enabled_flag || ps_pps->i1_tiles_enabled_flag)
27810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
27820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(1 == ps_codec->s_parse.i4_ctb_x)
27830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
27840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    WORD32 size = sizeof(ps_codec->s_parse.s_cabac.au1_ctxt_models);
27850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    memcpy(&ps_codec->s_parse.s_cabac.au1_ctxt_models_sync, &ps_codec->s_parse.s_cabac.au1_ctxt_models, size);
27860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
27870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
27880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
27890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Since tiles and entropy sync are not enabled simultaneously, the following will not result in any problems */
27900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((ps_codec->s_parse.i4_ctb_tile_x + 1) == (ps_tile->u2_wd))
27910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
27920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                end_of_tile_row = 1;
27930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if((ps_codec->s_parse.i4_ctb_tile_y + 1) == ps_tile->u2_ht)
27940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    end_of_tile = 1;
27950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
27968fff219facbecceee193e823d4faf7866524e92aNaveen Kumar P            if((0 == end_of_slice_flag) && (0 == ps_codec->i4_slice_error) &&
27970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ((ps_pps->i1_tiles_enabled_flag && end_of_tile) ||
27980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            (ps_pps->i1_entropy_coding_sync_enabled_flag && end_of_tile_row)))
27990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
28000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                WORD32 end_of_sub_stream_one_bit;
28010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                end_of_sub_stream_one_bit = ihevcd_cabac_decode_terminate(&ps_codec->s_parse.s_cabac, &ps_codec->s_parse.s_bitstrm);
28020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                AEV_TRACE("end_of_sub_stream_one_bit", end_of_sub_stream_one_bit, ps_codec->s_parse.s_cabac.u4_range);
28030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
28040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* TODO: Remove the check for offset when HM is updated to include a byte unconditionally even for aligned location */
28050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* For Ittiam streams this check should not be there, for HM9.1 streams this should be there */
28060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(ps_codec->s_parse.s_bitstrm.u4_bit_ofst % 8)
28070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ihevcd_bits_flush_to_byte_boundary(&ps_codec->s_parse.s_bitstrm);
28080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
28090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                UNUSED(end_of_sub_stream_one_bit);
28100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
28110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
28120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
28130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 ctb_indx;
28140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
28150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ctb_addr = ps_codec->s_parse.i4_ctb_y * num_ctb_in_row + ps_codec->s_parse.i4_ctb_x;
28160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
28170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ctb_indx = ++ctb_addr;
28180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
28190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Store pu_idx for next CTB in frame level pu_idx array */
28200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
28210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            //In case of multiple tiles, if end-of-tile row is reached
28220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((ps_tile->u2_wd == (ps_codec->s_parse.i4_ctb_tile_x + 1)) && (ps_tile->u2_wd != ps_sps->i2_pic_wd_in_ctb))
28230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
28240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ctb_indx = (ps_sps->i2_pic_wd_in_ctb * (ps_codec->s_parse.i4_ctb_tile_y + 1 + ps_tile->u1_pos_y)) + ps_tile->u1_pos_x; //idx is the beginning of next row in current tile.
28250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(ps_tile->u2_ht == (ps_codec->s_parse.i4_ctb_tile_y + 1))
28260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
28270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    //If the current ctb is the last tile's last ctb
28280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if((ps_tile->u2_wd + ps_tile->u1_pos_x == ps_sps->i2_pic_wd_in_ctb) && ((ps_tile->u2_ht + ps_tile->u1_pos_y == ps_sps->i2_pic_ht_in_ctb)))
28290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
28300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ctb_indx = ctb_addr; //Next continuous ctb address
28310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
28320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    else //Not last tile's end , but a tile end
28330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
28340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        tile_t *ps_next_tile = ps_codec->s_parse.ps_tile + 1;
28350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ctb_indx = ps_next_tile->u1_pos_x + (ps_next_tile->u1_pos_y * ps_sps->i2_pic_wd_in_ctb); //idx is the beginning of first row in next tile.
28360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
28370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
28380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
28390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
28400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.pu4_pic_pu_idx[ctb_indx] = ps_codec->s_parse.i4_pic_pu_idx;
28410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.i4_next_pu_ctb_cnt = ctb_indx;
28420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
28430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.pu1_pu_map += num_min4x4_in_ctb;
28440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
28450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Store tu_idx for next CTB in frame level tu_idx array */
28460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(1 == ps_codec->i4_num_cores)
28470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
28480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ctb_indx = (0 == ctb_addr % RESET_TU_BUF_NCTB) ?
28490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                RESET_TU_BUF_NCTB : ctb_addr % RESET_TU_BUF_NCTB;
28500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
28510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                //In case of multiple tiles, if end-of-tile row is reached
28520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if((ps_tile->u2_wd == (ps_codec->s_parse.i4_ctb_tile_x + 1)) && (ps_tile->u2_wd != ps_sps->i2_pic_wd_in_ctb))
28530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
28540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ctb_indx = (ps_sps->i2_pic_wd_in_ctb * (ps_codec->s_parse.i4_ctb_tile_y + 1 + ps_tile->u1_pos_y)) + ps_tile->u1_pos_x; //idx is the beginning of next row in current tile.
28550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_tile->u2_ht == (ps_codec->s_parse.i4_ctb_tile_y + 1))
28560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
28570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        //If the current ctb is the last tile's last ctb
28580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        if((ps_tile->u2_wd + ps_tile->u1_pos_x == ps_sps->i2_pic_wd_in_ctb) && ((ps_tile->u2_ht + ps_tile->u1_pos_y == ps_sps->i2_pic_ht_in_ctb)))
28590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        {
28600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ctb_indx = (0 == ctb_addr % RESET_TU_BUF_NCTB) ?
28610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            RESET_TU_BUF_NCTB : ctb_addr % RESET_TU_BUF_NCTB;
28620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        }
28630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        else  //Not last tile's end , but a tile end
28640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        {
28650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            tile_t *ps_next_tile = ps_codec->s_parse.ps_tile + 1;
28660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ctb_indx =  ps_next_tile->u1_pos_x + (ps_next_tile->u1_pos_y * ps_sps->i2_pic_wd_in_ctb); //idx is the beginning of first row in next tile.
28670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        }
28680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
28690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
28700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->s_parse.i4_next_tu_ctb_cnt = ctb_indx;
28710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->s_parse.pu4_pic_tu_idx[ctb_indx] = ps_codec->s_parse.i4_pic_tu_idx;
28720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
28730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            else
28740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
28750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ctb_indx = ctb_addr;
28760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if((ps_tile->u2_wd == (ps_codec->s_parse.i4_ctb_tile_x + 1)) && (ps_tile->u2_wd != ps_sps->i2_pic_wd_in_ctb))
28770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
28780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ctb_indx = (ps_sps->i2_pic_wd_in_ctb * (ps_codec->s_parse.i4_ctb_tile_y + 1 + ps_tile->u1_pos_y)) + ps_tile->u1_pos_x; //idx is the beginning of next row in current tile.
28790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_tile->u2_ht == (ps_codec->s_parse.i4_ctb_tile_y + 1))
28800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
28810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        //If the current ctb is the last tile's last ctb
28820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        if((ps_tile->u2_wd + ps_tile->u1_pos_x == ps_sps->i2_pic_wd_in_ctb) && ((ps_tile->u2_ht + ps_tile->u1_pos_y == ps_sps->i2_pic_ht_in_ctb)))
28830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        {
28840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ctb_indx = ctb_addr;
28850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        }
28860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        else  //Not last tile's end , but a tile end
28870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        {
28880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            tile_t *ps_next_tile = ps_codec->s_parse.ps_tile + 1;
28890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ctb_indx =  ps_next_tile->u1_pos_x + (ps_next_tile->u1_pos_y * ps_sps->i2_pic_wd_in_ctb); //idx is the beginning of first row in next tile.
28900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        }
28910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
28920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
28930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->s_parse.i4_next_tu_ctb_cnt = ctb_indx;
28940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->s_parse.pu4_pic_tu_idx[ctb_indx] = ps_codec->s_parse.i4_pic_tu_idx;
28950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
28960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.pu1_tu_map += num_min4x4_in_ctb;
28970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
28980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
28999663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy        /* QP array population has to be done if deblocking is enabled in the picture
29009663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy         * but some of the slices in the pic have it disabled */
29019663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy        if((0 != ps_codec->i4_disable_deblk_pic) &&
29029663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                (1 == ps_slice_hdr->i1_slice_disable_deblocking_filter_flag))
29039663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy        {
29049663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy            bs_ctxt_t *ps_bs_ctxt = &ps_codec->s_parse.s_bs_ctxt;
29059663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy            WORD32 log2_ctb_size = ps_sps->i1_log2_ctb_size;
29069663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy            UWORD8 *pu1_qp;
29079663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy            WORD32 qp_strd;
29089663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy            WORD32 u4_qp_const_in_ctb;
29099663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy            WORD32 cur_ctb_idx;
29109663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy            WORD32 next_ctb_idx;
29119663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy            WORD32 cur_tu_idx;
29129663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy            WORD32 i4_ctb_tu_cnt;
29139663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy            tu_t *ps_tu;
29149663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy
29159663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy            cur_ctb_idx = ps_codec->s_parse.i4_ctb_x + ps_sps->i2_pic_wd_in_ctb * ps_codec->s_parse.i4_ctb_y;
29169663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy            /* ctb_size/8 elements per CTB */
29179663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy            qp_strd = ps_sps->i2_pic_wd_in_ctb << (log2_ctb_size - 3);
29189663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy            pu1_qp = ps_bs_ctxt->pu1_pic_qp + ((ps_codec->s_parse.i4_ctb_x + ps_codec->s_parse.i4_ctb_y * qp_strd) << (log2_ctb_size - 3));
29199663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy
29209663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy            u4_qp_const_in_ctb = ps_bs_ctxt->pu1_pic_qp_const_in_ctb[cur_ctb_idx >> 3] & (1 << (cur_ctb_idx & 7));
29219663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy
29229663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy            next_ctb_idx = ps_codec->s_parse.i4_next_tu_ctb_cnt;
29239663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy            if(1 == ps_codec->i4_num_cores)
29249663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy            {
29259663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                i4_ctb_tu_cnt = ps_codec->s_parse.pu4_pic_tu_idx[next_ctb_idx] -
29269663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                                ps_codec->s_parse.pu4_pic_tu_idx[cur_ctb_idx % RESET_TU_BUF_NCTB];
29279663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy
29289663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                cur_tu_idx = ps_codec->s_parse.pu4_pic_tu_idx[cur_ctb_idx % RESET_TU_BUF_NCTB];
29299663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy            }
29309663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy            else
29319663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy            {
29329663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                i4_ctb_tu_cnt = ps_codec->s_parse.pu4_pic_tu_idx[next_ctb_idx] -
29339663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                                ps_codec->s_parse.pu4_pic_tu_idx[cur_ctb_idx];
29349663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy
29359663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                cur_tu_idx = ps_codec->s_parse.pu4_pic_tu_idx[cur_ctb_idx];
29369663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy            }
29379663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy
29389663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy            ps_tu = &ps_codec->s_parse.ps_pic_tu[cur_tu_idx];
29399663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy
29409663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy            if(u4_qp_const_in_ctb)
29419663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy            {
29429663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                pu1_qp[0] = ps_tu->b7_qp;
29439663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy            }
29449663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy            else
29459663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy            {
29469663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                for(i = 0; i < i4_ctb_tu_cnt; i++, ps_tu++)
29479663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                {
29489663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                    WORD32 start_pos_x;
29499663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                    WORD32 start_pos_y;
29509663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                    WORD32 tu_size;
29519663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy
29529663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                    /* start_pos_x and start_pos_y are in units of min TU size (4x4) */
29539663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                    start_pos_x = ps_tu->b4_pos_x;
29549663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                    start_pos_y = ps_tu->b4_pos_y;
29559663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy
29569663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                    tu_size = 1 << (ps_tu->b3_size + 2);
29579663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                    tu_size >>= 2; /* TU size divided by 4 */
29589663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy
29599663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                    if(0 == (start_pos_x & 1) && 0 == (start_pos_y & 1))
29609663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                    {
29619663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                        WORD32 row, col;
29629663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                        for(row = start_pos_y; row < start_pos_y + tu_size; row += 2)
29639663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                        {
29649663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                            for(col = start_pos_x; col < start_pos_x + tu_size; col += 2)
29659663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                            {
29669663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                                pu1_qp[(row >> 1) * qp_strd + (col >> 1)] = ps_tu->b7_qp;
29679663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                            }
29689663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                        }
29699663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                    }
29709663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                }
29719663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy            }
29729663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy        }
29730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
29740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(ps_codec->i4_num_cores <= MV_PRED_NUM_CORES_THRESHOLD)
29750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
29760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /*************************************************/
29770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /****************   MV pred **********************/
29780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /*************************************************/
29790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD8 u1_top_ctb_avail = 1;
29800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD8 u1_left_ctb_avail = 1;
29810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD8 u1_top_lt_ctb_avail = 1;
29820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD8 u1_top_rt_ctb_avail = 1;
29830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD16 i2_wd_in_ctb;
29840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
29850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            tile_start_ctb_idx = ps_tile->u1_pos_x
29860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            + ps_tile->u1_pos_y * (ps_sps->i2_pic_wd_in_ctb);
29870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
29880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            slice_start_ctb_idx =  ps_slice_hdr->i2_ctb_x
29890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            + ps_slice_hdr->i2_ctb_y * (ps_sps->i2_pic_wd_in_ctb);
29900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
29910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((slice_start_ctb_idx < tile_start_ctb_idx))
29920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
29930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                //Slices span across multiple tiles.
29940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                i2_wd_in_ctb = ps_sps->i2_pic_wd_in_ctb;
29950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
29960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            else
29970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
29980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                i2_wd_in_ctb = ps_tile->u2_wd;
29990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
30000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* slice and tile boundaries */
30010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((0 == ps_codec->s_parse.i4_ctb_y) || (0 == ps_codec->s_parse.i4_ctb_tile_y))
30020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
30030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                u1_top_ctb_avail = 0;
30040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                u1_top_lt_ctb_avail = 0;
30050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                u1_top_rt_ctb_avail = 0;
30060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
30070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
30080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((0 == ps_codec->s_parse.i4_ctb_x) || (0 == ps_codec->s_parse.i4_ctb_tile_x))
30090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
30100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                u1_left_ctb_avail = 0;
30110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                u1_top_lt_ctb_avail = 0;
30120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if((0 == ps_codec->s_parse.i4_ctb_slice_y) || (0 == ps_codec->s_parse.i4_ctb_tile_y))
30130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
30140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    u1_top_ctb_avail = 0;
30150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if((i2_wd_in_ctb - 1) != ps_codec->s_parse.i4_ctb_slice_x) //TODO: For tile, not implemented
30160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
30170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        u1_top_rt_ctb_avail = 0;
30180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
30190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
30200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
30210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /*For slices not beginning at start of a ctb row*/
30220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            else if(ps_codec->s_parse.i4_ctb_x > 0)
30230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
30240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if((0 == ps_codec->s_parse.i4_ctb_slice_y) || (0 == ps_codec->s_parse.i4_ctb_tile_y))
30250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
30260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    u1_top_ctb_avail = 0;
30270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    u1_top_lt_ctb_avail = 0;
30280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(0 == ps_codec->s_parse.i4_ctb_slice_x)
30290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
30300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        u1_left_ctb_avail = 0;
30310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
30320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if((i2_wd_in_ctb - 1) != ps_codec->s_parse.i4_ctb_slice_x)
30330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
30340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        u1_top_rt_ctb_avail = 0;
30350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
30360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
30370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                else if((1 == ps_codec->s_parse.i4_ctb_slice_y) && (0 == ps_codec->s_parse.i4_ctb_slice_x))
30380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
30390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    u1_top_lt_ctb_avail = 0;
30400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
30410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
30420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
30430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(((ps_sps->i2_pic_wd_in_ctb - 1) == ps_codec->s_parse.i4_ctb_x) || ((ps_tile->u2_wd - 1) == ps_codec->s_parse.i4_ctb_tile_x))
30440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
30450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                u1_top_rt_ctb_avail = 0;
30460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
30470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
30480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(PSLICE == ps_slice_hdr->i1_slice_type
30490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            || BSLICE == ps_slice_hdr->i1_slice_type)
30500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
30510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                mv_ctxt_t s_mv_ctxt;
30520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                process_ctxt_t *ps_proc;
30530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                UWORD32 *pu4_ctb_top_pu_idx;
30540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                UWORD32 *pu4_ctb_left_pu_idx;
30550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                UWORD32 *pu4_ctb_top_left_pu_idx;
30560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                WORD32 i4_ctb_pu_cnt;
30570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                WORD32 cur_ctb_idx;
30580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                WORD32 next_ctb_idx;
30590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                WORD32 cur_pu_idx;
30600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_proc = &ps_codec->as_process[(ps_codec->i4_num_cores == 1) ? 1 : (ps_codec->i4_num_cores - 1)];
30610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                cur_ctb_idx = ps_codec->s_parse.i4_ctb_x
30620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                + ps_codec->s_parse.i4_ctb_y * (ps_sps->i2_pic_wd_in_ctb);
30630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                next_ctb_idx = ps_codec->s_parse.i4_next_pu_ctb_cnt;
30640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                i4_ctb_pu_cnt = ps_codec->s_parse.pu4_pic_pu_idx[next_ctb_idx]
30650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                - ps_codec->s_parse.pu4_pic_pu_idx[cur_ctb_idx];
30660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
30670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                cur_pu_idx = ps_codec->s_parse.pu4_pic_pu_idx[cur_ctb_idx];
30680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
30690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu4_ctb_top_pu_idx = ps_proc->pu4_pic_pu_idx_top
30700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                + (ps_codec->s_parse.i4_ctb_x * ctb_size / MIN_PU_SIZE);
30710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu4_ctb_left_pu_idx = ps_proc->pu4_pic_pu_idx_left;
30720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu4_ctb_top_left_pu_idx = &ps_proc->u4_ctb_top_left_pu_idx;
30730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
30740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Initializing s_mv_ctxt */
30750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
30760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    s_mv_ctxt.ps_pps = ps_pps;
30770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    s_mv_ctxt.ps_sps = ps_sps;
30780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    s_mv_ctxt.ps_slice_hdr = ps_slice_hdr;
30790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    s_mv_ctxt.i4_ctb_x = ps_codec->s_parse.i4_ctb_x;
30800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    s_mv_ctxt.i4_ctb_y = ps_codec->s_parse.i4_ctb_y;
30810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    s_mv_ctxt.ps_pu = &ps_codec->s_parse.ps_pic_pu[cur_pu_idx];
30820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    s_mv_ctxt.ps_pic_pu = ps_codec->s_parse.ps_pic_pu;
30830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    s_mv_ctxt.ps_tile = ps_tile;
30840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    s_mv_ctxt.pu4_pic_pu_idx_map = ps_proc->pu4_pic_pu_idx_map;
30850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    s_mv_ctxt.pu4_pic_pu_idx = ps_codec->s_parse.pu4_pic_pu_idx;
30860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    s_mv_ctxt.pu1_pic_pu_map = ps_codec->s_parse.pu1_pic_pu_map;
30870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    s_mv_ctxt.i4_ctb_pu_cnt = i4_ctb_pu_cnt;
30880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    s_mv_ctxt.i4_ctb_start_pu_idx = cur_pu_idx;
30890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    s_mv_ctxt.u1_top_ctb_avail = u1_top_ctb_avail;
30900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    s_mv_ctxt.u1_top_rt_ctb_avail = u1_top_rt_ctb_avail;
30910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    s_mv_ctxt.u1_top_lt_ctb_avail = u1_top_lt_ctb_avail;
30920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    s_mv_ctxt.u1_left_ctb_avail = u1_left_ctb_avail;
30930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
30940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
30950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ihevcd_get_mv_ctb(&s_mv_ctxt, pu4_ctb_top_pu_idx,
30960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                  pu4_ctb_left_pu_idx, pu4_ctb_top_left_pu_idx);
30970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
30980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
30990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            else
31000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
31010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                WORD32 num_minpu_in_ctb = (ctb_size / MIN_PU_SIZE) * (ctb_size / MIN_PU_SIZE);
31020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                UWORD8 *pu1_pic_pu_map_ctb = ps_codec->s_parse.pu1_pic_pu_map +
31030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                (ps_codec->s_parse.i4_ctb_x + ps_codec->s_parse.i4_ctb_y * ps_sps->i2_pic_wd_in_ctb) * num_minpu_in_ctb;
31040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                process_ctxt_t *ps_proc = &ps_codec->as_process[(ps_codec->i4_num_cores == 1) ? 1 : (ps_codec->i4_num_cores - 1)];
31050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                WORD32 row, col;
31060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                WORD32 pu_cnt;
31070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                WORD32 num_pu_per_ctb;
31080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                WORD32 cur_ctb_idx;
31090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                WORD32 next_ctb_idx;
31100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                WORD32 ctb_start_pu_idx;
31110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                UWORD32 *pu4_nbr_pu_idx = ps_proc->pu4_pic_pu_idx_map;
31120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                WORD32 nbr_pu_idx_strd = MAX_CTB_SIZE / MIN_PU_SIZE + 2;
31130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu_t *ps_pu;
311443f126112a8f2000cd0744f2fc5d545ff1a9a70cNaveen Kumar P                WORD32 ctb_size_in_min_pu = (ctb_size / MIN_PU_SIZE);
31150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
31160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Neighbor PU idx update inside CTB */
31170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* 1byte per 4x4. Indicates the PU idx that 4x4 block belongs to */
31180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
31190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                cur_ctb_idx = ps_codec->s_parse.i4_ctb_x
31200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                + ps_codec->s_parse.i4_ctb_y * (ps_sps->i2_pic_wd_in_ctb);
31210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                next_ctb_idx = ps_codec->s_parse.i4_next_pu_ctb_cnt;
31220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                num_pu_per_ctb = ps_codec->s_parse.pu4_pic_pu_idx[next_ctb_idx]
31230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                - ps_codec->s_parse.pu4_pic_pu_idx[cur_ctb_idx];
31240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ctb_start_pu_idx = ps_codec->s_parse.pu4_pic_pu_idx[cur_ctb_idx];
31250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_pu = &ps_codec->s_parse.ps_pic_pu[ctb_start_pu_idx];
31260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
31270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(pu_cnt = 0; pu_cnt < num_pu_per_ctb; pu_cnt++, ps_pu++)
31280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
31290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    UWORD32 cur_pu_idx;
31300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    WORD32 pu_ht = (ps_pu->b4_ht + 1) << 2;
31310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    WORD32 pu_wd = (ps_pu->b4_wd + 1) << 2;
31320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
31330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    cur_pu_idx = ctb_start_pu_idx + pu_cnt;
31340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
31350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    for(row = 0; row < pu_ht / MIN_PU_SIZE; row++)
31360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        for(col = 0; col < pu_wd / MIN_PU_SIZE; col++)
31370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            pu4_nbr_pu_idx[(1 + ps_pu->b4_pos_x + col)
31380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            + (1 + ps_pu->b4_pos_y + row)
31390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            * nbr_pu_idx_strd] =
31400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            cur_pu_idx;
31410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
31420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
31430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Updating Top and Left pointers */
31440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
31450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    WORD32 rows_remaining = ps_sps->i2_pic_height_in_luma_samples
31460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    - (ps_codec->s_parse.i4_ctb_y << ps_sps->i1_log2_ctb_size);
31470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    WORD32 ctb_size_left = MIN(ctb_size, rows_remaining);
31480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
31490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    /* Top Left */
31500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    /* saving top left before updating top ptr, as updating top ptr will overwrite the top left for the next ctb */
31510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_proc->u4_ctb_top_left_pu_idx = ps_proc->pu4_pic_pu_idx_top[(ps_codec->s_parse.i4_ctb_x * ctb_size / MIN_PU_SIZE) + ctb_size / MIN_PU_SIZE - 1];
31520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    for(i = 0; i < ctb_size / MIN_PU_SIZE; i++)
31530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
31540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        /* Left */
31550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        /* Last column of au4_nbr_pu_idx */
31560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_proc->pu4_pic_pu_idx_left[i] = pu4_nbr_pu_idx[(ctb_size / MIN_PU_SIZE)
31570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        + (i + 1) * nbr_pu_idx_strd];
31580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        /* Top */
31590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        /* Last row of au4_nbr_pu_idx */
31600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_proc->pu4_pic_pu_idx_top[(ps_codec->s_parse.i4_ctb_x * ctb_size / MIN_PU_SIZE) + i] =
31610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        pu4_nbr_pu_idx[(ctb_size_left / MIN_PU_SIZE) * nbr_pu_idx_strd + i + 1];
31620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
31630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
31640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
316543f126112a8f2000cd0744f2fc5d545ff1a9a70cNaveen Kumar P
316643f126112a8f2000cd0744f2fc5d545ff1a9a70cNaveen Kumar P                /* Updating the CTB level PU idx (Used for collocated MV pred)*/
316743f126112a8f2000cd0744f2fc5d545ff1a9a70cNaveen Kumar P                {
316843f126112a8f2000cd0744f2fc5d545ff1a9a70cNaveen Kumar P                    WORD32 ctb_row, ctb_col, index_pic_map, index_nbr_map;
316943f126112a8f2000cd0744f2fc5d545ff1a9a70cNaveen Kumar P                    WORD32 first_pu_of_ctb;
317043f126112a8f2000cd0744f2fc5d545ff1a9a70cNaveen Kumar P                    first_pu_of_ctb = pu4_nbr_pu_idx[1 + nbr_pu_idx_strd];
317143f126112a8f2000cd0744f2fc5d545ff1a9a70cNaveen Kumar P
317243f126112a8f2000cd0744f2fc5d545ff1a9a70cNaveen Kumar P                    index_pic_map = 0 * ctb_size_in_min_pu + 0;
317343f126112a8f2000cd0744f2fc5d545ff1a9a70cNaveen Kumar P                    index_nbr_map = (0 + 1) * nbr_pu_idx_strd + (0 + 1);
317443f126112a8f2000cd0744f2fc5d545ff1a9a70cNaveen Kumar P
317543f126112a8f2000cd0744f2fc5d545ff1a9a70cNaveen Kumar P                    for(ctb_row = 0; ctb_row < ctb_size_in_min_pu; ctb_row++)
317643f126112a8f2000cd0744f2fc5d545ff1a9a70cNaveen Kumar P                    {
317743f126112a8f2000cd0744f2fc5d545ff1a9a70cNaveen Kumar P                        for(ctb_col = 0; ctb_col < ctb_size_in_min_pu; ctb_col++)
317843f126112a8f2000cd0744f2fc5d545ff1a9a70cNaveen Kumar P                        {
317943f126112a8f2000cd0744f2fc5d545ff1a9a70cNaveen Kumar P                            pu1_pic_pu_map_ctb[index_pic_map + ctb_col] = pu4_nbr_pu_idx[index_nbr_map + ctb_col]
318043f126112a8f2000cd0744f2fc5d545ff1a9a70cNaveen Kumar P                                            - first_pu_of_ctb;
318143f126112a8f2000cd0744f2fc5d545ff1a9a70cNaveen Kumar P                        }
318243f126112a8f2000cd0744f2fc5d545ff1a9a70cNaveen Kumar P                        index_pic_map += ctb_size_in_min_pu;
318343f126112a8f2000cd0744f2fc5d545ff1a9a70cNaveen Kumar P                        index_nbr_map += nbr_pu_idx_strd;
318443f126112a8f2000cd0744f2fc5d545ff1a9a70cNaveen Kumar P                    }
318543f126112a8f2000cd0744f2fc5d545ff1a9a70cNaveen Kumar P                }
31860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
31870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
31880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /*************************************************/
31890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /******************  BS, QP  *********************/
31900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /*************************************************/
31910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Check if deblock is disabled for the current slice or if it is disabled for the current picture
31920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar             * because of disable deblock api
31930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar             */
31940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(0 == ps_codec->i4_disable_deblk_pic)
31950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
31969663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                /* Boundary strength calculation is done irrespective of whether deblocking is disabled
31979663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                 * in the slice or not, to handle deblocking slice boundaries */
31989663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                if((0 == ps_codec->i4_slice_error))
31990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
32000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    WORD32 i4_ctb_tu_cnt;
32010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    WORD32 cur_ctb_idx, next_ctb_idx;
32020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    WORD32 cur_pu_idx;
32030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    WORD32 cur_tu_idx;
32040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    process_ctxt_t *ps_proc;
32050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
32060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_proc = &ps_codec->as_process[(ps_codec->i4_num_cores == 1) ? 1 : (ps_codec->i4_num_cores - 1)];
32070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    cur_ctb_idx = ps_codec->s_parse.i4_ctb_x
32080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + ps_codec->s_parse.i4_ctb_y * (ps_sps->i2_pic_wd_in_ctb);
32090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
32100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    cur_pu_idx = ps_codec->s_parse.pu4_pic_pu_idx[cur_ctb_idx];
32110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    next_ctb_idx = ps_codec->s_parse.i4_next_tu_ctb_cnt;
32120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(1 == ps_codec->i4_num_cores)
32130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
32140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        i4_ctb_tu_cnt = ps_codec->s_parse.pu4_pic_tu_idx[next_ctb_idx] -
32150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        ps_codec->s_parse.pu4_pic_tu_idx[cur_ctb_idx % RESET_TU_BUF_NCTB];
32160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
32170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        cur_tu_idx = ps_codec->s_parse.pu4_pic_tu_idx[cur_ctb_idx % RESET_TU_BUF_NCTB];
32180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
32190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    else
32200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
32210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        i4_ctb_tu_cnt = ps_codec->s_parse.pu4_pic_tu_idx[next_ctb_idx] -
32220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        ps_codec->s_parse.pu4_pic_tu_idx[cur_ctb_idx];
32230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
32240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        cur_tu_idx = ps_codec->s_parse.pu4_pic_tu_idx[cur_ctb_idx];
32250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
32260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
32270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_parse.s_bs_ctxt.ps_pps = ps_codec->s_parse.ps_pps;
32280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_parse.s_bs_ctxt.ps_sps = ps_codec->s_parse.ps_sps;
32290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_parse.s_bs_ctxt.ps_codec = ps_codec;
32300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_parse.s_bs_ctxt.i4_ctb_tu_cnt = i4_ctb_tu_cnt;
32310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_parse.s_bs_ctxt.i4_ctb_x = ps_codec->s_parse.i4_ctb_x;
32320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_parse.s_bs_ctxt.i4_ctb_y = ps_codec->s_parse.i4_ctb_y;
32330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_parse.s_bs_ctxt.i4_ctb_tile_x = ps_codec->s_parse.i4_ctb_tile_x;
32340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_parse.s_bs_ctxt.i4_ctb_tile_y = ps_codec->s_parse.i4_ctb_tile_y;
32350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_parse.s_bs_ctxt.i4_ctb_slice_x = ps_codec->s_parse.i4_ctb_slice_x;
32360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_parse.s_bs_ctxt.i4_ctb_slice_y = ps_codec->s_parse.i4_ctb_slice_y;
32370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_parse.s_bs_ctxt.ps_tu = &ps_codec->s_parse.ps_pic_tu[cur_tu_idx];
32380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_parse.s_bs_ctxt.ps_pu = &ps_codec->s_parse.ps_pic_pu[cur_pu_idx];
32390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_parse.s_bs_ctxt.pu4_pic_pu_idx_map = ps_proc->pu4_pic_pu_idx_map;
32400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_parse.s_bs_ctxt.i4_next_pu_ctb_cnt = ps_codec->s_parse.i4_next_pu_ctb_cnt;
32410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_parse.s_bs_ctxt.i4_next_tu_ctb_cnt = ps_codec->s_parse.i4_next_tu_ctb_cnt;
32420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_parse.s_bs_ctxt.pu1_slice_idx = ps_codec->s_parse.pu1_slice_idx;
32430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_parse.s_bs_ctxt.ps_slice_hdr = ps_codec->s_parse.ps_slice_hdr;
32440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_parse.s_bs_ctxt.ps_tile = ps_codec->s_parse.ps_tile;
32450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
32460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ISLICE == ps_slice_hdr->i1_slice_type)
32470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
32480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ihevcd_ctb_boundary_strength_islice(&ps_codec->s_parse.s_bs_ctxt);
32490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
32500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    else
32510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
32520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ihevcd_ctb_boundary_strength_pbslice(&ps_codec->s_parse.s_bs_ctxt);
32530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
32540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
32559663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy
32569663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                /* Boundary strength is set to zero if deblocking is disabled for the current slice */
32579663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                if(0 != ps_slice_hdr->i1_slice_disable_deblocking_filter_flag)
32580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
3259707042fda96ebede81408b854385173483798bcdHarish Mahendrakar                    WORD32 bs_strd = (ps_sps->i2_pic_wd_in_ctb + 1) * (ctb_size * ctb_size / 8 / 16);
3260707042fda96ebede81408b854385173483798bcdHarish Mahendrakar
32610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    UWORD32 *pu4_vert_bs = (UWORD32 *)((UWORD8 *)ps_codec->s_parse.s_bs_ctxt.pu4_pic_vert_bs +
32620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    ps_codec->s_parse.i4_ctb_x * (ctb_size * ctb_size / 8 / 16) +
3263707042fda96ebede81408b854385173483798bcdHarish Mahendrakar                                    ps_codec->s_parse.i4_ctb_y * bs_strd);
32640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    UWORD32 *pu4_horz_bs = (UWORD32 *)((UWORD8 *)ps_codec->s_parse.s_bs_ctxt.pu4_pic_horz_bs +
32650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    ps_codec->s_parse.i4_ctb_x * (ctb_size * ctb_size / 8 / 16) +
3266707042fda96ebede81408b854385173483798bcdHarish Mahendrakar                                    ps_codec->s_parse.i4_ctb_y * bs_strd);
32670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
32689663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy                    memset(pu4_vert_bs, 0, (ctb_size / 8) * (ctb_size / 4) / 8 * 2);
32690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    memset(pu4_horz_bs, 0, (ctb_size / 8) * (ctb_size / 4) / 8 * 2);
32700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
32710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
32720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
32730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
32740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
327527405a217f75f663a814454068bd81fcf30e9cf6Harish Mahendrakar        DATA_SYNC();
32760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
32770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Update the parse status map */
32780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
32790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            sps_t *ps_sps = ps_codec->s_parse.ps_sps;
32800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            UWORD8 *pu1_buf;
32810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 idx;
32820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            idx = (ps_codec->s_parse.i4_ctb_x);
32830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            idx += ((ps_codec->s_parse.i4_ctb_y) * ps_sps->i2_pic_wd_in_ctb);
32840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_buf = (ps_codec->pu1_parse_map + idx);
32850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            *pu1_buf = 1;
32860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
32870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
32880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Increment CTB x and y positions */
32890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.i4_ctb_tile_x++;
32900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.i4_ctb_x++;
32910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.i4_ctb_slice_x++;
32920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
32930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /*If tiles are enabled, handle the slice counters differently*/
32940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(ps_pps->i1_tiles_enabled_flag)
32950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
32960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            //Indicates multiple tiles in a slice case
32970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            tile_start_ctb_idx = ps_tile->u1_pos_x
32980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            + ps_tile->u1_pos_y * (ps_sps->i2_pic_wd_in_ctb);
32990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
33000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            slice_start_ctb_idx =  ps_slice_hdr->i2_ctb_x
33010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            + ps_slice_hdr->i2_ctb_y * (ps_sps->i2_pic_wd_in_ctb);
33020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
33030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((slice_start_ctb_idx < tile_start_ctb_idx))
33040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
33050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(ps_codec->s_parse.i4_ctb_slice_x == (ps_tile->u1_pos_x + ps_tile->u2_wd))
33060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
33070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    /* Reached end of slice row within a tile /frame */
33080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_parse.i4_ctb_slice_y++;
33090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_parse.i4_ctb_slice_x = ps_tile->u1_pos_x; //todo:Check
33100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
33110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
33120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            //Indicates multiple slices in a tile case - hence, reset slice_x
33130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            else if(ps_codec->s_parse.i4_ctb_slice_x == (ps_tile->u2_wd))
33140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
33150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->s_parse.i4_ctb_slice_y++;
33160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->s_parse.i4_ctb_slice_x = 0;
33170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
33180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
33190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else
33200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
33210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(ps_codec->s_parse.i4_ctb_slice_x == ps_tile->u2_wd)
33220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
33230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Reached end of slice row within a tile /frame */
33240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->s_parse.i4_ctb_slice_y++;
33250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->s_parse.i4_ctb_slice_x = 0;
33260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
33270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
33280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
33290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
33300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(ps_codec->s_parse.i4_ctb_tile_x == (ps_tile->u2_wd))
33310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
33320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Reached end of tile row */
33330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.i4_ctb_tile_x = 0;
33340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.i4_ctb_x = ps_tile->u1_pos_x;
33350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
33360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.i4_ctb_tile_y++;
33370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.i4_ctb_y++;
33380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
33390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(ps_codec->s_parse.i4_ctb_tile_y == (ps_tile->u2_ht))
33400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
33410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Reached End of Tile */
33420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->s_parse.i4_ctb_tile_y = 0;
33430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->s_parse.i4_ctb_tile_x = 0;
33440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->s_parse.ps_tile++;
33450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
33460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if((ps_tile->u2_ht + ps_tile->u1_pos_y  ==  ps_sps->i2_pic_ht_in_ctb) && (ps_tile->u2_wd + ps_tile->u1_pos_x  ==  ps_sps->i2_pic_wd_in_ctb))
33470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
33480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    /* Reached end of frame */
33490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    end_of_pic = 1;
33500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_parse.i4_ctb_x = 0;
33510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_parse.i4_ctb_y = ps_sps->i2_pic_ht_in_ctb;
33520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
33530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                else
33540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
33550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    /* Initialize ctb_x and ctb_y to start of next tile */
33560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_tile = ps_codec->s_parse.ps_tile;
33570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_parse.i4_ctb_x = ps_tile->u1_pos_x;
33580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_parse.i4_ctb_y = ps_tile->u1_pos_y;
33590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_parse.i4_ctb_tile_y = 0;
33600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_parse.i4_ctb_tile_x = 0;
33610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_parse.i4_ctb_slice_x = ps_tile->u1_pos_x;
33620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_parse.i4_ctb_slice_y = ps_tile->u1_pos_y;
33630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
33640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
33650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
33660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
33670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
33680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
33690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.i4_next_ctb_indx = ps_codec->s_parse.i4_ctb_x +
33700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_codec->s_parse.i4_ctb_y * ps_sps->i2_pic_wd_in_ctb;
33710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
33720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* If the current slice is in error, check if the next slice's address
33730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * is reached and mark the end_of_slice flag */
33740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(ps_codec->i4_slice_error)
33750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
33760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            slice_header_t *ps_slice_hdr_next = ps_slice_hdr + 1;
33770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 next_slice_addr = ps_slice_hdr_next->i2_ctb_x +
33780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ps_slice_hdr_next->i2_ctb_y * ps_sps->i2_pic_wd_in_ctb;
33790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
33800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(ps_codec->s_parse.i4_next_ctb_indx == next_slice_addr)
33810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                end_of_slice_flag = 1;
33820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
33830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
33840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* If the codec is running in single core mode
33850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * then call process function for current CTB
33860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         */
33870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if((1 == ps_codec->i4_num_cores) && (ps_codec->s_parse.i4_ctb_tile_x == 0))
33880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
33890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            process_ctxt_t *ps_proc = &ps_codec->as_process[0];
33900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//          ps_proc->i4_ctb_cnt = ihevcd_nctb_cnt(ps_codec, ps_sps);
33910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_proc->i4_ctb_cnt = ps_proc->ps_tile->u2_wd;
33920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ihevcd_process(ps_proc);
33930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
33940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
33950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* If the bytes for the current slice are exhausted
33960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * set end_of_slice flag to 1
33970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * This slice will be treated as incomplete */
33980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if((UWORD8 *)ps_codec->s_parse.s_bitstrm.pu1_buf_max + BITSTRM_OFF_THRS <
33990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        ((UWORD8 *)ps_codec->s_parse.s_bitstrm.pu4_buf + (ps_codec->s_parse.s_bitstrm.u4_bit_ofst / 8)))
34000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
34010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            // end_of_slice_flag = ps_codec->i4_slice_error ? 0 : 1;
34020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
34030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(0 == ps_codec->i4_slice_error)
34040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                end_of_slice_flag = 1;
34050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
34060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
34070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
34080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(end_of_pic)
34090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
34100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    } while(!end_of_slice_flag);
34110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3412b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy    /* Reset slice error */
3413b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy    ps_codec->i4_slice_error = 0;
3414b92314c860d01d754ef579eafe55d7377962b3baNaveen Kumar Ponnusamy
34150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Increment the slice index for parsing next slice */
34160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(0 == end_of_pic)
34170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
34180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        while(1)
34190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
34200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
34210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 parse_slice_idx;
34220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            parse_slice_idx = ps_codec->s_parse.i4_cur_slice_idx;
34230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            parse_slice_idx++;
34240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
34250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
34260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* If the next slice header is not initialized, update cur_slice_idx and break */
34270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if((1 == ps_codec->i4_num_cores) || (0 != (parse_slice_idx & (MAX_SLICE_HDR_CNT - 1))))
34280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
34290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_parse.i4_cur_slice_idx = parse_slice_idx;
34300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    break;
34310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
34320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
34330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* If the next slice header is initialised, wait for the parsed slices to be processed */
34340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                else
34350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
34360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    WORD32 ctb_indx = 0;
34370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
34380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    while(ctb_indx != ps_sps->i4_pic_size_in_ctb)
34390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
34400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        WORD32 parse_status = *(ps_codec->pu1_parse_map + ctb_indx);
3441707042fda96ebede81408b854385173483798bcdHarish Mahendrakar                        volatile WORD32 proc_status = *(ps_codec->pu1_proc_map + ctb_indx) & 1;
34420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
34430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        if(parse_status == proc_status)
34440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ctb_indx++;
34450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
34460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_parse.i4_cur_slice_idx = parse_slice_idx;
34470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    break;
34480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
34490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
34500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
34510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
34520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
34530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
34540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else
34550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
34560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#if FRAME_ILF_PAD
34570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(FRAME_ILF_PAD && 1 == ps_codec->i4_num_cores)
34580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
34590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(ps_slice_hdr->i4_abs_pic_order_cnt == 0)
34600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
34610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                DUMP_PRE_ILF(ps_codec->as_process[0].pu1_cur_pic_luma,
34620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                             ps_codec->as_process[0].pu1_cur_pic_chroma,
34630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                             ps_sps->i2_pic_width_in_luma_samples,
34640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                             ps_sps->i2_pic_height_in_luma_samples,
34650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                             ps_codec->i4_strd);
34660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
34670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                DUMP_BS(ps_codec->as_process[0].s_bs_ctxt.pu4_pic_vert_bs,
34680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_codec->as_process[0].s_bs_ctxt.pu4_pic_horz_bs,
34690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_sps->i2_pic_wd_in_ctb * (ctb_size * ctb_size / 8 / 16) * ps_sps->i2_pic_ht_in_ctb,
34700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        (ps_sps->i2_pic_wd_in_ctb + 1) * (ctb_size * ctb_size / 8 / 16) * ps_sps->i2_pic_ht_in_ctb);
34710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
34720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                DUMP_QP(ps_codec->as_process[0].s_bs_ctxt.pu1_pic_qp,
34730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        (ps_sps->i2_pic_height_in_luma_samples * ps_sps->i2_pic_width_in_luma_samples) / (MIN_CU_SIZE * MIN_CU_SIZE));
34740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
34750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                DUMP_QP_CONST_IN_CTB(ps_codec->as_process[0].s_bs_ctxt.pu1_pic_qp_const_in_ctb,
34760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                     (ps_sps->i2_pic_height_in_luma_samples * ps_sps->i2_pic_width_in_luma_samples) / (MIN_CTB_SIZE * MIN_CTB_SIZE) / 8);
34770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
34780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                DUMP_NO_LOOP_FILTER(ps_codec->as_process[0].pu1_pic_no_loop_filter_flag,
34790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    (ps_sps->i2_pic_width_in_luma_samples / MIN_CU_SIZE) * (ps_sps->i2_pic_height_in_luma_samples / MIN_CU_SIZE) / 8);
34800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
34810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                DUMP_OFFSETS(ps_slice_hdr->i1_beta_offset_div2,
34820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                             ps_slice_hdr->i1_tc_offset_div2,
34830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                             ps_pps->i1_pic_cb_qp_offset,
34840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                             ps_pps->i1_pic_cr_qp_offset);
34850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
34860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.s_deblk_ctxt.ps_pps = ps_codec->s_parse.ps_pps;
34870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.s_deblk_ctxt.ps_sps = ps_codec->s_parse.ps_sps;
34880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.s_deblk_ctxt.ps_codec = ps_codec;
34890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.s_deblk_ctxt.ps_slice_hdr = ps_codec->s_parse.ps_slice_hdr;
34900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.s_deblk_ctxt.is_chroma_yuv420sp_vu = (ps_codec->e_ref_chroma_fmt == IV_YUV_420SP_VU);
34910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
34920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.s_sao_ctxt.ps_pps = ps_codec->s_parse.ps_pps;
34930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.s_sao_ctxt.ps_sps = ps_codec->s_parse.ps_sps;
34940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.s_sao_ctxt.ps_codec = ps_codec;
34950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.s_sao_ctxt.ps_slice_hdr = ps_codec->s_parse.ps_slice_hdr;
34960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
34970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ihevcd_ilf_pad_frame(&ps_codec->s_parse.s_deblk_ctxt, &ps_codec->s_parse.s_sao_ctxt);
34980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
34990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
35000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#endif
35010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.i4_end_of_frame = 1;
35020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
35030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return ret;
35040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
35050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
35060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
35070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
35080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
35090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
35100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
35110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
35120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3513