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