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_utils.c
220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Contains miscellaneous utility functions such as init() etc
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_defs.h"
540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_error.h"
550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_structs.h"
560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_buf_mgr.h"
570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_dpb_mgr.h"
580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_macros.h"
590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_platform_macros.h"
600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_common_tables.h"
620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_buf_mgr.h"
630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_disp_mgr.h"
640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_cabac_tables.h"
650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_defs.h"
670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_function_selector.h"
690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_structs.h"
700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_error.h"
710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_nal.h"
720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_bitstream.h"
730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_utils.h"
740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_trace.h"
750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_process_slice.h"
760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_job_queue.h"
770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define MAX_DPB_PIC_BUF 6
780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* Function declarations */
800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarmv_buf_t* ihevcd_mv_mgr_get_poc(buf_mgr_t *ps_mv_buf_mgr, UWORD32 abs_poc);
810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Used to get level index for a given level
870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Converts from level_idc (which is multiplied by 30) to an index that can be
900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  used as a lookup. Also used to ignore invalid levels like 2.2 , 3.2 etc
910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] level
930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Level of the stream
940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns  Level index for a given level
960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
1010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
1020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWORD32 ihevcd_get_lvl_idx(WORD32 level)
1030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
1040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 lvl_idx = 0;
1050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(level < IHEVC_LEVEL_20)
1070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
1080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        lvl_idx = 0;
1090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
1100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else if(level >= IHEVC_LEVEL_20 && level < IHEVC_LEVEL_21)
1110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
1120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        lvl_idx = 1;
1130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
1140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else if(level >= IHEVC_LEVEL_21 && level < IHEVC_LEVEL_30)
1150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
1160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        lvl_idx = 2;
1170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
1180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else if(level >= IHEVC_LEVEL_30 && level < IHEVC_LEVEL_31)
1190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
1200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        lvl_idx = 3;
1210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
1220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else if(level >= IHEVC_LEVEL_31 && level < IHEVC_LEVEL_40)
1230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
1240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        lvl_idx = 4;
1250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
1260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else if(level >= IHEVC_LEVEL_40 && level < IHEVC_LEVEL_41)
1270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
1280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        lvl_idx = 5;
1290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
1300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else if(level >= IHEVC_LEVEL_41 && level < IHEVC_LEVEL_50)
1310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
1320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        lvl_idx = 6;
1330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
1340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else if(level >= IHEVC_LEVEL_50 && level < IHEVC_LEVEL_51)
1350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
1360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        lvl_idx = 7;
1370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
1380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else if(level >= IHEVC_LEVEL_51 && level < IHEVC_LEVEL_52)
1390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
1400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        lvl_idx = 8;
1410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
1420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else if(level >= IHEVC_LEVEL_52 && level < IHEVC_LEVEL_60)
1430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
1440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        lvl_idx = 9;
1450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
1460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else if(level >= IHEVC_LEVEL_60 && level < IHEVC_LEVEL_61)
1470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
1480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        lvl_idx = 10;
1490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
1500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else if(level >= IHEVC_LEVEL_61 && level < IHEVC_LEVEL_62)
1510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
1520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        lvl_idx = 11;
1530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
1540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else if(level >= IHEVC_LEVEL_62)
1550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
1560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        lvl_idx = 12;
1570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
1580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return (lvl_idx);
1600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
1610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
1630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
1640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
1660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Used to get reference picture buffer size for a given level and
1670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  and padding used
1680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
1700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Used to get reference picture buffer size for a given level and padding used
1710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Each picture is padded on all four sides
1720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pic_size
1740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Mumber of luma samples (Width * Height)
1750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] level
1770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Level
1780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] horz_pad
1800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Total padding used in horizontal direction
1810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] vert_pad
1830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Total padding used in vertical direction
1840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns  Total picture buffer size
1860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
1880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
1910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
192e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish MahendrakarWORD32 ihevcd_get_total_pic_buf_size(codec_t *ps_codec,
193e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar                                     WORD32 wd,
194e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar                                     WORD32 ht)
1950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
1960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 size;
1970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 num_luma_samples;
1980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 max_dpb_size;
1990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 num_samples;
2000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
202e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar    sps_t *ps_sps = (ps_codec->s_parse.ps_sps_base + ps_codec->i4_sps_id);
2030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
204e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar    /* Get maximum number of buffers for the current picture size */
205e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar    max_dpb_size = ps_sps->ai1_sps_max_dec_pic_buffering[ps_sps->i1_sps_max_sub_layers - 1];
206221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy
207e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar    if(ps_codec->e_frm_out_mode != IVD_DECODE_FRAME_OUT)
208e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar        max_dpb_size += ps_sps->ai1_sps_max_num_reorder_pics[ps_sps->i1_sps_max_sub_layers - 1];
2090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
210e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar    max_dpb_size++;
2110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Allocation is required for
2120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * (Wd + horz_pad) * (Ht + vert_pad) * (2 * max_dpb_size + 1)
2130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     */
2140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
215221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy    /* Account for padding area */
216e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar    num_luma_samples = (wd + PAD_WD) * (ht + PAD_HT);
217221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy
218221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy    /* Account for chroma */
219e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar    num_samples = num_luma_samples * 3 / 2;
220221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy
2210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Number of bytes in reference pictures */
222e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar    size = num_samples * max_dpb_size;
2230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return size;
2260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
2270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
2280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
2290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
2300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
2310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Used to get MV bank size for a given number of luma samples
2320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
2330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
2340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  For given number of luma samples  one MV bank size is computed
2350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Each MV bank includes pu_map and pu_t for all the min PUs(4x4) in a picture
2360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
2370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] num_luma_samples
2380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Max number of luma pixels in the frame
2390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
2400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns  Total MV Bank size
2410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
2420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
2430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
2440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
2450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
2460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
2470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWORD32 ihevcd_get_pic_mv_bank_size(WORD32 num_luma_samples)
2480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
2490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 size;
2500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 pic_size;
2520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 mv_bank_size;
2540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 num_pu;
2550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 num_ctb;
2560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    pic_size = num_luma_samples;
2570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    num_pu = pic_size / (MIN_PU_SIZE * MIN_PU_SIZE);
2600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    num_ctb = pic_size / (MIN_CTB_SIZE * MIN_CTB_SIZE);
2610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    mv_bank_size = 0;
2630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Size for storing pu_t start index each CTB */
2650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* One extra entry is needed to compute number of PUs in the last CTB */
2660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    mv_bank_size += (num_ctb + 1) * sizeof(WORD32);
2670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Size for pu_map */
2690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    mv_bank_size += num_pu;
2700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Size for storing pu_t for each PU */
2720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    mv_bank_size += num_pu * sizeof(pu_t);
2730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
274ac0318fa8afe20b00342d41d10e0054f9a8f541aHarish Mahendrakar    /* Size for storing slice_idx for each CTB */
275ac0318fa8afe20b00342d41d10e0054f9a8f541aHarish Mahendrakar    mv_bank_size += ALIGN4(num_ctb * sizeof(UWORD16));
276ac0318fa8afe20b00342d41d10e0054f9a8f541aHarish Mahendrakar
2770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    size =  mv_bank_size;
2780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return size;
2790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
2800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
2810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
2820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
2830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
2840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Used to get TU data size for a given number luma samples
2850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
2860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
2870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  For a given number of luma samples TU data size is computed
2880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Each TU data includes tu_map and tu_t and coeff data for all
2890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  the min TUs(4x4) in given CTB
2900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
2910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] num_luma_samples
2920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Number of 64 x 64 CTBs for which TU data has to be allocated.
2930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
2940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns  Total TU data size
2950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
2960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks Assumption is num_luma_samples will be at least
2970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 64 x 64 to handle CTB of size 64 x 64. Can be frame size as well
2980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
2990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
3000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
3010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWORD32 ihevcd_get_tu_data_size(WORD32 num_luma_samples)
3020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
3030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 tu_data_size;
3060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 num_ctb;
3070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 num_luma_tu, num_chroma_tu, num_tu;
3080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    num_ctb = num_luma_samples / (MIN_CTB_SIZE * MIN_CTB_SIZE);
3090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    num_luma_tu = num_luma_samples / (MIN_TU_SIZE * MIN_TU_SIZE);
3110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    num_chroma_tu = num_luma_tu >> 1;
3120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    num_tu = num_luma_tu + num_chroma_tu;
3140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    tu_data_size = 0;
3150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Size for storing tu_t start index each CTB */
3170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* One extra entry is needed to compute number of TUs in the last CTB */
3180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    tu_data_size += (num_ctb + 1) * sizeof(WORD32);
3190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Size for storing tu map */
3210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    tu_data_size += num_luma_tu * sizeof(UWORD8);
3220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Size for storing tu_t for each TU */
3240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    tu_data_size += num_tu * sizeof(tu_t);
3250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Size for storing number of coded subblocks and scan_idx for each TU */
3270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    tu_data_size += num_tu * (sizeof(WORD8) + sizeof(WORD8));
3280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Size for storing coeff data for each TU */
3300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    tu_data_size += num_tu * sizeof(tu_sblk_coeff_data_t);
3310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return tu_data_size;
3340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
3350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWORD32 ihevcd_nctb_cnt(codec_t *ps_codec, sps_t *ps_sps)
3380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
3390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 nctb = 1;
3400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UNUSED(ps_codec);
3410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    //TODO: Currently set to 1
3420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* If CTB size is less than 32 x 32 then set nCTB as 4 */
3430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ps_sps->i1_log2_ctb_size < 5)
3440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        nctb = 1;
3450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return nctb;
3470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
3480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarIHEVCD_ERROR_T ihevcd_get_tile_pos(pps_t *ps_pps,
3500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   sps_t *ps_sps,
3510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD32 ctb_x,
3520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD32 ctb_y,
3530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD32 *pi4_ctb_tile_x,
3540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD32 *pi4_ctb_tile_y,
3550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   WORD32 *pi4_tile_idx)
3560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
3570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    tile_t *ps_tile_tmp;
3590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 i;
3600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 tile_row, tile_col;
3610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ctb_x < 0 || ctb_y < 0)
3630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
3640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        *pi4_ctb_tile_x = 0;
3650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        *pi4_ctb_tile_y = 0;
3660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        *pi4_tile_idx = 0;
3670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        return (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
3690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
3700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    tile_row = 0;
3720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    tile_col = 0;
3730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_tile_tmp = ps_pps->ps_tile;
3740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(0 == ps_pps->i1_tiles_enabled_flag)
3750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
3760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        *pi4_ctb_tile_x = ctb_x;
3770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        *pi4_ctb_tile_y = ctb_y;
3780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        *pi4_tile_idx = 0;
3790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
3800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else
3810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
3820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(i = 0; i < ps_pps->i1_num_tile_columns; i++)
3830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
3840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD16 next_tile_ctb_x;
3850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_tile_tmp = ps_pps->ps_tile + i; //* ps_pps->i1_num_tile_rows;
3860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((ps_pps->i1_num_tile_columns - 1) == i)
3870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
3880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                next_tile_ctb_x = ps_sps->i2_pic_wd_in_ctb;
3890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
3900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            else
3910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
3920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                tile_t *ps_tile_next_tmp;
3930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_tile_next_tmp = ps_pps->ps_tile + i + 1;
3940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                next_tile_ctb_x = ps_tile_next_tmp->u1_pos_x;
3950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
3960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((ctb_x >= ps_tile_tmp->u1_pos_x) && (ctb_x < next_tile_ctb_x))
3970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
3980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                tile_col = i;
3990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                break;
4000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
4010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
4020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        *pi4_ctb_tile_x = ctb_x - ps_tile_tmp->u1_pos_x;
4030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(i = 0; i < ps_pps->i1_num_tile_rows; i++)
4050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
4060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD16 next_tile_ctb_y;
4070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_tile_tmp = ps_pps->ps_tile + i * ps_pps->i1_num_tile_columns;
4080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((ps_pps->i1_num_tile_rows - 1) == i)
4090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
4100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                next_tile_ctb_y = ps_sps->i2_pic_ht_in_ctb;
4110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
4120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            else
4130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
4140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                tile_t *ps_tile_next_tmp;
4150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_tile_next_tmp = ps_pps->ps_tile + ((i + 1) * ps_pps->i1_num_tile_columns);
4160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                next_tile_ctb_y = ps_tile_next_tmp->u1_pos_y;
4170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
4180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((ctb_y >= ps_tile_tmp->u1_pos_y) && (ctb_y < next_tile_ctb_y))
4190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
4200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                tile_row = i;
4210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                break;
4220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
4230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
4250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        *pi4_ctb_tile_y = ctb_y - ps_tile_tmp->u1_pos_y;
4260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        *pi4_tile_idx = tile_row * ps_pps->i1_num_tile_columns
4270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        + tile_col;
4280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
4290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
4300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
4310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
4320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
4330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
4340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
4350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Function to initialize ps_pic_buf structs add pic buffers to
4360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  buffer manager in case of non-shared mode
4370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
4380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
4390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Function to initialize ps_pic_buf structs add pic buffers to
4400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  buffer manager in case of non-shared mode
4410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  To be called once per stream or for every reset
4420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
4430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_codec
4440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to codec context
4450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
4460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns  Error from IHEVCD_ERROR_T
4470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
4480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
4490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
4500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
4510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
4520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
4530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarIHEVCD_ERROR_T ihevcd_pic_buf_mgr_add_bufs(codec_t *ps_codec)
4540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
4550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
4560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 i;
4570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 max_dpb_size;
4580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    sps_t *ps_sps;
4590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD8 *pu1_buf;
4600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    pic_buf_t *ps_pic_buf;
4610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 pic_buf_size_allocated;
4620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
465e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar
466e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar    /* Initialize Pic buffer manager */
4670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_sps = ps_codec->s_parse.ps_sps;
4680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
469e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar    /* Compute the number of Pic buffers needed */
470e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar    max_dpb_size = ps_sps->ai1_sps_max_dec_pic_buffering[ps_sps->i1_sps_max_sub_layers - 1];
4710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
472e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar    if(ps_codec->e_frm_out_mode != IVD_DECODE_FRAME_OUT)
473e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar        max_dpb_size += ps_sps->ai1_sps_max_num_reorder_pics[ps_sps->i1_sps_max_sub_layers - 1];
4740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Allocate one extra picture to handle current frame
4760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * In case of asynchronous parsing and processing, number of buffers should increase here
4770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * based on when parsing and processing threads are synchronized
4780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     */
4790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    max_dpb_size++;
4800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
482e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar    pu1_buf = (UWORD8 *)ps_codec->pu1_ref_pic_buf_base;
4830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_pic_buf = (pic_buf_t *)ps_codec->ps_pic_buf;
4850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* In case of non-shared mode, add picture buffers to buffer manager
4870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * In case of shared mode buffers are added in the run-time
4880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     */
4890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(0 == ps_codec->i4_share_disp_buf)
4900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
4910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 buf_ret;
4920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 luma_samples;
4930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 chroma_samples;
494e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar        pic_buf_size_allocated = ps_codec->i4_total_pic_buf_size;
4950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        luma_samples = (ps_codec->i4_strd) *
4970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        (ps_sps->i2_pic_height_in_luma_samples + PAD_HT);
4980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        chroma_samples = luma_samples / 2;
5000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Try to add as many buffers as possible since memory is already allocated */
5020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* If the number of buffers that can be added is less than max_num_bufs
5030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * return with an error.
5040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         */
505e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar        for(i = 0; i < max_dpb_size; i++)
5060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
5070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pic_buf_size_allocated -= (luma_samples + chroma_samples);
5080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(pic_buf_size_allocated < 0)
5100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
511e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar                ps_codec->s_parse.i4_error_code = IHEVCD_INSUFFICIENT_MEM_PICBUF;
512e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar                return IHEVCD_INSUFFICIENT_MEM_PICBUF;
5130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
5140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_pic_buf->pu1_luma = pu1_buf + ps_codec->i4_strd * PAD_TOP + PAD_LEFT;
5160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_buf += luma_samples;
5170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_pic_buf->pu1_chroma = pu1_buf + ps_codec->i4_strd * (PAD_TOP / 2) + PAD_LEFT;
5190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_buf += chroma_samples;
5200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            buf_ret = ihevc_buf_mgr_add((buf_mgr_t *)ps_codec->pv_pic_buf_mgr, ps_pic_buf, i);
5220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
523e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar
5240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(0 != buf_ret)
5250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
5260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->s_parse.i4_error_code = IHEVCD_BUF_MGR_ERROR;
5270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return IHEVCD_BUF_MGR_ERROR;
5280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
5290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_pic_buf++;
5300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
5310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
532e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar    else
533e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar    {
534e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar        /* In case of shared mode, buffers are added without adjusting for padding.
535e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar           Update luma and chroma pointers here to account for padding as per stride.
536e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar           In some cases stride might not be available when set_display_frame is called.
537e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar           Hence updated luma and chroma pointers here */
538e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar
539e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar        for(i = 0; i < BUF_MGR_MAX_CNT; i++)
540e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar        {
541e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar            ps_pic_buf = ihevc_buf_mgr_get_buf((buf_mgr_t *)ps_codec->pv_pic_buf_mgr, i);
542e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar            if((NULL == ps_pic_buf) ||
543e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar               (NULL == ps_pic_buf->pu1_luma) ||
544e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar               (NULL == ps_pic_buf->pu1_chroma))
545e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar            {
546e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar                break;
547e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar            }
548e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar            ps_pic_buf->pu1_luma += ps_codec->i4_strd * PAD_TOP + PAD_LEFT;
549e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar            ps_pic_buf->pu1_chroma += ps_codec->i4_strd * (PAD_TOP / 2) + PAD_LEFT;
550e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar        }
551e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar    }
5520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return ret;
5540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
5550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
5560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
5570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
5580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
5590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Function to add buffers to MV Bank buffer manager
5600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
5610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
5620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Function to add buffers to MV Bank buffer manager
5630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  To be called once per stream or for every reset
5640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
5650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_codec
5660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to codec context
5670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
5680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns  Error from IHEVCD_ERROR_T
5690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
5700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
5710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
5720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
5730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
5740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
5750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarIHEVCD_ERROR_T ihevcd_mv_buf_mgr_add_bufs(codec_t *ps_codec)
5760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
5770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
5780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 i;
5790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 max_dpb_size;
5800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 mv_bank_size_allocated;
5810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 pic_mv_bank_size;
582e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar
5830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    sps_t *ps_sps;
5840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD8 *pu1_buf;
5850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    mv_buf_t *ps_mv_buf;
5860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Initialize MV Bank buffer manager */
5890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_sps = ps_codec->s_parse.ps_sps;
5900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
592e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar    /* Compute the number of MV Bank buffers needed */
593e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar    max_dpb_size = ps_sps->ai1_sps_max_dec_pic_buffering[ps_sps->i1_sps_max_sub_layers - 1];
5940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Allocate one extra MV Bank to handle current frame
5960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * In case of asynchronous parsing and processing, number of buffers should increase here
5970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * based on when parsing and processing threads are synchronized
5980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     */
5990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    max_dpb_size++;
6000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    pu1_buf = (UWORD8 *)ps_codec->pv_mv_bank_buf_base;
6020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mv_buf = (mv_buf_t *)pu1_buf;
604e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar    pu1_buf += max_dpb_size * sizeof(mv_buf_t);
6050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->ps_mv_buf = ps_mv_buf;
606e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar    mv_bank_size_allocated = ps_codec->i4_total_mv_bank_size - max_dpb_size  * sizeof(mv_buf_t);
6070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Compute MV bank size per picture */
609cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar    pic_mv_bank_size = ihevcd_get_pic_mv_bank_size(ALIGN64(ps_sps->i2_pic_width_in_luma_samples) *
610cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar                                                   ALIGN64(ps_sps->i2_pic_height_in_luma_samples));
6110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    for(i = 0; i < max_dpb_size; i++)
6130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
6140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 buf_ret;
6150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 num_pu;
6160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 num_ctb;
6170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 pic_size;
6180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pic_size = ALIGN64(ps_sps->i2_pic_width_in_luma_samples) *
6190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ALIGN64(ps_sps->i2_pic_height_in_luma_samples);
6200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        num_pu = pic_size / (MIN_PU_SIZE * MIN_PU_SIZE);
6230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        num_ctb = pic_size / (MIN_CTB_SIZE * MIN_CTB_SIZE);
6240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        mv_bank_size_allocated -= pic_mv_bank_size;
6270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(mv_bank_size_allocated < 0)
6290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
6300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.i4_error_code = IHEVCD_INSUFFICIENT_MEM_MVBANK;
6310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            return IHEVCD_INSUFFICIENT_MEM_MVBANK;
6320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
6330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_mv_buf->pu4_pic_pu_idx = (UWORD32 *)pu1_buf;
6350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_buf += (num_ctb + 1) * sizeof(WORD32);
6360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_mv_buf->pu1_pic_pu_map = pu1_buf;
6380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_buf += num_pu;
6390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_mv_buf->pu1_pic_slice_map = (UWORD16 *)pu1_buf;
641ac0318fa8afe20b00342d41d10e0054f9a8f541aHarish Mahendrakar        pu1_buf += ALIGN4(num_ctb * sizeof(UWORD16));
6420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_mv_buf->ps_pic_pu = (pu_t *)pu1_buf;
644cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar        pu1_buf += num_pu * sizeof(pu_t);
6450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        buf_ret = ihevc_buf_mgr_add((buf_mgr_t *)ps_codec->pv_mv_buf_mgr, ps_mv_buf, i);
6470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(0 != buf_ret)
6490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
6500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.i4_error_code = IHEVCD_BUF_MGR_ERROR;
6510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            return IHEVCD_BUF_MGR_ERROR;
6520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
653cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar
6540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_mv_buf++;
6550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
6570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return ret;
6580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
6590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
6600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
6610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
6620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
6630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Picture level initializations required during parsing
6640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
6650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
6660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Initialize picture level context variables during parsing Initialize mv
6670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* bank buffer manager in the first init call
6680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
6690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_codec
6700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to codec context
6710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
6720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns  Error from IHEVCD_ERROR_T
6730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
6740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
6750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
6760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
6770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
6780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
6790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarIHEVCD_ERROR_T ihevcd_parse_pic_init(codec_t *ps_codec)
6800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
6810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
6820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    mv_buf_t *ps_mv_buf;
6830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    sps_t *ps_sps;
6840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 num_min_cu;
6850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 cur_pic_buf_id;
6860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 cur_mv_bank_buf_id;
6870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    pic_buf_t *ps_cur_pic;
6880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    slice_header_t *ps_slice_hdr;
6890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD8 *pu1_cur_pic_luma, *pu1_cur_pic_chroma;
6900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 i;
6910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.i4_error_code = IHEVCD_SUCCESS;
6930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_sps = ps_codec->s_parse.ps_sps;
6940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_slice_hdr = ps_codec->s_parse.ps_slice_hdr;
6950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* If parse_pic_init is called, then slice data is present in the input bitstrea stream */
6960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_pic_present = 1;
6970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Memset picture level intra map and transquant bypass map to zero */
6990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    num_min_cu = ((ps_sps->i2_pic_height_in_luma_samples + 7) / 8) * ((ps_sps->i2_pic_width_in_luma_samples + 63) / 64);
7000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    memset(ps_codec->s_parse.pu1_pic_intra_flag, 0, num_min_cu);
7010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    memset(ps_codec->s_parse.pu1_pic_no_loop_filter_flag, 0, num_min_cu);
7020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(0 == ps_codec->s_parse.i4_first_pic_init)
7060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
7070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ret = ihevcd_mv_buf_mgr_add_bufs(ps_codec);
7080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret);
7090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ret = ihevcd_pic_buf_mgr_add_bufs(ps_codec);
7110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret);
7120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.i4_first_pic_init = 1;
7140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
7150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Initialize all the slice headers' slice addresses to zero */
7170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
7180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 slice_idx;
7190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 slice_start_idx;
7200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        slice_start_idx = ps_codec->i4_slice_error ? 2 : 1;
7220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(slice_idx = slice_start_idx; slice_idx < MAX_SLICE_HDR_CNT; slice_idx++)
7240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
7250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            slice_header_t *ps_slice_hdr_tmp = ps_codec->ps_slice_hdr_base + slice_idx;
7260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_slice_hdr_tmp->i2_ctb_x = -1;
7270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_slice_hdr_tmp->i2_ctb_y = -1;
7280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
7300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
7310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Get free MV Bank to hold current picture's motion vector data */
7330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
7340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_mv_buf = (mv_buf_t *)ihevc_buf_mgr_get_next_free((buf_mgr_t *)ps_codec->pv_mv_buf_mgr, &cur_mv_bank_buf_id);
7350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* If there are no free buffers then return with an error code.
7370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * If the buffer is to be freed by another thread , change the
7380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * following to call thread yield and wait for buffer to be freed
7390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         */
7400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(NULL == ps_mv_buf)
7410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
7420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.i4_error_code = IHEVCD_NO_FREE_MVBANK;
7430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->i4_error_code = IHEVCD_NO_FREE_MVBANK;
7440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            return IHEVCD_NO_FREE_MVBANK;
7450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
7460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.ps_cur_mv_buf = ps_mv_buf;
7480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Set current ABS poc to ps_mv_buf, so that while freeing a reference buffer
7490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * corresponding mv buffer can be found by looping through ps_codec->ps_mv_buf array
7500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * and getting a buffer id to free
7510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         */
7520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_mv_buf->i4_abs_poc = ps_slice_hdr->i4_abs_pic_order_cnt;
7530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
7540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Get free picture buffer to hold current picture recon data */
7560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* TODO: For asynchronous api the following initializations related to picture
7570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * buffer should be moved to processing side
7580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     */
7590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
7600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        UWORD8 *pu1_buf;
7620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_cur_pic = (pic_buf_t *)ihevc_buf_mgr_get_next_free((buf_mgr_t *)ps_codec->pv_pic_buf_mgr, &cur_pic_buf_id);
7630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* If there are no free buffers then return with an error code.
7650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * TODO: If the buffer is to be freed by another thread , change the
7660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * following to call thread yield and wait for buffer to be freed
7670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         */
7680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(NULL == ps_cur_pic)
7690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
7700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.i4_error_code = IHEVCD_NO_FREE_PICBUF;
7710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->i4_error_code = IHEVCD_NO_FREE_PICBUF;
7720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            return IHEVCD_NO_FREE_PICBUF;
7730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
7740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Store input timestamp sent with input buffer */
7760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_cur_pic->u4_ts = ps_codec->u4_ts;
7770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_cur_pic->i4_abs_poc = ps_slice_hdr->i4_abs_pic_order_cnt;
7780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_cur_pic->i4_poc_lsb = ps_slice_hdr->i4_pic_order_cnt_lsb;
7790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_buf = ps_cur_pic->pu1_luma;
7800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_cur_pic_luma = pu1_buf;
7810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_buf = ps_cur_pic->pu1_chroma;
7830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_cur_pic_chroma = pu1_buf;
7850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
7860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(0 == ps_codec->u4_pic_cnt)
7880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
7890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        memset(ps_cur_pic->pu1_luma, 128, (ps_sps->i2_pic_width_in_luma_samples + PAD_WD) * ps_sps->i2_pic_height_in_luma_samples);
7900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        memset(ps_cur_pic->pu1_chroma, 128, (ps_sps->i2_pic_width_in_luma_samples + PAD_WD) * ps_sps->i2_pic_height_in_luma_samples / 2);
7910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
7920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Fill the remaining entries of the reference lists with the nearest POC
7940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * This is done to handle cases where there is a corruption in the reference index */
7950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
7960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pic_buf_t *ps_pic_buf_ref;
7970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        mv_buf_t *ps_mv_buf_ref;
7980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 r_idx;
7990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        dpb_mgr_t *ps_dpb_mgr = (dpb_mgr_t *)ps_codec->pv_dpb_mgr;
8000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        buf_mgr_t *ps_mv_buf_mgr = (buf_mgr_t *)ps_codec->pv_mv_buf_mgr;
8010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_pic_buf_ref = ihevc_dpb_mgr_get_ref_by_nearest_poc(ps_dpb_mgr, ps_slice_hdr->i4_abs_pic_order_cnt);
8030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(NULL == ps_pic_buf_ref)
8040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
805cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar            WORD32 size;
806cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar
807cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar            WORD32 num_pu;
808cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar            WORD32 num_ctb;
809cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar            WORD32 pic_size;
810cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar            /* In case current mv buffer itself is being used as reference mv buffer for colocated
811cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar             * calculations, then memset all the buffers to zero.
812cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar             */
813cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar            pic_size = ALIGN64(ps_sps->i2_pic_width_in_luma_samples) *
814cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar                            ALIGN64(ps_sps->i2_pic_height_in_luma_samples);
815cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar
816cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar            num_pu = pic_size / (MIN_PU_SIZE * MIN_PU_SIZE);
817cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar            num_ctb = pic_size / (MIN_CTB_SIZE * MIN_CTB_SIZE);
818cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar
819cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar            memset(ps_mv_buf->ai4_l0_collocated_poc, 0, sizeof(ps_mv_buf->ai4_l0_collocated_poc));
820cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar            memset(ps_mv_buf->ai1_l0_collocated_poc_lt, 0, sizeof(ps_mv_buf->ai1_l0_collocated_poc_lt));
821cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar            memset(ps_mv_buf->ai4_l1_collocated_poc, 0, sizeof(ps_mv_buf->ai4_l1_collocated_poc));
822cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar            memset(ps_mv_buf->ai1_l1_collocated_poc_lt, 0, sizeof(ps_mv_buf->ai1_l1_collocated_poc_lt));
823cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar
824cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar            size = (num_ctb + 1) * sizeof(WORD32);
825cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar            memset(ps_mv_buf->pu4_pic_pu_idx, 0, size);
826cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar
827cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar            size = num_pu;
828cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar            memset(ps_mv_buf->pu1_pic_pu_map, 0, size);
829cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar            size = ALIGN4(num_ctb * sizeof(UWORD16));
830cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar            memset(ps_mv_buf->pu1_pic_slice_map, 0, size);
831cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar            size = num_pu * sizeof(pu_t);
832cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar            memset(ps_mv_buf->ps_pic_pu, 0, size);
833cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar
8340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_pic_buf_ref = ps_cur_pic;
8350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_mv_buf_ref = ps_mv_buf;
8360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
8370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else
8380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
8390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_mv_buf_ref = ihevcd_mv_mgr_get_poc(ps_mv_buf_mgr, ps_pic_buf_ref->i4_abs_poc);
8400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
8410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(r_idx = 0; r_idx < ps_slice_hdr->i1_num_ref_idx_l0_active; r_idx++)
8430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
8440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(NULL == ps_slice_hdr->as_ref_pic_list0[r_idx].pv_pic_buf)
8450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
8460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_slice_hdr->as_ref_pic_list0[r_idx].pv_pic_buf = (void *)ps_pic_buf_ref;
8470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_slice_hdr->as_ref_pic_list0[r_idx].pv_mv_buf = (void *)ps_mv_buf_ref;
8480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
8490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
8500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(r_idx = ps_slice_hdr->i1_num_ref_idx_l0_active; r_idx < MAX_DPB_SIZE; r_idx++)
8520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
8530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_slice_hdr->as_ref_pic_list0[r_idx].pv_pic_buf = (void *)ps_pic_buf_ref;
8540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_slice_hdr->as_ref_pic_list0[r_idx].pv_mv_buf = (void *)ps_mv_buf_ref;
8550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
8560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(r_idx = 0; r_idx < ps_slice_hdr->i1_num_ref_idx_l1_active; r_idx++)
8580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
8590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(NULL == ps_slice_hdr->as_ref_pic_list1[r_idx].pv_pic_buf)
8600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
8610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_slice_hdr->as_ref_pic_list1[r_idx].pv_pic_buf = (void *)ps_pic_buf_ref;
8620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_slice_hdr->as_ref_pic_list1[r_idx].pv_mv_buf = (void *)ps_mv_buf_ref;
8630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
8640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
8650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(r_idx = ps_slice_hdr->i1_num_ref_idx_l1_active; r_idx < MAX_DPB_SIZE; r_idx++)
8670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
8680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_slice_hdr->as_ref_pic_list1[r_idx].pv_pic_buf = (void *)ps_pic_buf_ref;
8690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_slice_hdr->as_ref_pic_list1[r_idx].pv_mv_buf = (void *)ps_mv_buf_ref;
8700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
8710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
8720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Reset the jobq to start of the jobq buffer */
8750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ihevcd_jobq_reset((jobq_t *)ps_codec->pv_proc_jobq);
8760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.i4_pic_pu_idx = 0;
8780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.i4_pic_tu_idx = 0;
8790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.pu1_pic_pu_map = ps_mv_buf->pu1_pic_pu_map;
8810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.ps_pic_pu      = ps_mv_buf->ps_pic_pu;
8820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.pu4_pic_pu_idx = ps_mv_buf->pu4_pic_pu_idx;
8830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.pu1_slice_idx = (UWORD16 *)ps_mv_buf->pu1_pic_slice_map;
8840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    for(i = 0; i < MAX_PROCESS_THREADS; i++)
8850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
8860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->as_process[i].pu1_slice_idx = (UWORD16 *)ps_mv_buf->pu1_pic_slice_map;
8870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
8880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.pu1_pu_map = ps_codec->s_parse.pu1_pic_pu_map;
8890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.ps_pu = ps_codec->s_parse.ps_pic_pu;
8900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
8920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        UWORD8 *pu1_buf;
8930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 ctb_luma_min_tu_cnt, ctb_chroma_min_tu_cnt, ctb_min_tu_cnt;
8940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 pic_size;
8950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 num_ctb;
8960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
897cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar        pic_size = ALIGN64(ps_sps->i2_pic_width_in_luma_samples) *
898cc92338e922f8cc7d84220c9da98a81e2408d7e8Harish Mahendrakar                        ALIGN64(ps_sps->i2_pic_height_in_luma_samples);
8990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ctb_luma_min_tu_cnt = pic_size / (MIN_TU_SIZE * MIN_TU_SIZE);
9010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ctb_chroma_min_tu_cnt = ctb_luma_min_tu_cnt >> 1;
9030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ctb_min_tu_cnt = ctb_luma_min_tu_cnt + ctb_chroma_min_tu_cnt;
9050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        num_ctb = pic_size / (MIN_CTB_SIZE * MIN_CTB_SIZE);
9070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_buf  = (UWORD8 *)ps_codec->pv_tu_data;
9080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.pu4_pic_tu_idx = (UWORD32 *)pu1_buf;
9090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_buf += (num_ctb + 1) * sizeof(WORD32);
9100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.pu1_pic_tu_map = pu1_buf;
9120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_buf += ctb_min_tu_cnt;
9130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.ps_pic_tu = (tu_t *)pu1_buf;
9150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_buf += ctb_min_tu_cnt * sizeof(tu_t);
9160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.pv_pic_tu_coeff_data = pu1_buf;
9180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.pu1_tu_map = ps_codec->s_parse.pu1_pic_tu_map;
9200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.ps_tu = ps_codec->s_parse.ps_pic_tu;
9210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.pv_tu_coeff_data = ps_codec->s_parse.pv_pic_tu_coeff_data;
9220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
9230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.s_bs_ctxt.ps_pic_pu = ps_codec->s_parse.ps_pic_pu;
9250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.s_bs_ctxt.pu4_pic_pu_idx = ps_codec->s_parse.pu4_pic_pu_idx;
9260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.s_bs_ctxt.pu4_pic_tu_idx = ps_codec->s_parse.pu4_pic_tu_idx;
9270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Set number of CTBs to be processed simultaneously */
9300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_proc_nctb = ihevcd_nctb_cnt(ps_codec, ps_sps);
9310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Memset Parse Map and process map at the start of frame */
9330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    //TODO: In case of asynchronous API proc_map can not be set to zero here
9340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
9350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 num_ctb;
9360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        num_ctb = ps_sps->i4_pic_size_in_ctb;
9380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        memset(ps_codec->pu1_parse_map, 0, num_ctb);
9400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        memset(ps_codec->pu1_proc_map, 0, num_ctb);
9420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
9430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Initialize disp buf id to -1, this will be updated at the end of frame if there is
9470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * buffer to be displayed
9480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     */
9490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_disp_buf_id = -1;
9500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->ps_disp_buf = NULL;
9510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_disable_deblk_pic  = 0;
9530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_disable_sao_pic    = 0;
9540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_fullpel_inter_pred = 0;
9550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_mv_frac_mask       = 0x7FFFFFFF;
9560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* If degrade is enabled, set the degrade flags appropriately */
9580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ps_codec->i4_degrade_type && ps_codec->i4_degrade_pics)
9590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
9600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 degrade_pic;
9610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->i4_degrade_pic_cnt++;
9620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        degrade_pic = 0;
9630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* If degrade is to be done in all frames, then do not check further */
9650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        switch(ps_codec->i4_degrade_pics)
9660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
9670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            case 4:
9680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
9690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                degrade_pic = 1;
9700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                break;
9710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
9720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            case 3:
9730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
9740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(ps_slice_hdr->i1_slice_type != ISLICE)
9750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    degrade_pic = 1;
9760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                break;
9780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
9790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            case 2:
9800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
9810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* If pic count hits non-degrade interval or it is an islice, then do not degrade */
9830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if((ps_slice_hdr->i1_slice_type != ISLICE) &&
9840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                   (ps_codec->i4_degrade_pic_cnt != ps_codec->i4_nondegrade_interval))
9850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    degrade_pic = 1;
9860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                break;
9880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
9890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            case 1:
9900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
9910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Check if the current picture is non-ref */
9920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if((ps_slice_hdr->i1_nal_unit_type < NAL_BLA_W_LP) &&
9930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                   (ps_slice_hdr->i1_nal_unit_type % 2 == 0))
9940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
9950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    degrade_pic = 1;
9960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
9970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                break;
9980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
9990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
10020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(degrade_pic)
10030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
10040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(ps_codec->i4_degrade_type & 0x1)
10050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->i4_disable_sao_pic = 1;
10060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(ps_codec->i4_degrade_type & 0x2)
10080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->i4_disable_deblk_pic = 1;
10090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* MC degrading is done only for non-ref pictures */
10110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((ps_slice_hdr->i1_nal_unit_type < NAL_BLA_W_LP) &&
10120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar               (ps_slice_hdr->i1_nal_unit_type % 2 == 0))
10130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
10140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(ps_codec->i4_degrade_type & 0x4)
10150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->i4_mv_frac_mask = 0;
10160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(ps_codec->i4_degrade_type & 0x8)
10180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->i4_mv_frac_mask = 0;
10190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
10200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
10210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else
10220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->i4_degrade_pic_cnt = 0;
10230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
10240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
10270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 i;
10280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(i = 0; i < MAX_PROCESS_THREADS; i++)
10290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
10300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].pu4_pic_pu_idx = ps_codec->s_parse.pu4_pic_pu_idx;
10310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].ps_pic_pu = ps_codec->s_parse.ps_pic_pu;
10320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].pu1_pic_pu_map = ps_codec->s_parse.pu1_pic_pu_map;
10330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].pu4_pic_tu_idx = ps_codec->s_parse.pu4_pic_tu_idx;
10340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].ps_pic_tu = ps_codec->s_parse.ps_pic_tu;
10350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].pu1_pic_tu_map = ps_codec->s_parse.pu1_pic_tu_map;
10360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].pv_pic_tu_coeff_data = ps_codec->s_parse.pv_pic_tu_coeff_data;
10370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].i4_cur_mv_bank_buf_id = cur_mv_bank_buf_id;
10380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_sao_ctxt.pu1_slice_idx = ps_codec->as_process[i].pu1_slice_idx;
10390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_sao_ctxt.pu1_tile_idx = ps_codec->as_process[i].pu1_tile_idx;
10400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* TODO: For asynchronous api the following initializations related to picture
10420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar             * buffer should be moved to processing side
10430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar             */
10440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].pu1_cur_pic_luma = pu1_cur_pic_luma;
10450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].pu1_cur_pic_chroma = pu1_cur_pic_chroma;
10460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].ps_cur_pic = ps_cur_pic;
10470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].i4_cur_pic_buf_id = cur_pic_buf_id;
10480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].ps_out_buffer = ps_codec->ps_out_buffer;
10500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(1 < ps_codec->i4_num_cores)
10510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
10520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->as_process[i].i4_check_parse_status = 1;
10530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->as_process[i].i4_check_proc_status = 1;
10540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
10550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            else
10560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
10570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->as_process[i].i4_check_parse_status = 0;
10580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->as_process[i].i4_check_proc_status = 0;
10590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
10600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].pu1_pic_intra_flag = ps_codec->s_parse.pu1_pic_intra_flag;
10610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].pu1_pic_no_loop_filter_flag = ps_codec->s_parse.pu1_pic_no_loop_filter_flag;
10620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].i4_init_done = 0;
10630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_bs_ctxt.pu4_pic_tu_idx = ps_codec->as_process[i].pu4_pic_tu_idx;
10650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_bs_ctxt.pu4_pic_pu_idx = ps_codec->as_process[i].pu4_pic_pu_idx;
10660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_bs_ctxt.ps_pic_pu = ps_codec->as_process[i].ps_pic_pu;
10670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_deblk_ctxt.pu1_pic_no_loop_filter_flag = ps_codec->s_parse.pu1_pic_no_loop_filter_flag;
10680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_deblk_ctxt.pu1_cur_pic_luma = pu1_cur_pic_luma;
10690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_deblk_ctxt.pu1_cur_pic_chroma = pu1_cur_pic_chroma;
10700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_sao_ctxt.pu1_pic_no_loop_filter_flag = ps_codec->s_parse.pu1_pic_no_loop_filter_flag;
10710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_sao_ctxt.pu1_cur_pic_luma = pu1_cur_pic_luma;
10720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_sao_ctxt.pu1_cur_pic_chroma = pu1_cur_pic_chroma;
10730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(i < (ps_codec->i4_num_cores - 1))
10740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
10750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ithread_create(ps_codec->apv_process_thread_handle[i], NULL,
10760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                               (void *)ihevcd_process_thread,
10770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                               (void *)&ps_codec->as_process[i]);
10780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->ai4_process_thread_created[i] = 1;
10790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
10800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            else
10810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
10820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->ai4_process_thread_created[i] = 0;
10830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
10840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
10860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.s_deblk_ctxt.pu1_cur_pic_luma = pu1_cur_pic_luma;
10870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.s_deblk_ctxt.pu1_cur_pic_chroma = pu1_cur_pic_chroma;
10880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.s_sao_ctxt.pu1_cur_pic_luma = pu1_cur_pic_luma;
10900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.s_sao_ctxt.pu1_cur_pic_chroma = pu1_cur_pic_chroma;
10910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
10920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Since any input bitstream buffer that contains slice data will be sent to output(even in
10930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * case of error, this buffer is added to display queue and next buffer in the display queue
10940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * will be returned as the display buffer.
10950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * Note: If format conversion (or frame copy) is used and is scheduled
10960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * in a different thread then it has to check if the processing for the current row is complete before
10970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * it copies/converts a given row. In case of low delay or in case of B pictures, current frame being decoded has to be
10980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * returned, which requires a status check to ensure that the current row is reconstructed before copying.
10990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     */
11000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Add current picture to display manager */
11010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
11020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 abs_poc;
11030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        slice_header_t *ps_slice_hdr;
11040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_slice_hdr = ps_codec->s_parse.ps_slice_hdr;
11050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        abs_poc = ps_slice_hdr->i4_abs_pic_order_cnt;
11060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ihevc_disp_mgr_add((disp_mgr_t *)ps_codec->pv_disp_buf_mgr,
11070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                           ps_codec->as_process[0].i4_cur_pic_buf_id,
11080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                           abs_poc,
11090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                           ps_codec->as_process[0].ps_cur_pic);
11100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
11110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->ps_disp_buf = NULL;
11120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Get picture to be displayed if number of pictures decoded is more than max allowed reorder */
11130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Since the current will be decoded, check is fore >= instead of > */
11140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(((WORD32)(ps_codec->u4_pic_cnt - ps_codec->u4_disp_cnt) >= ps_sps->ai1_sps_max_num_reorder_pics[ps_sps->i1_sps_max_sub_layers - 1]) ||
1115e3d6224dca4eb80297009b1a753aa65cb0117bd8Harish Mahendrakar       (ps_codec->e_frm_out_mode == IVD_DECODE_FRAME_OUT))
11160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
11170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
11180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->ps_disp_buf = (pic_buf_t *)ihevc_disp_mgr_get((disp_mgr_t *)ps_codec->pv_disp_buf_mgr, &ps_codec->i4_disp_buf_id);
11190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->u4_disp_cnt++;
11200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
11210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
11220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_fmt_conv.i4_cur_row = 0;
11230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Set number of rows to be processed at a time */
11240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_fmt_conv.i4_num_rows = 4;
11250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
11260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ps_codec->u4_enable_fmt_conv_ahead && (ps_codec->i4_num_cores > 1))
11270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
11280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        process_ctxt_t *ps_proc;
11290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
11300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* i4_num_cores - 1 contexts are currently being used by other threads */
11310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_proc = &ps_codec->as_process[ps_codec->i4_num_cores - 1];
11320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
11330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* If the frame being decoded and displayed are different, schedule format conversion jobs
11340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * this will keep the proc threads busy and lets parse thread decode few CTBs ahead
11350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * If the frame being decoded and displayed are same, then format conversion is scheduled later.
11360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         */
11370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if((ps_codec->ps_disp_buf) && (ps_codec->i4_disp_buf_id != ps_proc->i4_cur_pic_buf_id) &&
11380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar           ((0 == ps_codec->i4_share_disp_buf) || (IV_YUV_420P == ps_codec->e_chroma_fmt)))
11390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
11400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
11410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            for(i = 0; i < ps_sps->i2_pic_ht_in_ctb; i++)
11420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
11430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                proc_job_t s_job;
11440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                IHEVCD_ERROR_T ret;
11450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                s_job.i4_cmd = CMD_FMTCONV;
11460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                s_job.i2_ctb_cnt = 0;
11470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                s_job.i2_ctb_x = 0;
11480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                s_job.i2_ctb_y = i;
11490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                s_job.i2_slice_idx = 0;
11500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                s_job.i4_tu_coeff_data_ofst = 0;
11510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ret = ihevcd_jobq_queue((jobq_t *)ps_codec->s_parse.pv_proc_jobq,
11520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        &s_job, sizeof(proc_job_t), 1);
11530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS)
11540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    return ret;
11550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
11560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
11570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
11580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
11590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
11600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return ret;
11610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
11620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
11630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1164