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_api.c
220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Contains api functions definitions for HEVC decoder
250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @author
270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Harish
280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par List of Functions:
300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* - api_check_struct_sanity()
310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* - ihevcd_get_version()
320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* - ihevcd_set_default_params()
330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* - ihevcd_init()
340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* - ihevcd_get_num_rec()
350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* - ihevcd_fill_num_mem_rec()
360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* - ihevcd_init_mem_rec()
370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* - ihevcd_retrieve_memrec()
380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* - ihevcd_set_display_frame()
390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* - ihevcd_set_flush_mode()
400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* - ihevcd_get_status()
410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* - ihevcd_get_buf_info()
420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* - ihevcd_set_params()
430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* - ihevcd_reset()
440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* - ihevcd_rel_display_frame()
450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* - ihevcd_disable_deblk()
460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* - ihevcd_get_frame_dimensions()
470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* - ihevcd_set_num_cores()
480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* - ihevcd_ctl()
490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* - ihevcd_cxa_api_function()
500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  None
530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/
570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* File Includes                                                             */
580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/
590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <stdio.h>
600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <stddef.h>
610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <stdlib.h>
620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <string.h>
630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_typedefs.h"
650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "iv.h"
660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ivd.h"
670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_cxa.h"
680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ithread.h"
690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_defs.h"
710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_debug.h"
720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_structs.h"
740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_macros.h"
750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_platform_macros.h"
760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_buf_mgr.h"
780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_dpb_mgr.h"
790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_disp_mgr.h"
800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_common_tables.h"
810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_cabac_tables.h"
820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_error.h"
830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_defs.h"
850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_trace.h"
860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_function_selector.h"
880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_structs.h"
890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_error.h"
900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_utils.h"
910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_decode.h"
920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_job_queue.h"
930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_statistics.h"
940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/
960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* Function Prototypes                                                       */
970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/
980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarIV_API_CALL_STATUS_T ihevcd_get_version(CHAR *pc_version_string,
990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        UWORD32 u4_version_buffer_size);
1000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
1040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
1050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
1070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Used to test arguments for corresponding API call
1080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
1100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  For each command the arguments are validated
1110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_handle
1130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Codec handle at API level
1140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pv_api_ip
1160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to input structure
1170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pv_api_op
1190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to output structure
1200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns  Status of error checking
1220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
1240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
1260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
1270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
1280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarstatic IV_API_CALL_STATUS_T api_check_struct_sanity(iv_obj_t *ps_handle,
1300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    void *pv_api_ip,
1310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                    void *pv_api_op)
1320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
1330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    IVD_API_COMMAND_TYPE_T e_cmd;
1340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32 *pu4_api_ip;
1350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32 *pu4_api_op;
1360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 i, j;
1370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(NULL == pv_api_op)
1390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        return (IV_FAIL);
1400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(NULL == pv_api_ip)
1420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        return (IV_FAIL);
1430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    pu4_api_ip = (UWORD32 *)pv_api_ip;
1450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    pu4_api_op = (UWORD32 *)pv_api_op;
1460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    e_cmd = (IVD_API_COMMAND_TYPE_T)*(pu4_api_ip + 1);
1470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    *(pu4_api_op + 1) = 0;
1490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* error checks on handle */
1500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    switch((WORD32)e_cmd)
1510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
1520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IV_CMD_GET_NUM_MEM_REC:
1530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IV_CMD_FILL_NUM_MEM_REC:
1540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
1550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IV_CMD_INIT:
1560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(ps_handle == NULL)
1570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
1580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                *(pu4_api_op + 1) |= 1 << IVD_UNSUPPORTEDPARAM;
1590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                *(pu4_api_op + 1) |= IVD_HANDLE_NULL;
1600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return IV_FAIL;
1610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
1620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(ps_handle->u4_size != sizeof(iv_obj_t))
1640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
1650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                *(pu4_api_op + 1) |= 1 << IVD_UNSUPPORTEDPARAM;
1660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                *(pu4_api_op + 1) |= IVD_HANDLE_STRUCT_SIZE_INCORRECT;
1670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                DEBUG("Sizes do not match. Expected: %d, Got: %d",
1680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                sizeof(iv_obj_t), ps_handle->u4_size);
1690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return IV_FAIL;
1700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
1710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
1720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IVD_CMD_REL_DISPLAY_FRAME:
1730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IVD_CMD_SET_DISPLAY_FRAME:
1740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IVD_CMD_GET_DISPLAY_FRAME:
1750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IVD_CMD_VIDEO_DECODE:
1760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IV_CMD_RETRIEVE_MEMREC:
1770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IVD_CMD_VIDEO_CTL:
1780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(ps_handle == NULL)
1790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
1800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                *(pu4_api_op + 1) |= 1 << IVD_UNSUPPORTEDPARAM;
1810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                *(pu4_api_op + 1) |= IVD_HANDLE_NULL;
1820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return IV_FAIL;
1830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
1840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(ps_handle->u4_size != sizeof(iv_obj_t))
1860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
1870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                *(pu4_api_op + 1) |= 1 << IVD_UNSUPPORTEDPARAM;
1880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                *(pu4_api_op + 1) |= IVD_HANDLE_STRUCT_SIZE_INCORRECT;
1890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return IV_FAIL;
1900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
1910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(ps_handle->pv_codec_handle == NULL)
1940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
1950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                *(pu4_api_op + 1) |= 1 << IVD_UNSUPPORTEDPARAM;
1960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                *(pu4_api_op + 1) |= IVD_INVALID_HANDLE_NULL;
1970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return IV_FAIL;
1980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
1990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
2000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        default:
2010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            *(pu4_api_op + 1) |= 1 << IVD_UNSUPPORTEDPARAM;
2020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            *(pu4_api_op + 1) |= IVD_INVALID_API_CMD;
2030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            return IV_FAIL;
2040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
2050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    switch((WORD32)e_cmd)
2070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
2080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IV_CMD_GET_NUM_MEM_REC:
2090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
2100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ihevcd_cxa_num_mem_rec_ip_t *ps_ip =
2110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            (ihevcd_cxa_num_mem_rec_ip_t *)pv_api_ip;
2120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ihevcd_cxa_num_mem_rec_op_t *ps_op =
2130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            (ihevcd_cxa_num_mem_rec_op_t *)pv_api_op;
2140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_op->s_ivd_num_mem_rec_op_t.u4_error_code = 0;
2150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(ps_ip->s_ivd_num_mem_rec_ip_t.u4_size
2170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            != sizeof(ihevcd_cxa_num_mem_rec_ip_t))
2180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
2190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_num_mem_rec_op_t.u4_error_code |= 1
2200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                << IVD_UNSUPPORTEDPARAM;
2210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_num_mem_rec_op_t.u4_error_code |=
2220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                IVD_IP_API_STRUCT_SIZE_INCORRECT;
2230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return (IV_FAIL);
2240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
2250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(ps_op->s_ivd_num_mem_rec_op_t.u4_size
2270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            != sizeof(ihevcd_cxa_num_mem_rec_op_t))
2280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
2290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_num_mem_rec_op_t.u4_error_code |= 1
2300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                << IVD_UNSUPPORTEDPARAM;
2310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_num_mem_rec_op_t.u4_error_code |=
2320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                IVD_OP_API_STRUCT_SIZE_INCORRECT;
2330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return (IV_FAIL);
2340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
2350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
2360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
2370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IV_CMD_FILL_NUM_MEM_REC:
2380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
2390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ihevcd_cxa_fill_mem_rec_ip_t *ps_ip =
2400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            (ihevcd_cxa_fill_mem_rec_ip_t *)pv_api_ip;
2410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ihevcd_cxa_fill_mem_rec_op_t *ps_op =
2420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            (ihevcd_cxa_fill_mem_rec_op_t *)pv_api_op;
2430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            iv_mem_rec_t *ps_mem_rec;
2440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 max_wd = ps_ip->s_ivd_fill_mem_rec_ip_t.u4_max_frm_wd;
2450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 max_ht = ps_ip->s_ivd_fill_mem_rec_ip_t.u4_max_frm_ht;
2460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            max_wd = ALIGN64(max_wd);
2480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            max_ht = ALIGN64(max_ht);
2490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_op->s_ivd_fill_mem_rec_op_t.u4_error_code = 0;
2510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((ps_ip->s_ivd_fill_mem_rec_ip_t.u4_size
2530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            > sizeof(ihevcd_cxa_fill_mem_rec_ip_t))
2540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            || (ps_ip->s_ivd_fill_mem_rec_ip_t.u4_size
2550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            < sizeof(iv_fill_mem_rec_ip_t)))
2560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
2570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_fill_mem_rec_op_t.u4_error_code |= 1
2580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                << IVD_UNSUPPORTEDPARAM;
2590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_fill_mem_rec_op_t.u4_error_code |=
2600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                IVD_IP_API_STRUCT_SIZE_INCORRECT;
2610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return (IV_FAIL);
2620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
2630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((ps_op->s_ivd_fill_mem_rec_op_t.u4_size
2650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            != sizeof(ihevcd_cxa_fill_mem_rec_op_t))
2660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            && (ps_op->s_ivd_fill_mem_rec_op_t.u4_size
2670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            != sizeof(iv_fill_mem_rec_op_t)))
2680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
2690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_fill_mem_rec_op_t.u4_error_code |= 1
2700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                << IVD_UNSUPPORTEDPARAM;
2710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_fill_mem_rec_op_t.u4_error_code |=
2720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                IVD_OP_API_STRUCT_SIZE_INCORRECT;
2730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return (IV_FAIL);
2740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
2750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(max_wd < MIN_WD)
2770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
2780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_fill_mem_rec_op_t.u4_error_code |= 1
2790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                << IVD_UNSUPPORTEDPARAM;
2800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_fill_mem_rec_op_t.u4_error_code |=
2810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                IVD_REQUESTED_WIDTH_NOT_SUPPPORTED;
2820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return (IV_FAIL);
2830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
2840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(max_wd > MAX_WD)
2860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
2870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_fill_mem_rec_op_t.u4_error_code |= 1
2880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                << IVD_UNSUPPORTEDPARAM;
2890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_fill_mem_rec_op_t.u4_error_code |=
2900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                IVD_REQUESTED_WIDTH_NOT_SUPPPORTED;
2910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return (IV_FAIL);
2920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
2930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(max_ht < MIN_HT)
2950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
2960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_fill_mem_rec_op_t.u4_error_code |= 1
2970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                << IVD_UNSUPPORTEDPARAM;
2980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_fill_mem_rec_op_t.u4_error_code |=
2990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                IVD_REQUESTED_HEIGHT_NOT_SUPPPORTED;
3000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return (IV_FAIL);
3010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
3020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((max_ht * max_wd) > (MAX_HT * MAX_WD))
3040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
3060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_fill_mem_rec_op_t.u4_error_code |= 1
3070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                << IVD_UNSUPPORTEDPARAM;
3080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_fill_mem_rec_op_t.u4_error_code |=
3090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                IVD_REQUESTED_HEIGHT_NOT_SUPPPORTED;
3100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return (IV_FAIL);
3110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
3120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(NULL == ps_ip->s_ivd_fill_mem_rec_ip_t.pv_mem_rec_location)
3140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
3150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_fill_mem_rec_op_t.u4_error_code |= 1
3160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                << IVD_UNSUPPORTEDPARAM;
3170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_fill_mem_rec_op_t.u4_error_code |=
3180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                IVD_NUM_REC_NOT_SUFFICIENT;
3190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return (IV_FAIL);
3200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
3210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* check memrecords sizes are correct */
3230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_mem_rec = ps_ip->s_ivd_fill_mem_rec_ip_t.pv_mem_rec_location;
3240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            for(i = 0; i < MEM_REC_CNT; i++)
3250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
3260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(ps_mem_rec[i].u4_size != sizeof(iv_mem_rec_t))
3270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
3280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_op->s_ivd_fill_mem_rec_op_t.u4_error_code |= 1
3290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    << IVD_UNSUPPORTEDPARAM;
3300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_op->s_ivd_fill_mem_rec_op_t.u4_error_code |=
3310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    IVD_MEM_REC_STRUCT_SIZE_INCORRECT;
3320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    return IV_FAIL;
3330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
3340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
3350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
3360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
3370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IV_CMD_INIT:
3390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
3400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ihevcd_cxa_init_ip_t *ps_ip = (ihevcd_cxa_init_ip_t *)pv_api_ip;
3410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ihevcd_cxa_init_op_t *ps_op = (ihevcd_cxa_init_op_t *)pv_api_op;
3420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            iv_mem_rec_t *ps_mem_rec;
3430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 max_wd = ps_ip->s_ivd_init_ip_t.u4_frm_max_wd;
3440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 max_ht = ps_ip->s_ivd_init_ip_t.u4_frm_max_ht;
3450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            max_wd = ALIGN64(max_wd);
3470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            max_ht = ALIGN64(max_ht);
3480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_op->s_ivd_init_op_t.u4_error_code = 0;
3500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((ps_ip->s_ivd_init_ip_t.u4_size > sizeof(ihevcd_cxa_init_ip_t))
3520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            || (ps_ip->s_ivd_init_ip_t.u4_size
3530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            < sizeof(ivd_init_ip_t)))
3540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
3550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_init_op_t.u4_error_code |= 1
3560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                << IVD_UNSUPPORTEDPARAM;
3570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_init_op_t.u4_error_code |=
3580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                IVD_IP_API_STRUCT_SIZE_INCORRECT;
3590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                DEBUG("\n");
3600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return (IV_FAIL);
3610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
3620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((ps_op->s_ivd_init_op_t.u4_size != sizeof(ihevcd_cxa_init_op_t))
3640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            && (ps_op->s_ivd_init_op_t.u4_size
3650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            != sizeof(ivd_init_op_t)))
3660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
3670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_init_op_t.u4_error_code |= 1
3680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                << IVD_UNSUPPORTEDPARAM;
3690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_init_op_t.u4_error_code |=
3700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                IVD_OP_API_STRUCT_SIZE_INCORRECT;
3710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                DEBUG("\n");
3720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return (IV_FAIL);
3730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
3740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(ps_ip->s_ivd_init_ip_t.u4_num_mem_rec != MEM_REC_CNT)
3760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
3770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_init_op_t.u4_error_code |= 1
3780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                << IVD_UNSUPPORTEDPARAM;
3790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_init_op_t.u4_error_code |=
3800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                IVD_INIT_DEC_NOT_SUFFICIENT;
3810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                DEBUG("\n");
3820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return (IV_FAIL);
3830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
3840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(max_wd < MIN_WD)
3860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
3870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_init_op_t.u4_error_code |= 1
3880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                << IVD_UNSUPPORTEDPARAM;
3890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_init_op_t.u4_error_code |=
3900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                IVD_INIT_DEC_WIDTH_NOT_SUPPPORTED;
3910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                DEBUG("\n");
3920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return (IV_FAIL);
3930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
3940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(max_wd > MAX_WD)
3960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
3970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_init_op_t.u4_error_code |= 1
3980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                << IVD_UNSUPPORTEDPARAM;
3990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_init_op_t.u4_error_code |=
4000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                IVD_INIT_DEC_WIDTH_NOT_SUPPPORTED;
4010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                DEBUG("\n");
4020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return (IV_FAIL);
4030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
4040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(max_ht < MIN_HT)
4060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
4070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_init_op_t.u4_error_code |= 1
4080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                << IVD_UNSUPPORTEDPARAM;
4090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_init_op_t.u4_error_code |=
4100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                IVD_INIT_DEC_HEIGHT_NOT_SUPPPORTED;
4110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                DEBUG("\n");
4120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return (IV_FAIL);
4130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
4140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((max_ht * max_wd) > (MAX_HT * MAX_WD))
4160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
4180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_init_op_t.u4_error_code |= 1
4190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                << IVD_UNSUPPORTEDPARAM;
4200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_init_op_t.u4_error_code |=
4210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                IVD_INIT_DEC_HEIGHT_NOT_SUPPPORTED;
4220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                DEBUG("\n");
4230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return (IV_FAIL);
4240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
4250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(NULL == ps_ip->s_ivd_init_ip_t.pv_mem_rec_location)
4270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
4280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_init_op_t.u4_error_code |= 1
4290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                << IVD_UNSUPPORTEDPARAM;
4300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_init_op_t.u4_error_code |=
4310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                IVD_NUM_REC_NOT_SUFFICIENT;
4320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                DEBUG("\n");
4330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return (IV_FAIL);
4340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
4350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((ps_ip->s_ivd_init_ip_t.e_output_format != IV_YUV_420P)
4370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            && (ps_ip->s_ivd_init_ip_t.e_output_format
4380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            != IV_YUV_422ILE)
4390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            && (ps_ip->s_ivd_init_ip_t.e_output_format
4400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            != IV_RGB_565)
4410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            && (ps_ip->s_ivd_init_ip_t.e_output_format
4420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            != IV_RGBA_8888)
4430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            && (ps_ip->s_ivd_init_ip_t.e_output_format
4440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            != IV_YUV_420SP_UV)
4450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            && (ps_ip->s_ivd_init_ip_t.e_output_format
4460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            != IV_YUV_420SP_VU))
4470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
4480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_init_op_t.u4_error_code |= 1
4490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                << IVD_UNSUPPORTEDPARAM;
4500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_init_op_t.u4_error_code |=
4510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                IVD_INIT_DEC_COL_FMT_NOT_SUPPORTED;
4520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                DEBUG("\n");
4530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return (IV_FAIL);
4540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
4550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* verify number of mem records */
4570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(ps_ip->s_ivd_init_ip_t.u4_num_mem_rec < MEM_REC_CNT)
4580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
4590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_init_op_t.u4_error_code |= 1
4600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                << IVD_UNSUPPORTEDPARAM;
4610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_init_op_t.u4_error_code |=
4620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                IVD_INIT_DEC_MEM_REC_NOT_SUFFICIENT;
4630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                DEBUG("\n");
4640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return IV_FAIL;
4650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
4660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_mem_rec = ps_ip->s_ivd_init_ip_t.pv_mem_rec_location;
4680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* check memrecords sizes are correct */
4690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            for(i = 0; i < (WORD32)ps_ip->s_ivd_init_ip_t.u4_num_mem_rec; i++)
4700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
4710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(ps_mem_rec[i].u4_size != sizeof(iv_mem_rec_t))
4720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
4730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_op->s_ivd_init_op_t.u4_error_code |= 1
4740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    << IVD_UNSUPPORTEDPARAM;
4750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_op->s_ivd_init_op_t.u4_error_code |=
4760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    IVD_MEM_REC_STRUCT_SIZE_INCORRECT;
4770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    DEBUG("i: %d\n", i);
4780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    return IV_FAIL;
4790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
4800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* check memrecords pointers are not NULL */
4810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(ps_mem_rec[i].pv_base == NULL)
4830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
4840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_op->s_ivd_init_op_t.u4_error_code |= 1
4860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    << IVD_UNSUPPORTEDPARAM;
4870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_op->s_ivd_init_op_t.u4_error_code |=
4880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    IVD_INIT_DEC_MEM_REC_BASE_NULL;
4890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    DEBUG("i: %d\n", i);
4900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    return IV_FAIL;
4910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
4930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
4950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* verify memtabs for overlapping regions */
4970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
4980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                void *start[MEM_REC_CNT];
4990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                void *end[MEM_REC_CNT];
5000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                start[0] = (ps_mem_rec[0].pv_base);
5020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                end[0] = (UWORD8 *)(ps_mem_rec[0].pv_base)
5030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                + ps_mem_rec[0].u4_mem_size - 1;
5040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(i = 1; i < MEM_REC_CNT; i++)
5050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
5060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    /* This array is populated to check memtab overlapp */
5070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    start[i] = (ps_mem_rec[i].pv_base);
5080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    end[i] = (UWORD8 *)(ps_mem_rec[i].pv_base)
5090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    + ps_mem_rec[i].u4_mem_size - 1;
5100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    for(j = 0; j < i; j++)
5120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
5130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        if((start[i] >= start[j]) && (start[i] <= end[j]))
5140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        {
5150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ps_op->s_ivd_init_op_t.u4_error_code |= 1
5160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            << IVD_UNSUPPORTEDPARAM;
5170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ps_op->s_ivd_init_op_t.u4_error_code |=
5180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            IVD_INIT_DEC_MEM_REC_OVERLAP_ERR;
5190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            DEBUG("i: %d, j: %d\n", i, j);
5200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            return IV_FAIL;
5210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        }
5220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        if((end[i] >= start[j]) && (end[i] <= end[j]))
5240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        {
5250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ps_op->s_ivd_init_op_t.u4_error_code |= 1
5260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            << IVD_UNSUPPORTEDPARAM;
5270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ps_op->s_ivd_init_op_t.u4_error_code |=
5280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            IVD_INIT_DEC_MEM_REC_OVERLAP_ERR;
5290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            DEBUG("i: %d, j: %d\n", i, j);
5300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            return IV_FAIL;
5310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        }
5320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        if((start[i] < start[j]) && (end[i] > end[j]))
5340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        {
5350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ps_op->s_ivd_init_op_t.u4_error_code |= 1
5360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            << IVD_UNSUPPORTEDPARAM;
5370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ps_op->s_ivd_init_op_t.u4_error_code |=
5380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            IVD_INIT_DEC_MEM_REC_OVERLAP_ERR;
5390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            DEBUG("i: %d, j: %d\n", i, j);
5400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            return IV_FAIL;
5410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        }
5420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
5430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
5450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
5460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
5480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                iv_mem_rec_t mem_rec_ittiam_api[MEM_REC_CNT];
5490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ihevcd_cxa_fill_mem_rec_ip_t s_fill_mem_rec_ip;
5500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ihevcd_cxa_fill_mem_rec_op_t s_fill_mem_rec_op;
5510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                IV_API_CALL_STATUS_T e_status;
5520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                WORD32 i;
5540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                s_fill_mem_rec_ip.s_ivd_fill_mem_rec_ip_t.e_cmd =
5550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                IV_CMD_FILL_NUM_MEM_REC;
5560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                s_fill_mem_rec_ip.s_ivd_fill_mem_rec_ip_t.pv_mem_rec_location =
5570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                mem_rec_ittiam_api;
5580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                s_fill_mem_rec_ip.s_ivd_fill_mem_rec_ip_t.u4_max_frm_wd =
5590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                max_wd;
5600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                s_fill_mem_rec_ip.s_ivd_fill_mem_rec_ip_t.u4_max_frm_ht =
5610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                max_ht;
5620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(ps_ip->s_ivd_init_ip_t.u4_size
5640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                > offsetof(ihevcd_cxa_init_ip_t, i4_level))
5650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
5660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    s_fill_mem_rec_ip.i4_level = ps_ip->i4_level;
5670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
5680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                else
5690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
5700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    s_fill_mem_rec_ip.i4_level = IHEVC_LEVEL_31;
5710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
5720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(ps_ip->s_ivd_init_ip_t.u4_size
5740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                > offsetof(ihevcd_cxa_init_ip_t,
5750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                           u4_num_ref_frames))
5760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
5770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    s_fill_mem_rec_ip.u4_num_ref_frames =
5780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    ps_ip->u4_num_ref_frames;
5790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
5800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                else
5810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
5820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    s_fill_mem_rec_ip.u4_num_ref_frames = (MAX_REF_CNT + 1);
5830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
5840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(ps_ip->s_ivd_init_ip_t.u4_size
5860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                > offsetof(ihevcd_cxa_init_ip_t,
5870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                           u4_num_reorder_frames))
5880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
5890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    s_fill_mem_rec_ip.u4_num_reorder_frames =
5900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    ps_ip->u4_num_reorder_frames;
5910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
5920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                else
5930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
5940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    s_fill_mem_rec_ip.u4_num_reorder_frames = (MAX_REF_CNT + 1);
5950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
5960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(ps_ip->s_ivd_init_ip_t.u4_size
5980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                > offsetof(ihevcd_cxa_init_ip_t,
5990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                           u4_num_extra_disp_buf))
6000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
6010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    s_fill_mem_rec_ip.u4_num_extra_disp_buf =
6020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    ps_ip->u4_num_extra_disp_buf;
6030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
6040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                else
6050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
6060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    s_fill_mem_rec_ip.u4_num_extra_disp_buf = 0;
6070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
6080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(ps_ip->s_ivd_init_ip_t.u4_size
6100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                > offsetof(ihevcd_cxa_init_ip_t,
6110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                           u4_share_disp_buf))
6120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
6130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#ifndef LOGO_EN
6140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    s_fill_mem_rec_ip.u4_share_disp_buf =
6150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    ps_ip->u4_share_disp_buf;
6160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#else
6170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    s_fill_mem_rec_ip.u4_share_disp_buf = 0;
6180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#endif
6190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
6200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                else
6210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
6220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    s_fill_mem_rec_ip.u4_share_disp_buf = 0;
6230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
6240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                s_fill_mem_rec_ip.e_output_format =
6260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                ps_ip->s_ivd_init_ip_t.e_output_format;
6270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if((s_fill_mem_rec_ip.e_output_format != IV_YUV_420P)
6290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                && (s_fill_mem_rec_ip.e_output_format
6300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                != IV_YUV_420SP_UV)
6310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                && (s_fill_mem_rec_ip.e_output_format
6320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                != IV_YUV_420SP_VU))
6330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
6340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    s_fill_mem_rec_ip.u4_share_disp_buf = 0;
6350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
6360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                s_fill_mem_rec_ip.s_ivd_fill_mem_rec_ip_t.u4_size =
6380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                sizeof(ihevcd_cxa_fill_mem_rec_ip_t);
6390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                s_fill_mem_rec_op.s_ivd_fill_mem_rec_op_t.u4_size =
6400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                sizeof(ihevcd_cxa_fill_mem_rec_op_t);
6410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(i = 0; i < MEM_REC_CNT; i++)
6430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    mem_rec_ittiam_api[i].u4_size = sizeof(iv_mem_rec_t);
6440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                e_status = ihevcd_cxa_api_function(NULL,
6460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                   (void *)&s_fill_mem_rec_ip,
6470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                   (void *)&s_fill_mem_rec_op);
6480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(IV_FAIL == e_status)
6490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
6500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_op->s_ivd_init_op_t.u4_error_code =
6510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    s_fill_mem_rec_op.s_ivd_fill_mem_rec_op_t.u4_error_code;
6520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    DEBUG("Fail\n");
6530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    return (IV_FAIL);
6540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
6550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(i = 0; i < MEM_REC_CNT; i++)
6570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
6580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#ifdef ARMRVDS
6590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if((UWORD32)(ps_mem_rec[i].pv_base) & (mem_rec_ittiam_api[i].u4_mem_alignment - 1))
6600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
6610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_init_op_t.u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
6620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_init_op_t.u4_error_code |= IVD_INIT_DEC_MEM_REC_ALIGNMENT_ERR;
6630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        DEBUG("Fail\n");
6640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        return IV_FAIL;
6650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
6660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#endif
6670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_mem_rec[i].u4_mem_size
6690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    < mem_rec_ittiam_api[i].u4_mem_size)
6700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
6710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_init_op_t.u4_error_code |= 1
6720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        << IVD_UNSUPPORTEDPARAM;
6730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_init_op_t.u4_error_code |=
6740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        IVD_INIT_DEC_MEM_REC_INSUFFICIENT_SIZE;
6750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        DEBUG("i: %d \n", i);
6760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        return IV_FAIL;
6770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
6780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_mem_rec[i].u4_mem_alignment
6790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    != mem_rec_ittiam_api[i].u4_mem_alignment)
6800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
6810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_init_op_t.u4_error_code |= 1
6820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        << IVD_UNSUPPORTEDPARAM;
6830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_init_op_t.u4_error_code |=
6840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        IVD_INIT_DEC_MEM_REC_ALIGNMENT_ERR;
6850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        DEBUG("i: %d \n", i);
6860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        return IV_FAIL;
6870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
6880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_mem_rec[i].e_mem_type
6890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    != mem_rec_ittiam_api[i].e_mem_type)
6900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
6910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        UWORD32 check = IV_SUCCESS;
6920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        UWORD32 diff = mem_rec_ittiam_api[i].e_mem_type
6930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        - ps_mem_rec[i].e_mem_type;
6940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        if((ps_mem_rec[i].e_mem_type
6960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        <= IV_EXTERNAL_CACHEABLE_SCRATCH_MEM)
6970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        && (mem_rec_ittiam_api[i].e_mem_type
6980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                        >= IV_INTERNAL_NONCACHEABLE_PERSISTENT_MEM))
6990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        {
7000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            check = IV_FAIL;
7010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        }
7020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        if(3 != (mem_rec_ittiam_api[i].e_mem_type % 4))
7030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        {
7040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            /*
7050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                             * It is not IV_EXTERNAL_NONCACHEABLE_PERSISTENT_MEM or IV_EXTERNAL_CACHEABLE_PERSISTENT_MEM
7060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                             */
7070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            if((diff < 1) || (diff > 3))
7080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            {
7090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                // Difference between 1 and 3 is okay for all cases other than the two filtered
7100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                // with the MOD condition above
7110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                check = IV_FAIL;
7120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            }
7130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        }
7140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        else
7150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        {
7160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            if(diff == 1)
7170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            {
7180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                /*
7190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                 * This particular case is when codec asked for External Persistent, but got
7200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                 * Internal Scratch.
7210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                 */
7220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                check = IV_FAIL;
7230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            }
7240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            if((diff != 2) && (diff != 3))
7250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            {
7260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                check = IV_FAIL;
7270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            }
7280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        }
7290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        if(check == IV_FAIL)
7300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        {
7310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ps_op->s_ivd_init_op_t.u4_error_code |= 1
7320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            << IVD_UNSUPPORTEDPARAM;
7330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ps_op->s_ivd_init_op_t.u4_error_code |=
7340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            IVD_INIT_DEC_MEM_REC_INCORRECT_TYPE;
7350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            DEBUG("i: %d \n", i);
7360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            return IV_FAIL;
7370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        }
7380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
7390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
7400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
7410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
7430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
7440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IVD_CMD_GET_DISPLAY_FRAME:
7460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
7470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ihevcd_cxa_get_display_frame_ip_t *ps_ip =
7480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            (ihevcd_cxa_get_display_frame_ip_t *)pv_api_ip;
7490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ihevcd_cxa_get_display_frame_op_t *ps_op =
7500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            (ihevcd_cxa_get_display_frame_op_t *)pv_api_op;
7510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_op->s_ivd_get_display_frame_op_t.u4_error_code = 0;
7530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((ps_ip->s_ivd_get_display_frame_ip_t.u4_size
7550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            != sizeof(ihevcd_cxa_get_display_frame_ip_t))
7560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            && (ps_ip->s_ivd_get_display_frame_ip_t.u4_size
7570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            != sizeof(ivd_get_display_frame_ip_t)))
7580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
7590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_get_display_frame_op_t.u4_error_code |= 1
7600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                << IVD_UNSUPPORTEDPARAM;
7610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_get_display_frame_op_t.u4_error_code |=
7620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                IVD_IP_API_STRUCT_SIZE_INCORRECT;
7630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return (IV_FAIL);
7640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
7650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((ps_op->s_ivd_get_display_frame_op_t.u4_size
7670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            != sizeof(ihevcd_cxa_get_display_frame_op_t))
7680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            && (ps_op->s_ivd_get_display_frame_op_t.u4_size
7690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            != sizeof(ivd_get_display_frame_op_t)))
7700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
7710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_get_display_frame_op_t.u4_error_code |= 1
7720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                << IVD_UNSUPPORTEDPARAM;
7730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_get_display_frame_op_t.u4_error_code |=
7740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                IVD_OP_API_STRUCT_SIZE_INCORRECT;
7750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return (IV_FAIL);
7760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
7770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
7790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
7800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IVD_CMD_REL_DISPLAY_FRAME:
7820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
7830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ihevcd_cxa_rel_display_frame_ip_t *ps_ip =
7840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            (ihevcd_cxa_rel_display_frame_ip_t *)pv_api_ip;
7850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ihevcd_cxa_rel_display_frame_op_t *ps_op =
7860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            (ihevcd_cxa_rel_display_frame_op_t *)pv_api_op;
7870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_op->s_ivd_rel_display_frame_op_t.u4_error_code = 0;
7890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((ps_ip->s_ivd_rel_display_frame_ip_t.u4_size
7910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            != sizeof(ihevcd_cxa_rel_display_frame_ip_t))
7920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            && (ps_ip->s_ivd_rel_display_frame_ip_t.u4_size
7930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            != sizeof(ivd_rel_display_frame_ip_t)))
7940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
7950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_rel_display_frame_op_t.u4_error_code |= 1
7960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                << IVD_UNSUPPORTEDPARAM;
7970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_rel_display_frame_op_t.u4_error_code |=
7980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                IVD_IP_API_STRUCT_SIZE_INCORRECT;
7990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return (IV_FAIL);
8000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
8010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((ps_op->s_ivd_rel_display_frame_op_t.u4_size
8030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            != sizeof(ihevcd_cxa_rel_display_frame_op_t))
8040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            && (ps_op->s_ivd_rel_display_frame_op_t.u4_size
8050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            != sizeof(ivd_rel_display_frame_op_t)))
8060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
8070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_rel_display_frame_op_t.u4_error_code |= 1
8080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                << IVD_UNSUPPORTEDPARAM;
8090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_rel_display_frame_op_t.u4_error_code |=
8100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                IVD_OP_API_STRUCT_SIZE_INCORRECT;
8110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return (IV_FAIL);
8120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
8130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
8150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
8160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IVD_CMD_SET_DISPLAY_FRAME:
8180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
8190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ihevcd_cxa_set_display_frame_ip_t *ps_ip =
8200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            (ihevcd_cxa_set_display_frame_ip_t *)pv_api_ip;
8210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ihevcd_cxa_set_display_frame_op_t *ps_op =
8220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            (ihevcd_cxa_set_display_frame_op_t *)pv_api_op;
8230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            UWORD32 j;
8240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_op->s_ivd_set_display_frame_op_t.u4_error_code = 0;
8260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((ps_ip->s_ivd_set_display_frame_ip_t.u4_size
8280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            != sizeof(ihevcd_cxa_set_display_frame_ip_t))
8290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            && (ps_ip->s_ivd_set_display_frame_ip_t.u4_size
8300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            != sizeof(ivd_set_display_frame_ip_t)))
8310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
8320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_set_display_frame_op_t.u4_error_code |= 1
8330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                << IVD_UNSUPPORTEDPARAM;
8340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_set_display_frame_op_t.u4_error_code |=
8350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                IVD_IP_API_STRUCT_SIZE_INCORRECT;
8360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return (IV_FAIL);
8370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
8380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((ps_op->s_ivd_set_display_frame_op_t.u4_size
8400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            != sizeof(ihevcd_cxa_set_display_frame_op_t))
8410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            && (ps_op->s_ivd_set_display_frame_op_t.u4_size
8420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            != sizeof(ivd_set_display_frame_op_t)))
8430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
8440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_set_display_frame_op_t.u4_error_code |= 1
8450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                << IVD_UNSUPPORTEDPARAM;
8460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_set_display_frame_op_t.u4_error_code |=
8470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                IVD_OP_API_STRUCT_SIZE_INCORRECT;
8480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return (IV_FAIL);
8490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
8500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(ps_ip->s_ivd_set_display_frame_ip_t.num_disp_bufs == 0)
8520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
8530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_set_display_frame_op_t.u4_error_code |= 1
8540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                << IVD_UNSUPPORTEDPARAM;
8550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_set_display_frame_op_t.u4_error_code |=
8560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                IVD_DISP_FRM_ZERO_OP_BUFS;
8570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return IV_FAIL;
8580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
8590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            for(j = 0; j < ps_ip->s_ivd_set_display_frame_ip_t.num_disp_bufs;
8610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            j++)
8620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
8630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(ps_ip->s_ivd_set_display_frame_ip_t.s_disp_buffer[j].u4_num_bufs
8640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                == 0)
8650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
8660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_op->s_ivd_set_display_frame_op_t.u4_error_code |= 1
8670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    << IVD_UNSUPPORTEDPARAM;
8680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_op->s_ivd_set_display_frame_op_t.u4_error_code |=
8690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    IVD_DISP_FRM_ZERO_OP_BUFS;
8700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    return IV_FAIL;
8710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
8720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                for(i = 0;
8740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                i
8750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                < (WORD32)ps_ip->s_ivd_set_display_frame_ip_t.s_disp_buffer[j].u4_num_bufs;
8760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                i++)
8770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
8780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_ip->s_ivd_set_display_frame_ip_t.s_disp_buffer[j].pu1_bufs[i]
8790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    == NULL)
8800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
8810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_set_display_frame_op_t.u4_error_code |= 1
8820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        << IVD_UNSUPPORTEDPARAM;
8830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_set_display_frame_op_t.u4_error_code |=
8840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        IVD_DISP_FRM_OP_BUF_NULL;
8850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        return IV_FAIL;
8860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
8870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_ip->s_ivd_set_display_frame_ip_t.s_disp_buffer[j].u4_min_out_buf_size[i]
8890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    == 0)
8900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
8910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_set_display_frame_op_t.u4_error_code |= 1
8920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        << IVD_UNSUPPORTEDPARAM;
8930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_set_display_frame_op_t.u4_error_code |=
8940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        IVD_DISP_FRM_ZERO_OP_BUF_SIZE;
8950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        return IV_FAIL;
8960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
8970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
8980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
8990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
9000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
9010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IVD_CMD_VIDEO_DECODE:
9030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
9040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ihevcd_cxa_video_decode_ip_t *ps_ip =
9050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            (ihevcd_cxa_video_decode_ip_t *)pv_api_ip;
9060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ihevcd_cxa_video_decode_op_t *ps_op =
9070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            (ihevcd_cxa_video_decode_op_t *)pv_api_op;
9080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            DEBUG("The input bytes is: %d",
9100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ps_ip->s_ivd_video_decode_ip_t.u4_num_Bytes);
9110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_op->s_ivd_video_decode_op_t.u4_error_code = 0;
9120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(ps_ip->s_ivd_video_decode_ip_t.u4_size
9140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            != sizeof(ihevcd_cxa_video_decode_ip_t)
9150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            && ps_ip->s_ivd_video_decode_ip_t.u4_size
9160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            != offsetof(ivd_video_decode_ip_t,
9170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                        s_out_buffer))
9180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
9190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_video_decode_op_t.u4_error_code |= 1
9200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                << IVD_UNSUPPORTEDPARAM;
9210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_video_decode_op_t.u4_error_code |=
9220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                IVD_IP_API_STRUCT_SIZE_INCORRECT;
9230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return (IV_FAIL);
9240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
9250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(ps_op->s_ivd_video_decode_op_t.u4_size
9270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            != sizeof(ihevcd_cxa_video_decode_op_t)
9280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            && ps_op->s_ivd_video_decode_op_t.u4_size
9290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                            != offsetof(ivd_video_decode_op_t,
9300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                        u4_output_present))
9310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
9320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_video_decode_op_t.u4_error_code |= 1
9330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                << IVD_UNSUPPORTEDPARAM;
9340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_video_decode_op_t.u4_error_code |=
9350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                IVD_OP_API_STRUCT_SIZE_INCORRECT;
9360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return (IV_FAIL);
9370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
9380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
9400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
9410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IV_CMD_RETRIEVE_MEMREC:
9430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
9440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ihevcd_cxa_retrieve_mem_rec_ip_t *ps_ip =
9450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            (ihevcd_cxa_retrieve_mem_rec_ip_t *)pv_api_ip;
9460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ihevcd_cxa_retrieve_mem_rec_op_t *ps_op =
9470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            (ihevcd_cxa_retrieve_mem_rec_op_t *)pv_api_op;
9480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            iv_mem_rec_t *ps_mem_rec;
9490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_op->s_ivd_retrieve_mem_rec_op_t.u4_error_code = 0;
9510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(ps_ip->s_ivd_retrieve_mem_rec_ip_t.u4_size
9530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            != sizeof(ihevcd_cxa_retrieve_mem_rec_ip_t))
9540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
9550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_retrieve_mem_rec_op_t.u4_error_code |= 1
9560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                << IVD_UNSUPPORTEDPARAM;
9570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_retrieve_mem_rec_op_t.u4_error_code |=
9580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                IVD_IP_API_STRUCT_SIZE_INCORRECT;
9590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return (IV_FAIL);
9600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
9610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(ps_op->s_ivd_retrieve_mem_rec_op_t.u4_size
9630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            != sizeof(ihevcd_cxa_retrieve_mem_rec_op_t))
9640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
9650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_retrieve_mem_rec_op_t.u4_error_code |= 1
9660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                << IVD_UNSUPPORTEDPARAM;
9670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->s_ivd_retrieve_mem_rec_op_t.u4_error_code |=
9680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                IVD_OP_API_STRUCT_SIZE_INCORRECT;
9690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return (IV_FAIL);
9700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
9710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_mem_rec = ps_ip->s_ivd_retrieve_mem_rec_ip_t.pv_mem_rec_location;
9730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* check memrecords sizes are correct */
9740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            for(i = 0; i < MEM_REC_CNT; i++)
9750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
9760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(ps_mem_rec[i].u4_size != sizeof(iv_mem_rec_t))
9770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
9780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_op->s_ivd_retrieve_mem_rec_op_t.u4_error_code |= 1
9790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    << IVD_UNSUPPORTEDPARAM;
9800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_op->s_ivd_retrieve_mem_rec_op_t.u4_error_code |=
9810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    IVD_MEM_REC_STRUCT_SIZE_INCORRECT;
9820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    return IV_FAIL;
9830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
9840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
9850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
9860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
9870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IVD_CMD_VIDEO_CTL:
9890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
9900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            UWORD32 *pu4_ptr_cmd;
9910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            UWORD32 sub_command;
9920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu4_ptr_cmd = (UWORD32 *)pv_api_ip;
9940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu4_ptr_cmd += 2;
9950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            sub_command = *pu4_ptr_cmd;
9960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
9970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            switch(sub_command)
9980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
9990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                case IVD_CMD_CTL_SETPARAMS:
10000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
10010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ihevcd_cxa_ctl_set_config_ip_t *ps_ip;
10020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ihevcd_cxa_ctl_set_config_op_t *ps_op;
10030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_ip = (ihevcd_cxa_ctl_set_config_ip_t *)pv_api_ip;
10040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_op = (ihevcd_cxa_ctl_set_config_op_t *)pv_api_op;
10050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_ip->s_ivd_ctl_set_config_ip_t.u4_size
10070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    != sizeof(ihevcd_cxa_ctl_set_config_ip_t))
10080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
10090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_ctl_set_config_op_t.u4_error_code |= 1
10100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        << IVD_UNSUPPORTEDPARAM;
10110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_ctl_set_config_op_t.u4_error_code |=
10120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        IVD_IP_API_STRUCT_SIZE_INCORRECT;
10130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        return IV_FAIL;
10140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
10150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
10160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    //no break; is needed here
10170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                case IVD_CMD_CTL_SETDEFAULT:
10180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
10190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ihevcd_cxa_ctl_set_config_op_t *ps_op;
10200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_op = (ihevcd_cxa_ctl_set_config_op_t *)pv_api_op;
10210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_op->s_ivd_ctl_set_config_op_t.u4_size
10220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    != sizeof(ihevcd_cxa_ctl_set_config_op_t))
10230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
10240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_ctl_set_config_op_t.u4_error_code |= 1
10250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        << IVD_UNSUPPORTEDPARAM;
10260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_ctl_set_config_op_t.u4_error_code |=
10270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        IVD_OP_API_STRUCT_SIZE_INCORRECT;
10280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        return IV_FAIL;
10290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
10300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
10310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    break;
10320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                case IVD_CMD_CTL_GETPARAMS:
10340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
10350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ihevcd_cxa_ctl_getstatus_ip_t *ps_ip;
10360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ihevcd_cxa_ctl_getstatus_op_t *ps_op;
10370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_ip = (ihevcd_cxa_ctl_getstatus_ip_t *)pv_api_ip;
10390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_op = (ihevcd_cxa_ctl_getstatus_op_t *)pv_api_op;
10400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_ip->s_ivd_ctl_getstatus_ip_t.u4_size
10410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    != sizeof(ihevcd_cxa_ctl_getstatus_ip_t))
10420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
10430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_ctl_getstatus_op_t.u4_error_code |= 1
10440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        << IVD_UNSUPPORTEDPARAM;
10450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_ctl_getstatus_op_t.u4_error_code |=
10460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        IVD_IP_API_STRUCT_SIZE_INCORRECT;
10470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        return IV_FAIL;
10480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
1049707042fda96ebede81408b854385173483798bcdHarish Mahendrakar                    if((ps_op->s_ivd_ctl_getstatus_op_t.u4_size
1050707042fda96ebede81408b854385173483798bcdHarish Mahendrakar                                    != sizeof(ihevcd_cxa_ctl_getstatus_op_t)) &&
1051707042fda96ebede81408b854385173483798bcdHarish Mahendrakar                       (ps_op->s_ivd_ctl_getstatus_op_t.u4_size
1052707042fda96ebede81408b854385173483798bcdHarish Mahendrakar                                    != sizeof(ivd_ctl_getstatus_op_t)))
10530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
10540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_ctl_getstatus_op_t.u4_error_code |= 1
10550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        << IVD_UNSUPPORTEDPARAM;
10560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_ctl_getstatus_op_t.u4_error_code |=
10570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        IVD_OP_API_STRUCT_SIZE_INCORRECT;
10580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        return IV_FAIL;
10590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
10600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
10610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    break;
10620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                case IVD_CMD_CTL_GETBUFINFO:
10640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
10650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ihevcd_cxa_ctl_getbufinfo_ip_t *ps_ip;
10660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ihevcd_cxa_ctl_getbufinfo_op_t *ps_op;
10670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_ip = (ihevcd_cxa_ctl_getbufinfo_ip_t *)pv_api_ip;
10680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_op = (ihevcd_cxa_ctl_getbufinfo_op_t *)pv_api_op;
10690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_ip->s_ivd_ctl_getbufinfo_ip_t.u4_size
10710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    != sizeof(ihevcd_cxa_ctl_getbufinfo_ip_t))
10720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
10730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_ctl_getbufinfo_op_t.u4_error_code |= 1
10740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        << IVD_UNSUPPORTEDPARAM;
10750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_ctl_getbufinfo_op_t.u4_error_code |=
10760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        IVD_IP_API_STRUCT_SIZE_INCORRECT;
10770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        return IV_FAIL;
10780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
10790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_op->s_ivd_ctl_getbufinfo_op_t.u4_size
10800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    != sizeof(ihevcd_cxa_ctl_getbufinfo_op_t))
10810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
10820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_ctl_getbufinfo_op_t.u4_error_code |= 1
10830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        << IVD_UNSUPPORTEDPARAM;
10840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_ctl_getbufinfo_op_t.u4_error_code |=
10850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        IVD_OP_API_STRUCT_SIZE_INCORRECT;
10860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        return IV_FAIL;
10870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
10880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
10890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    break;
10900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
10910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                case IVD_CMD_CTL_GETVERSION:
10920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
10930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ihevcd_cxa_ctl_getversioninfo_ip_t *ps_ip;
10940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ihevcd_cxa_ctl_getversioninfo_op_t *ps_op;
10950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_ip = (ihevcd_cxa_ctl_getversioninfo_ip_t *)pv_api_ip;
10960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_op = (ihevcd_cxa_ctl_getversioninfo_op_t *)pv_api_op;
10970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_ip->s_ivd_ctl_getversioninfo_ip_t.u4_size
10980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    != sizeof(ihevcd_cxa_ctl_getversioninfo_ip_t))
10990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
11000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_ctl_getversioninfo_op_t.u4_error_code |= 1
11010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        << IVD_UNSUPPORTEDPARAM;
11020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_ctl_getversioninfo_op_t.u4_error_code |=
11030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        IVD_IP_API_STRUCT_SIZE_INCORRECT;
11040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        return IV_FAIL;
11050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
11060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_op->s_ivd_ctl_getversioninfo_op_t.u4_size
11070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    != sizeof(ihevcd_cxa_ctl_getversioninfo_op_t))
11080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
11090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_ctl_getversioninfo_op_t.u4_error_code |= 1
11100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        << IVD_UNSUPPORTEDPARAM;
11110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_ctl_getversioninfo_op_t.u4_error_code |=
11120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        IVD_OP_API_STRUCT_SIZE_INCORRECT;
11130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        return IV_FAIL;
11140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
11150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
11160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    break;
11170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
11180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                case IVD_CMD_CTL_FLUSH:
11190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
11200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ihevcd_cxa_ctl_flush_ip_t *ps_ip;
11210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ihevcd_cxa_ctl_flush_op_t *ps_op;
11220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_ip = (ihevcd_cxa_ctl_flush_ip_t *)pv_api_ip;
11230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_op = (ihevcd_cxa_ctl_flush_op_t *)pv_api_op;
11240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_ip->s_ivd_ctl_flush_ip_t.u4_size
11250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    != sizeof(ihevcd_cxa_ctl_flush_ip_t))
11260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
11270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_ctl_flush_op_t.u4_error_code |= 1
11280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        << IVD_UNSUPPORTEDPARAM;
11290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_ctl_flush_op_t.u4_error_code |=
11300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        IVD_IP_API_STRUCT_SIZE_INCORRECT;
11310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        return IV_FAIL;
11320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
11330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_op->s_ivd_ctl_flush_op_t.u4_size
11340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    != sizeof(ihevcd_cxa_ctl_flush_op_t))
11350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
11360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_ctl_flush_op_t.u4_error_code |= 1
11370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        << IVD_UNSUPPORTEDPARAM;
11380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_ctl_flush_op_t.u4_error_code |=
11390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        IVD_OP_API_STRUCT_SIZE_INCORRECT;
11400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        return IV_FAIL;
11410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
11420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
11430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    break;
11440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
11450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                case IVD_CMD_CTL_RESET:
11460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
11470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ihevcd_cxa_ctl_reset_ip_t *ps_ip;
11480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ihevcd_cxa_ctl_reset_op_t *ps_op;
11490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_ip = (ihevcd_cxa_ctl_reset_ip_t *)pv_api_ip;
11500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_op = (ihevcd_cxa_ctl_reset_op_t *)pv_api_op;
11510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_ip->s_ivd_ctl_reset_ip_t.u4_size
11520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    != sizeof(ihevcd_cxa_ctl_reset_ip_t))
11530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
11540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_ctl_reset_op_t.u4_error_code |= 1
11550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        << IVD_UNSUPPORTEDPARAM;
11560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_ctl_reset_op_t.u4_error_code |=
11570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        IVD_IP_API_STRUCT_SIZE_INCORRECT;
11580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        return IV_FAIL;
11590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
11600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_op->s_ivd_ctl_reset_op_t.u4_size
11610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    != sizeof(ihevcd_cxa_ctl_reset_op_t))
11620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
11630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_ctl_reset_op_t.u4_error_code |= 1
11640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        << IVD_UNSUPPORTEDPARAM;
11650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->s_ivd_ctl_reset_op_t.u4_error_code |=
11660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        IVD_OP_API_STRUCT_SIZE_INCORRECT;
11670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        return IV_FAIL;
11680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
11690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
11700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    break;
11710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                case IHEVCD_CXA_CMD_CTL_DEGRADE:
11720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
11730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ihevcd_cxa_ctl_degrade_ip_t *ps_ip;
11740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ihevcd_cxa_ctl_degrade_op_t *ps_op;
11750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
11760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_ip = (ihevcd_cxa_ctl_degrade_ip_t *)pv_api_ip;
11770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_op = (ihevcd_cxa_ctl_degrade_op_t *)pv_api_op;
11780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
11790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_ip->u4_size
11800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    != sizeof(ihevcd_cxa_ctl_degrade_ip_t))
11810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
11820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
11830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->u4_error_code |=
11840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        IVD_IP_API_STRUCT_SIZE_INCORRECT;
11850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        return IV_FAIL;
11860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
11870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
11880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_op->u4_size
11890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    != sizeof(ihevcd_cxa_ctl_degrade_op_t))
11900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
11910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
11920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->u4_error_code |=
11930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        IVD_OP_API_STRUCT_SIZE_INCORRECT;
11940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        return IV_FAIL;
11950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
11960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
11970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if((ps_ip->i4_degrade_pics < 0) ||
11980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                       (ps_ip->i4_degrade_pics > 4) ||
11990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                       (ps_ip->i4_nondegrade_interval < 0) ||
12000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                       (ps_ip->i4_degrade_type < 0) ||
12010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                       (ps_ip->i4_degrade_type > 15))
12020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
12030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
12040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        return IV_FAIL;
12050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
12060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
12070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    break;
12080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
12090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
12100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                case IHEVCD_CXA_CMD_CTL_GET_BUFFER_DIMENSIONS:
12110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
12120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ihevcd_cxa_ctl_get_frame_dimensions_ip_t *ps_ip;
12130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ihevcd_cxa_ctl_get_frame_dimensions_op_t *ps_op;
12140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
12150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_ip =
12160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    (ihevcd_cxa_ctl_get_frame_dimensions_ip_t *)pv_api_ip;
12170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_op =
12180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    (ihevcd_cxa_ctl_get_frame_dimensions_op_t *)pv_api_op;
12190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
12200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_ip->u4_size
12210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    != sizeof(ihevcd_cxa_ctl_get_frame_dimensions_ip_t))
12220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
12230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
12240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->u4_error_code |=
12250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        IVD_IP_API_STRUCT_SIZE_INCORRECT;
12260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        return IV_FAIL;
12270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
12280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
12290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_op->u4_size
12300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    != sizeof(ihevcd_cxa_ctl_get_frame_dimensions_op_t))
12310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
12320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
12330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->u4_error_code |=
12340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        IVD_OP_API_STRUCT_SIZE_INCORRECT;
12350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        return IV_FAIL;
12360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
12370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
12380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    break;
12390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
12400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
12410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                case IHEVCD_CXA_CMD_CTL_GET_VUI_PARAMS:
12420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
12430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ihevcd_cxa_ctl_get_vui_params_ip_t *ps_ip;
12440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ihevcd_cxa_ctl_get_vui_params_op_t *ps_op;
12450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
12460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_ip =
12470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    (ihevcd_cxa_ctl_get_vui_params_ip_t *)pv_api_ip;
12480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_op =
12490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    (ihevcd_cxa_ctl_get_vui_params_op_t *)pv_api_op;
12500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
12510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_ip->u4_size
12520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    != sizeof(ihevcd_cxa_ctl_get_vui_params_ip_t))
12530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
12540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
12550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->u4_error_code |=
12560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        IVD_IP_API_STRUCT_SIZE_INCORRECT;
12570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        return IV_FAIL;
12580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
12590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
12600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_op->u4_size
12610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    != sizeof(ihevcd_cxa_ctl_get_vui_params_op_t))
12620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
12630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
12640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->u4_error_code |=
12650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        IVD_OP_API_STRUCT_SIZE_INCORRECT;
12660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        return IV_FAIL;
12670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
12680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
12690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    break;
12700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
12710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                case IHEVCD_CXA_CMD_CTL_SET_NUM_CORES:
12720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
12730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ihevcd_cxa_ctl_set_num_cores_ip_t *ps_ip;
12740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ihevcd_cxa_ctl_set_num_cores_op_t *ps_op;
12750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
12760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_ip = (ihevcd_cxa_ctl_set_num_cores_ip_t *)pv_api_ip;
12770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_op = (ihevcd_cxa_ctl_set_num_cores_op_t *)pv_api_op;
12780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
12790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_ip->u4_size
12800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    != sizeof(ihevcd_cxa_ctl_set_num_cores_ip_t))
12810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
12820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
12830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->u4_error_code |=
12840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        IVD_IP_API_STRUCT_SIZE_INCORRECT;
12850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        return IV_FAIL;
12860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
12870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
12880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_op->u4_size
12890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    != sizeof(ihevcd_cxa_ctl_set_num_cores_op_t))
12900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
12910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
12920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->u4_error_code |=
12930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        IVD_OP_API_STRUCT_SIZE_INCORRECT;
12940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        return IV_FAIL;
12950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
12960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
12970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#ifdef MULTICORE
12980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if((ps_ip->u4_num_cores < 1) || (ps_ip->u4_num_cores > MAX_NUM_CORES))
12990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#else
13000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_ip->u4_num_cores != 1)
13010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#endif
13020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        {
13030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
13040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            return IV_FAIL;
13050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        }
13060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    break;
13070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
13080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                case IHEVCD_CXA_CMD_CTL_SET_PROCESSOR:
13090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
13100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ihevcd_cxa_ctl_set_processor_ip_t *ps_ip;
13110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ihevcd_cxa_ctl_set_processor_op_t *ps_op;
13120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
13130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_ip = (ihevcd_cxa_ctl_set_processor_ip_t *)pv_api_ip;
13140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_op = (ihevcd_cxa_ctl_set_processor_op_t *)pv_api_op;
13150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
13160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_ip->u4_size
13170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    != sizeof(ihevcd_cxa_ctl_set_processor_ip_t))
13180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
13190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
13200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->u4_error_code |=
13210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        IVD_IP_API_STRUCT_SIZE_INCORRECT;
13220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        return IV_FAIL;
13230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
13240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
13250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(ps_op->u4_size
13260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    != sizeof(ihevcd_cxa_ctl_set_processor_op_t))
13270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
13280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
13290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_op->u4_error_code |=
13300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        IVD_OP_API_STRUCT_SIZE_INCORRECT;
13310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        return IV_FAIL;
13320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
13330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
13340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    break;
13350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
13360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                default:
13370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    *(pu4_api_op + 1) |= 1 << IVD_UNSUPPORTEDPARAM;
13380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    *(pu4_api_op + 1) |= IVD_UNSUPPORTED_API_CMD;
13390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    return IV_FAIL;
13400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
13410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
13420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
13430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        default:
13440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            *(pu4_api_op + 1) |= 1 << IVD_UNSUPPORTEDPARAM;
13450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            *(pu4_api_op + 1) |= IVD_UNSUPPORTED_API_CMD;
13460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            return IV_FAIL;
13470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
13480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
13490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return IV_SUCCESS;
13500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
13510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
13520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
13530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
13540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
13550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
13560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
13570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Sets default dynamic parameters
13580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
13590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
13600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Sets default dynamic parameters. Will be called in ihevcd_init() to ensure
13610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* that even if set_params is not called, codec  continues to work
13620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
13630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_codec_obj
13640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to codec object at API level
13650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
13660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pv_api_ip
13670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to input argument structure
13680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
13690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pv_api_op
13700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to output argument structure
13710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
13720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns  Status
13730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
13740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
13750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
13760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
13770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
13780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
13790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWORD32 ihevcd_set_default_params(codec_t *ps_codec)
13800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
13810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
13820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 ret = IV_SUCCESS;
13830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
13840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->e_pic_skip_mode = IVD_SKIP_NONE;
13850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_strd = 0;
13860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_disp_strd = 0;
13870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_header_mode = 0;
13880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->e_pic_out_order = IVD_DISPLAY_FRAME_OUT;
13890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return ret;
13900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
13910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
13920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevcd_update_function_ptr(codec_t *ps_codec)
13930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
13940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
13950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Init inter pred function array */
13960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_inter_pred[0] = NULL;
13970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_inter_pred[1] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_luma_copy_fptr;
13980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_inter_pred[2] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_luma_vert_fptr;
13990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_inter_pred[3] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_luma_horz_fptr;
14000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_inter_pred[4] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_luma_horz_w16out_fptr;
14010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_inter_pred[5] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_luma_copy_w16out_fptr;
14020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_inter_pred[6] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_luma_vert_w16out_fptr;
14030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_inter_pred[7] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_luma_horz_w16out_fptr;
14040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_inter_pred[8] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_luma_horz_w16out_fptr;
14050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_inter_pred[9] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_luma_vert_w16inp_fptr;
14060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_inter_pred[10] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_luma_vert_w16inp_w16out_fptr;
14070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_inter_pred[11] = NULL;
14080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_inter_pred[12] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_chroma_copy_fptr;
14090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_inter_pred[13] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_chroma_vert_fptr;
14100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_inter_pred[14] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_chroma_horz_fptr;
14110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_inter_pred[15] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_chroma_horz_w16out_fptr;
14120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_inter_pred[16] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_chroma_copy_w16out_fptr;
14130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_inter_pred[17] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_chroma_vert_w16out_fptr;
14140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_inter_pred[18] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_chroma_horz_w16out_fptr;
14150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_inter_pred[19] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_chroma_horz_w16out_fptr;
14160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_inter_pred[20] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_chroma_vert_w16inp_fptr;
14170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_inter_pred[21] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_chroma_vert_w16inp_w16out_fptr;
14180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
14190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Init intra pred function array */
14200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_intra_pred_luma[0] = (pf_intra_pred)NULL;
14210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_intra_pred_luma[1] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_luma_planar_fptr;
14220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_intra_pred_luma[2] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_luma_dc_fptr;
14230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_intra_pred_luma[3] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_luma_mode2_fptr;
14240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_intra_pred_luma[4] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_luma_mode_3_to_9_fptr;
14250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_intra_pred_luma[5] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_luma_horz_fptr;
14260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_intra_pred_luma[6] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_luma_mode_11_to_17_fptr;
14270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_intra_pred_luma[7] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_luma_mode_18_34_fptr;
14280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_intra_pred_luma[8] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_luma_mode_19_to_25_fptr;
14290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_intra_pred_luma[9] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_luma_ver_fptr;
14300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_intra_pred_luma[10] =  (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_luma_mode_27_to_33_fptr;
14310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
14320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_intra_pred_chroma[0] = (pf_intra_pred)NULL;
14330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_intra_pred_chroma[1] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_chroma_planar_fptr;
14340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_intra_pred_chroma[2] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_chroma_dc_fptr;
14350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_intra_pred_chroma[3] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode2_fptr;
14360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_intra_pred_chroma[4] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode_3_to_9_fptr;
14370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_intra_pred_chroma[5] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_chroma_horz_fptr;
14380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_intra_pred_chroma[6] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode_11_to_17_fptr;
14390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_intra_pred_chroma[7] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode_18_34_fptr;
14400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_intra_pred_chroma[8] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode_19_to_25_fptr;
14410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_intra_pred_chroma[9] =  (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_chroma_ver_fptr;
14420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_intra_pred_chroma[10] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode_27_to_33_fptr;
14430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
14440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Init itrans_recon function array */
14450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_itrans_recon[0] = (pf_itrans_recon)ps_codec->s_func_selector.ihevc_itrans_recon_4x4_ttype1_fptr;
14460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_itrans_recon[1] = (pf_itrans_recon)ps_codec->s_func_selector.ihevc_itrans_recon_4x4_fptr;
14470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_itrans_recon[2] = (pf_itrans_recon)ps_codec->s_func_selector.ihevc_itrans_recon_8x8_fptr;
14480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_itrans_recon[3] = (pf_itrans_recon)ps_codec->s_func_selector.ihevc_itrans_recon_16x16_fptr;
14490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_itrans_recon[4] = (pf_itrans_recon)ps_codec->s_func_selector.ihevc_itrans_recon_32x32_fptr;
14500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_itrans_recon[5] = (pf_itrans_recon)ps_codec->s_func_selector.ihevc_chroma_itrans_recon_4x4_fptr;
14510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_itrans_recon[6] = (pf_itrans_recon)ps_codec->s_func_selector.ihevc_chroma_itrans_recon_8x8_fptr;
14520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_itrans_recon[7] = (pf_itrans_recon)ps_codec->s_func_selector.ihevc_chroma_itrans_recon_16x16_fptr;
14530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
14540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Init recon function array */
14550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_recon[0] = (pf_recon)ps_codec->s_func_selector.ihevc_recon_4x4_ttype1_fptr;
14560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_recon[1] = (pf_recon)ps_codec->s_func_selector.ihevc_recon_4x4_fptr;
14570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_recon[2] = (pf_recon)ps_codec->s_func_selector.ihevc_recon_8x8_fptr;
14580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_recon[3] = (pf_recon)ps_codec->s_func_selector.ihevc_recon_16x16_fptr;
14590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_recon[4] = (pf_recon)ps_codec->s_func_selector.ihevc_recon_32x32_fptr;
14600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_recon[5] = (pf_recon)ps_codec->s_func_selector.ihevc_chroma_recon_4x4_fptr;
14610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_recon[6] = (pf_recon)ps_codec->s_func_selector.ihevc_chroma_recon_8x8_fptr;
14620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_recon[7] = (pf_recon)ps_codec->s_func_selector.ihevc_chroma_recon_16x16_fptr;
14630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
14640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Init itrans_recon_dc function array */
14650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_itrans_recon_dc[0] = (pf_itrans_recon_dc)ps_codec->s_func_selector.ihevcd_itrans_recon_dc_luma_fptr;
14660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_itrans_recon_dc[1] = (pf_itrans_recon_dc)ps_codec->s_func_selector.ihevcd_itrans_recon_dc_chroma_fptr;
14670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
14680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Init sao function array */
14690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_sao_luma[0] = (pf_sao_luma)ps_codec->s_func_selector.ihevc_sao_edge_offset_class0_fptr;
14700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_sao_luma[1] = (pf_sao_luma)ps_codec->s_func_selector.ihevc_sao_edge_offset_class1_fptr;
14710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_sao_luma[2] = (pf_sao_luma)ps_codec->s_func_selector.ihevc_sao_edge_offset_class2_fptr;
14720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_sao_luma[3] = (pf_sao_luma)ps_codec->s_func_selector.ihevc_sao_edge_offset_class3_fptr;
14730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
14740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_sao_chroma[0] = (pf_sao_chroma)ps_codec->s_func_selector.ihevc_sao_edge_offset_class0_chroma_fptr;
14750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_sao_chroma[1] = (pf_sao_chroma)ps_codec->s_func_selector.ihevc_sao_edge_offset_class1_chroma_fptr;
14760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_sao_chroma[2] = (pf_sao_chroma)ps_codec->s_func_selector.ihevc_sao_edge_offset_class2_chroma_fptr;
14770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->apf_sao_chroma[3] = (pf_sao_chroma)ps_codec->s_func_selector.ihevc_sao_edge_offset_class3_chroma_fptr;
14780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
14790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
14800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
14810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
14820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
14830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Initialize the context. This will be called by  init_mem_rec and during
14840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* reset
14850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
14860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
14870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Initializes the context
14880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
14890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_codec
14900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Codec context pointer
14910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
14920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns  Status
14930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
14940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
14950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
14960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
14970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
14980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
14990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWORD32 ihevcd_init(codec_t *ps_codec)
15000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
15010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 status = IV_SUCCESS;
15020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 i;
15030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
15040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
15050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_num_disp_bufs = 1;
15060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_flush_mode = 0;
15070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
15080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_ht = ps_codec->i4_disp_ht = ps_codec->i4_max_ht;
15090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_wd = ps_codec->i4_disp_wd = ps_codec->i4_max_wd;
15100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_strd = 0;
15110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_disp_strd = 0;
15120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_num_cores = 1;
15130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
15140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->u4_pic_cnt = 0;
15150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->u4_disp_cnt = 0;
15160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
15170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_header_mode = 0;
15180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_header_in_slice_mode = 0;
15190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_sps_done = 0;
15200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_pps_done = 0;
15210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_init_done   = 1;
15220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_first_pic_done = 0;
15230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.i4_first_pic_init = 0;
15240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_error_code = 0;
15250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_reset_flag = 0;
1526221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy    ps_codec->i4_cra_as_first_pic = 1;
1527221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy    ps_codec->i4_rasl_output_flag = 0;
15280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
15290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_prev_poc_msb = 0;
15300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_prev_poc_lsb = -1;
15310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_max_prev_poc_lsb = -1;
15320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.i4_abs_pic_order_cnt = -1;
15330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
15340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Set ref chroma format by default to 420SP UV interleaved */
15350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->e_ref_chroma_fmt = IV_YUV_420SP_UV;
15360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
15370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* If the codec is in shared mode and required format is 420 SP VU interleaved then change
15380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * reference buffers chroma format
15390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     */
15400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(IV_YUV_420SP_VU == ps_codec->e_chroma_fmt)
15410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
15420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->e_ref_chroma_fmt = IV_YUV_420SP_VU;
15430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
15440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
15450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
15460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
15470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_disable_deblk_pic = 0;
15480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
15490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_degrade_pic_cnt    = 0;
15500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_degrade_pics       = 0;
15510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_degrade_type       = 0;
15520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_disable_sao_pic    = 0;
15530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_fullpel_inter_pred = 0;
15540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->u4_enable_fmt_conv_ahead = 0;
1555221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy    ps_codec->i4_share_disp_buf_cnt = 0;
15560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
15570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
15580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        sps_t *ps_sps = ps_codec->ps_sps_base;
15590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pps_t *ps_pps = ps_codec->ps_pps_base;
15600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
15610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(i = 0; i < MAX_SPS_CNT; i++)
15620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
15630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_sps->i1_sps_valid = 0;
15640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_sps++;
15650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
15660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
15670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(i = 0; i < MAX_PPS_CNT; i++)
15680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
15690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_pps->i1_pps_valid = 0;
15700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_pps++;
15710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
15720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
15730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
15740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ihevcd_set_default_params(ps_codec);
15750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->pv_proc_jobq = ihevcd_jobq_init(ps_codec->pv_proc_jobq_buf, ps_codec->i4_proc_jobq_buf_size);
15760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    RETURN_IF((ps_codec->pv_proc_jobq == NULL), IV_FAIL);
15770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
15780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Update the jobq context to all the threads */
15790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.pv_proc_jobq = ps_codec->pv_proc_jobq;
15800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    for(i = 0; i < MAX_PROCESS_THREADS; i++)
15810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
15820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->as_process[i].pv_proc_jobq = ps_codec->pv_proc_jobq;
15830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->as_process[i].i4_id = i;
15840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->as_process[i].ps_codec = ps_codec;
15850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
15860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Set the following to zero assuming it is a single core solution
15870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * When threads are launched these will be set appropriately
15880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         */
15890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->as_process[i].i4_check_parse_status = 0;
15900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->as_process[i].i4_check_proc_status = 0;
15910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
15920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Initialize MV Bank buffer manager */
15930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ihevc_buf_mgr_init((buf_mgr_t *)ps_codec->pv_mv_buf_mgr);
15940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
15950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Initialize Picture buffer manager */
15960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ihevc_buf_mgr_init((buf_mgr_t *)ps_codec->pv_pic_buf_mgr);
15970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
15980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->ps_pic_buf = (pic_buf_t *)ps_codec->pv_pic_buf_base;
15990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    memset(ps_codec->ps_pic_buf, 0, BUF_MGR_MAX_CNT  * sizeof(pic_buf_t));
16010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Initialize display buffer manager */
16050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ihevc_disp_mgr_init((disp_mgr_t *)ps_codec->pv_disp_buf_mgr);
16060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Initialize dpb manager */
16080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ihevc_dpb_mgr_init((dpb_mgr_t *)ps_codec->pv_dpb_mgr);
16090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->e_processor_soc = SOC_GENERIC;
16110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* The following can be over-ridden using soc parameter as a hack */
16120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->u4_nctb = 0x7FFFFFFF;
16130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ihevcd_init_arch(ps_codec);
16140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ihevcd_init_function_ptr(ps_codec);
16160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ihevcd_update_function_ptr(ps_codec);
16180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return status;
16200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
16210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
16230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
16240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
16250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
16260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Gets number of memory records required by the codec
16270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
16280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
16290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Gets codec mem record requirements and adds concealment  modules
16300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* requirements
16310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
16320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pv_api_ip
16330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to input argument structure
16340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
16350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pv_api_op
16360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to output argument structure
16370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
16380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns  Status
16390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
16400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
16410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
16420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
16430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
16440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
16450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWORD32 ihevcd_get_num_rec(void *pv_api_ip, void *pv_api_op)
16460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
16470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    iv_num_mem_rec_op_t *ps_mem_q_op;
16490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UNUSED(pv_api_ip);
16510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_q_op = (iv_num_mem_rec_op_t *)pv_api_op;
16520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_q_op->u4_num_mem_rec = MEM_REC_CNT;
16530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    DEBUG("Get num mem records without concealment %d\n",
16540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_mem_q_op->u4_num_mem_rec);
16550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#ifdef APPLY_CONCEALMENT
16560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
16570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        IV_API_CALL_STATUS_T status;
16580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        icncl_num_mem_rec_ip_t cncl_mem_ip;
16590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        icncl_num_mem_rec_op_t cncl_mem_op;
16600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        cncl_mem_ip.s_ivd_num_rec_ip_t.e_cmd = IV_CMD_GET_NUM_MEM_REC;
16620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        cncl_mem_ip.s_ivd_num_rec_ip_t.u4_size = sizeof(icncl_num_mem_rec_ip_t);
16630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        status = icncl_api_function(NULL, (void *)&cncl_mem_ip, (void *)&cncl_mem_op);
16650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(status == IV_SUCCESS)
16670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
16680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Add the concealment library's memory requirements */
16690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_mem_q_op->u4_num_mem_rec += cncl_mem_op.s_ivd_num_mem_rec_op_t.u4_num_mem_rec;
16700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            DEBUG("Get num mem records %d\n", ps_mem_q_op->u4_num_mem_rec);
16710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            return status; /* Nothing else to do, return */
16720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
16730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else
16740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
16750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /*
16760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar             * Something went wrong with the concealment library call.
16770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar             */
16780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            DEBUG("ERROR: Get num mem records %d\n", ps_mem_q_op->u4_num_mem_rec);
16790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            return status;
16800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
16810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
16830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#endif //APPLY_CONCEALMENT
16840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return IV_SUCCESS;
16870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
16890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
16900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
16910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
16920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
16930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
16940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Fills memory requirements of the codec
16950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
16960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
16970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Gets codec mem record requirements and adds concealment  modules
16980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* requirements
16990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
17000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pv_api_ip
17010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to input argument structure
17020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
17030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pv_api_op
17040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to output argument structure
17050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
17060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns  Status
17070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
17080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
17090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
17100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
17110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
17120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
17130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWORD32 ihevcd_fill_num_mem_rec(void *pv_api_ip, void *pv_api_op)
17140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
17150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
17160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ihevcd_cxa_fill_mem_rec_ip_t *ps_mem_q_ip;
17170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ihevcd_cxa_fill_mem_rec_op_t *ps_mem_q_op;
17180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 level;
17190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 num_reorder_frames;
17200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 num_ref_frames;
17210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 num_extra_disp_bufs;
17220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 max_dpb_size;
17230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
17240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    iv_mem_rec_t *ps_mem_rec;
17250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    iv_mem_rec_t *ps_mem_rec_base;
17260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 no_of_mem_rec_filled;
17270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 chroma_format, share_disp_buf;
17280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 max_ctb_cnt;
17290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 max_wd_luma, max_wd_chroma;
17300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 max_ht_luma, max_ht_chroma;
17310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 max_tile_cols, max_tile_rows;
17320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 max_ctb_rows, max_ctb_cols;
17330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 max_num_cu_cols;
17340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 i;
17350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 max_num_4x4_cols;
17360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    IV_API_CALL_STATUS_T status = IV_SUCCESS;
17370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    no_of_mem_rec_filled = 0;
17380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
17390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    //TODO: Remove as and when the following are used
17400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UNUSED(num_extra_disp_bufs);
17410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UNUSED(no_of_mem_rec_filled);
17420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UNUSED(max_wd_chroma);
17430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UNUSED(max_ht_chroma);
17440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
17450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_q_ip = (ihevcd_cxa_fill_mem_rec_ip_t *)pv_api_ip;
17460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_q_op = (ihevcd_cxa_fill_mem_rec_op_t *)pv_api_op;
17470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
17480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ps_mem_q_ip->s_ivd_fill_mem_rec_ip_t.u4_size
17490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    > offsetof(ihevcd_cxa_fill_mem_rec_ip_t, i4_level))
17500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
17510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        level = ps_mem_q_ip->i4_level;
17520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Spec requires level should be multiplied by 30
17530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * API has values where level is multiplied by 10. This keeps it consistent with H264
17540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * Because of the above differences, level is multiplied by 3 here.
17550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         */
17560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        level *= 3;
17570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
17580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else
17590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
17600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        level = MAX_LEVEL;
17610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
17620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
17630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ps_mem_q_ip->s_ivd_fill_mem_rec_ip_t.u4_size
17640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    > offsetof(ihevcd_cxa_fill_mem_rec_ip_t,
17650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                               u4_num_reorder_frames))
17660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
17670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        num_reorder_frames = ps_mem_q_ip->u4_num_reorder_frames;
17680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
17690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else
17700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
17710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        num_reorder_frames = MAX_REF_CNT;
17720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
17730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
17740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ps_mem_q_ip->s_ivd_fill_mem_rec_ip_t.u4_size
17750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    > offsetof(ihevcd_cxa_fill_mem_rec_ip_t, u4_num_ref_frames))
17760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
17770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        num_ref_frames = ps_mem_q_ip->u4_num_ref_frames;
17780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
17790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else
17800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
17810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        num_ref_frames = MAX_REF_CNT;
17820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
17830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
17840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ps_mem_q_ip->s_ivd_fill_mem_rec_ip_t.u4_size
17850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    > offsetof(ihevcd_cxa_fill_mem_rec_ip_t,
17860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                               u4_num_extra_disp_buf))
17870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
17880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        num_extra_disp_bufs = ps_mem_q_ip->u4_num_extra_disp_buf;
17890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
17900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else
17910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
17920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        num_extra_disp_bufs = 0;
17930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
17940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
17950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ps_mem_q_ip->s_ivd_fill_mem_rec_ip_t.u4_size
17960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    > offsetof(ihevcd_cxa_fill_mem_rec_ip_t, u4_share_disp_buf))
17970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
17980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#ifndef LOGO_EN
17990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        share_disp_buf = ps_mem_q_ip->u4_share_disp_buf;
18000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#else
18010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        share_disp_buf = 0;
18020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#endif
18030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
18040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else
18050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
18060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        share_disp_buf = 0;
18070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
18080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
18090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ps_mem_q_ip->s_ivd_fill_mem_rec_ip_t.u4_size
18100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    > offsetof(ihevcd_cxa_fill_mem_rec_ip_t, e_output_format))
18110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
18120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        chroma_format = ps_mem_q_ip->e_output_format;
18130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
18140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else
18150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
18160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        chroma_format = -1;
18170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
18180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
18190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Shared disp buffer mode is supported only for 420SP formats */
18200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if((chroma_format != IV_YUV_420P) &&
18210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar       (chroma_format != IV_YUV_420SP_UV) &&
18220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar       (chroma_format != IV_YUV_420SP_VU))
18230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
18240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        share_disp_buf = 0;
18250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
18260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
18270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
18280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
18290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        max_ht_luma = ps_mem_q_ip->s_ivd_fill_mem_rec_ip_t.u4_max_frm_ht;
18300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        max_wd_luma = ps_mem_q_ip->s_ivd_fill_mem_rec_ip_t.u4_max_frm_wd;
18310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
18320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        max_ht_luma = ALIGN64(max_ht_luma);
18330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        max_wd_luma = ALIGN64(max_wd_luma);
18340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
18350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
18360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
18370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        max_tile_cols = (max_wd_luma + MIN_TILE_WD - 1) / MIN_TILE_WD;
18380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        max_tile_rows = (max_ht_luma + MIN_TILE_HT - 1) / MIN_TILE_HT;
18390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        max_ctb_rows  = max_ht_luma / MIN_CTB_SIZE;
18400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        max_ctb_cols  = max_wd_luma / MIN_CTB_SIZE;
18410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        max_ctb_cnt   = max_ctb_rows * max_ctb_cols;
18420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        max_num_cu_cols = max_wd_luma / MIN_CU_SIZE;
18430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        max_num_4x4_cols = max_wd_luma / 4;
18440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
18450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /*
18460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * If level is lesser than 31 and the resolution required is higher,
18470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * then make the level at least 31.
18480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     */
18490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /*    if (num_mbs > MAX_NUM_MBS_3_0 && level < MAX_LEVEL)
18500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     {
18510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     level           = MAX_LEVEL;
18520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     }
18530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     */
18540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if((level < MIN_LEVEL) || (level > MAX_LEVEL))
18550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
18560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_mem_q_op->s_ivd_fill_mem_rec_op_t.u4_error_code |=
18570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        IHEVCD_LEVEL_UNSUPPORTED;
18580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        level = MAX_LEVEL;
18590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
18600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(num_ref_frames > MAX_REF_CNT)
18610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
18620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_mem_q_op->s_ivd_fill_mem_rec_op_t.u4_error_code |=
18630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        IHEVCD_NUM_REF_UNSUPPORTED;
18640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        num_ref_frames = MAX_REF_CNT;
18650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
18660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
18670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(num_reorder_frames > MAX_REF_CNT)
18680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
18690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_mem_q_op->s_ivd_fill_mem_rec_op_t.u4_error_code |=
18700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        IHEVCD_NUM_REORDER_UNSUPPORTED;
18710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        num_reorder_frames = MAX_REF_CNT;
18720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
18730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
18740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    max_dpb_size = ihevcd_get_dpb_size(level, max_wd_luma * max_ht_luma);
18750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec_base = ps_mem_q_ip->s_ivd_fill_mem_rec_ip_t.pv_mem_rec_location;
18760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
18770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Set all memory reconds as persistent and alignment as 128
18780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * by default
18790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     */
18800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = ps_mem_rec_base;
18810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    for(i = 0; i < MEM_REC_CNT; i++)
18820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
18830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_mem_rec->u4_mem_alignment = 128;
18840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_mem_rec->e_mem_type = IV_EXTERNAL_CACHEABLE_PERSISTENT_MEM;
18850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_mem_rec++;
18860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
18870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
18880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Request memory for HEVCD object */
18890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_IV_OBJ];
18900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec->u4_mem_size = sizeof(iv_obj_t);
18910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
18920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    DEBUG("\nMemory record Id %d = %d \n", MEM_REC_IV_OBJ,
18930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_mem_rec->u4_mem_size);
18940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
18950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Request memory for HEVC Codec context */
18960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_CODEC];
18970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec->u4_mem_size = sizeof(codec_t);
18980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    DEBUG("\nMemory record Id %d = %d \n", MEM_REC_CODEC,
18990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_mem_rec->u4_mem_size);
19000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Request memory for buffer which holds bitstream after emulation prevention */
19020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_BITSBUF];
19030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec->u4_mem_size = MAX((max_wd_luma * max_ht_luma), MIN_BITSBUF_SIZE);
19040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    DEBUG("\nMemory record Id %d = %d \n", MEM_REC_BITSBUF,
19050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_mem_rec->u4_mem_size);
19060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Request memory for buffer which holds TU structures and coeff data for
19080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * a set of CTBs in the current picture */
19090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /*TODO Currently the buffer is allocated at a frame level. Reduce this to
19100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * allocate for s set of CTBs and add appropriate synchronization logic to
19110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * ensure that this is data is not overwritten before consumption
19120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     */
19130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_TU_DATA];
19140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec->u4_mem_size = ihevcd_get_tu_data_size(max_wd_luma * max_ht_luma);
19150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    DEBUG("\nMemory record Id %d = %d \n", MEM_REC_TU_DATA,
19160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_mem_rec->u4_mem_size);
19170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_MVBANK];
19190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec->u4_mem_size = sizeof(buf_mgr_t);
19210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Size for holding mv_buf_t for each MV Bank */
19230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Note this allocation is done for BUF_MGR_MAX_CNT instead of
19240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * max_dpb_size or MAX_DPB_SIZE for following reasons
19250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * max_dpb_size will be based on max_wd and max_ht
19260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * For higher max_wd and max_ht this number will be smaller than MAX_DPB_SIZE
19270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * But during actual initialization number of buffers allocated can be more
19280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     *
19290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * One extra MV Bank is needed to hold current pics MV bank.
19300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * Since this is only a structure allocation and not actual buffer allocation,
1931221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy     * it is allocated for (MAX_DPB_SIZE + 1) entries
19320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     */
1933221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy    ps_mem_rec->u4_mem_size += (MAX_DPB_SIZE + 1) * sizeof(mv_buf_t);
19340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
19360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Allocate for pu_map, pu_t and pic_pu_idx for each MV bank */
19370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Note: Number of luma samples is not max_wd * max_ht here, instead it is
19380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * set to maximum number of luma samples allowed at the given level.
19390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * This is done to ensure that any stream with width and height lesser
19400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * than max_wd and max_ht is supported. Number of buffers required can be greater
19410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * for lower width and heights at a given level and this increased number of buffers
19420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * might require more memory than what max_wd and max_ht buffer would have required
19430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * Also note one extra buffer is allocted to store current pictures MV bank
19440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * In case of asynchronous parsing and processing, number of buffers should increase here
19450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * based on when parsing and processing threads are synchronized
19460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         */
19470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 lvl_idx = ihevcd_get_lvl_idx(level);
19480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 max_luma_samples = gai4_ihevc_max_luma_pic_size[lvl_idx];
19490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_mem_rec->u4_mem_size += (max_dpb_size + 1) *
19500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ihevcd_get_pic_mv_bank_size(max_luma_samples);
19510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        DEBUG("\nMemory record Id %d = %d \n", MEM_REC_MVBANK,
19520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_mem_rec->u4_mem_size);
19530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
19540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    // TODO GPU : Have to creat ping-pong view for VPS,SPS,PPS.
19550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_VPS];
19560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec->u4_mem_size = MAX_VPS_CNT * sizeof(vps_t);
19570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    DEBUG("\nMemory record Id %d = %d \n", MEM_REC_VPS,
19580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_mem_rec->u4_mem_size);
19590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_SPS];
19610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec->u4_mem_size = MAX_SPS_CNT * sizeof(sps_t);
19620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    DEBUG("\nMemory record Id %d = %d \n", MEM_REC_SPS,
19630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_mem_rec->u4_mem_size);
19640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_PPS];
19660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec->u4_mem_size = MAX_PPS_CNT * sizeof(pps_t);
19670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    DEBUG("\nMemory record Id %d = %d \n", MEM_REC_PPS,
19680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_mem_rec->u4_mem_size);
19690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_SLICE_HDR];
19710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec->u4_mem_size = MAX_SLICE_HDR_CNT * sizeof(slice_header_t);
19720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    DEBUG("\nMemory record Id %d = %d \n", MEM_REC_SLICE_HDR,
19730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_mem_rec->u4_mem_size);
19740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_TILE];
19760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
19770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 tile_size;
19780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        tile_size  = max_tile_cols * max_tile_rows;
19800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        tile_size  *= sizeof(tile_t);
19810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_mem_rec->u4_mem_size = MAX_PPS_CNT * tile_size;
19840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
19850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    DEBUG("\nMemory record Id %d = %d \n", MEM_REC_TILE,
19880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_mem_rec->u4_mem_size);
19890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_ENTRY_OFST];
19910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
19920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 num_entry_points;
19930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* One entry point per tile */
19950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        num_entry_points  = max_tile_cols * max_tile_rows;
19960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
19970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* One entry point per row of CTBs */
19980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /*********************************************************************/
19990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Only tiles or entropy sync is enabled at a time in main           */
20000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* profile, but since memory required does not increase too much,    */
20010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* this allocation is done to handle both cases                      */
20020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /*********************************************************************/
20030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        num_entry_points  += max_ctb_rows;
20040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_mem_rec->u4_mem_size = sizeof(WORD32) * num_entry_points;
20070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
20080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    DEBUG("\nMemory record Id %d = %d \n", MEM_REC_ENTRY_OFST,
20110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_mem_rec->u4_mem_size);
20120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_SCALING_MAT];
20150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
20160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 scaling_mat_size;
20170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        SCALING_MAT_SIZE(scaling_mat_size)
20190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_mem_rec->u4_mem_size = (MAX_SPS_CNT + MAX_PPS_CNT) * scaling_mat_size * sizeof(WORD16);
20200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
20210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    DEBUG("\nMemory record Id %d = %d \n", MEM_REC_SCALING_MAT,
20220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_mem_rec->u4_mem_size);
20230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Holds one row skip_flag at 8x8 level used during parsing */
20250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_PARSE_SKIP_FLAG];
20260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* 1 bit per 8x8 */
20280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec->u4_mem_size = max_num_cu_cols / 8;
20290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    DEBUG("\nMemory record Id %d = %d \n", MEM_REC_PARSE_SKIP_FLAG,
20300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                  ps_mem_rec->u4_mem_size);
20310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Holds one row skip_flag at 8x8 level used during parsing */
20330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_PARSE_CT_DEPTH];
20340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* 2 bits per 8x8 */
20360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec->u4_mem_size = max_num_cu_cols / 4;
20370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    DEBUG("\nMemory record Id %d = %d \n", MEM_REC_PARSE_CT_DEPTH,
20380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                  ps_mem_rec->u4_mem_size);
20390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Holds one row skip_flag at 8x8 level used during parsing */
20410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_PARSE_INTRA_PRED_MODE];
20420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* 8 bits per 4x4 */
20440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* 16 bytes each for top and left 64 pixels and 16 bytes for default mode */
20450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec->u4_mem_size = 3 * 16 * sizeof(UWORD8);
20460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    DEBUG("\nMemory record Id %d = %d \n", MEM_REC_PARSE_INTRA_PRED_MODE,
20470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                  ps_mem_rec->u4_mem_size);
20480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Holds one intra mode at 8x8 level for entire picture */
20500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_INTRA_FLAG];
20510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* 1 bit per 8x8 */
20530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec->u4_mem_size = (max_wd_luma / MIN_CU_SIZE) * (max_ht_luma / MIN_CU_SIZE) / 8;
20540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    DEBUG("\nMemory record Id %d = %d \n", MEM_REC_INTRA_FLAG,
20550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                  ps_mem_rec->u4_mem_size);
20560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Holds one transquant bypass flag at 8x8 level for entire picture */
20580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_TRANSQUANT_BYPASS_FLAG];
20590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* 1 bit per 8x8 */
20610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Extra row and column are allocated for easy processing of top and left blocks while loop filtering */
20620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec->u4_mem_size = ((max_wd_luma + 64) / MIN_CU_SIZE) * ((max_ht_luma + 64) / MIN_CU_SIZE) / 8;
20630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    DEBUG("\nMemory record Id %d = %d \n", MEM_REC_TRANSQUANT_BYPASS_FLAG,
20640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                  ps_mem_rec->u4_mem_size);
20650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Request memory to hold thread handles for each processing thread */
20670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_THREAD_HANDLE];
20680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec->u4_mem_size = MAX_PROCESS_THREADS * ithread_get_handle_size();
20690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    DEBUG("\nMemory record Id %d = %d \n", MEM_REC_THREAD_HANDLE,
20700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_mem_rec->u4_mem_size);
20710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
20740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 job_queue_size;
20750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 num_jobs;
20760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_mem_rec = &ps_mem_rec_base[MEM_REC_PROC_JOBQ];
20770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* One job per row of CTBs */
20800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        num_jobs  = max_ctb_rows;
20810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* One each tile a row of CTBs, num_jobs has to incremented */
20830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        num_jobs  *= max_tile_cols;
20840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* One format convert/frame copy job per row of CTBs for non-shared mode*/
20860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        num_jobs  += max_ctb_rows;
20870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        job_queue_size = ihevcd_jobq_ctxt_size();
20900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        job_queue_size += num_jobs * sizeof(proc_job_t);
20910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_mem_rec->u4_mem_size = job_queue_size;
20920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        DEBUG("\nMemory record Id %d = %d \n", MEM_REC_PROC_JOBQ,
20930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_mem_rec->u4_mem_size);
20940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
20950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
20970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_PARSE_MAP];
20980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec->u4_mem_size = max_ctb_cnt;
20990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    DEBUG("\nMemory record Id %d = %d \n", MEM_REC_PARSE_MAP,
21000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_mem_rec->u4_mem_size);
21010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_PROC_MAP];
21030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec->u4_mem_size = max_ctb_cnt;
21040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    DEBUG("\nMemory record Id %d = %d \n", MEM_REC_PROC_MAP,
21050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_mem_rec->u4_mem_size);
21060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_DISP_MGR];
21090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* size for holding display manager context */
21110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec->u4_mem_size = sizeof(buf_mgr_t);
21120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    DEBUG("\nMemory record Id %d = %d \n", MEM_REC_DISP_MGR,
21130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_mem_rec->u4_mem_size);
21140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_DPB_MGR];
21160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* size for holding dpb manager context */
21180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec->u4_mem_size = sizeof(dpb_mgr_t);
21190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    DEBUG("\nMemory record Id %d = %d \n", MEM_REC_DPB_MGR,
21200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_mem_rec->u4_mem_size);
21210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /** Holds top and left neighbor's pu idx into picture level pu array */
21230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Only one top row is enough but left has to be replicated for each process context */
21240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_PIC_PU_IDX_NEIGHBOR];
21250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec->u4_mem_size = (max_num_4x4_cols  /* left */ + MAX_PROCESS_THREADS * (MAX_CTB_SIZE / 4)/* top */ + 1/* top right */) * sizeof(WORD32);
21270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    DEBUG("\nMemory record Id %d = %d \n", MEM_REC_PIC_PU_IDX_NEIGHBOR,
21280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_mem_rec->u4_mem_size);
21290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* TO hold scratch buffers needed for each process context */
21330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_PROC_SCRATCH];
21340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
21350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 size = 0;
21360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 inter_pred_tmp_buf_size;
21370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 ntaps_luma;
21380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 pu_map_size;
21390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 sao_size = 0;
21400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ntaps_luma = 8;
21410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Max inter pred size (number of bytes) */
21430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        inter_pred_tmp_buf_size = sizeof(WORD16) * (MAX_CTB_SIZE + ntaps_luma) * MAX_CTB_SIZE;
21440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        inter_pred_tmp_buf_size = ALIGN64(inter_pred_tmp_buf_size);
21450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* To hold pu_index w.r.t. frame level pu_t array for a CTB at 4x4 level*/
21480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* 16 x 16 4x4 in a CTB of size 64 x 64 and two extra needed for holding
21490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * neighbors
21500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         */
21510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu_map_size = sizeof(WORD32) * (18 * 18);
21520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu_map_size = ALIGN64(pu_map_size);
21540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        size += pu_map_size;
21550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* To hold inter pred temporary buffers */
21570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        size += 2 * inter_pred_tmp_buf_size;
21580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Allocate for each process context */
21610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        size *= MAX_PROCESS_THREADS;
21620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* To hold SAO left buffer for luma */
21650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        sao_size += sizeof(UWORD8) * (MAX(max_ht_luma, max_wd_luma));
21660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* To hold SAO left buffer for chroma */
21680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        sao_size += sizeof(UWORD8) * (MAX(max_ht_luma, max_wd_luma));
21690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* To hold SAO top buffer for luma */
21710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        sao_size += sizeof(UWORD8) * max_wd_luma;
21720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* To hold SAO top buffer for chroma */
21740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        sao_size += sizeof(UWORD8) * max_wd_luma;
21750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* To hold SAO top left luma pixel value for last output ctb in a row*/
21770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        sao_size += sizeof(UWORD8) * max_ctb_rows;
21780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* To hold SAO top left chroma pixel value last output ctb in a row*/
21800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        sao_size += sizeof(UWORD8) * max_ctb_rows * 2;
21810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* To hold SAO top left pixel luma for current ctb - column array*/
21830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        sao_size += sizeof(UWORD8) * max_ctb_rows;
21840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* To hold SAO top left pixel chroma for current ctb-column array*/
21860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        sao_size += sizeof(UWORD8) * max_ctb_rows * 2;
21870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* To hold SAO top right pixel luma pixel value last output ctb in a row*/
21890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        sao_size += sizeof(UWORD8) * max_ctb_cols;
21900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* To hold SAO top right pixel chroma pixel value last output ctb in a row*/
21920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        sao_size += sizeof(UWORD8) * max_ctb_cols * 2;
21930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /*To hold SAO botton bottom left pixels for luma*/
21950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        sao_size += sizeof(UWORD8) * max_ctb_rows;
21960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
21970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /*To hold SAO botton bottom left pixels for luma*/
21980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        sao_size += sizeof(UWORD8) * max_ctb_rows * 2;
21990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        sao_size = ALIGN64(sao_size);
22000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        size += sao_size;
22010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_mem_rec->u4_mem_size = size;
22020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
22030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    DEBUG("\nMemory record Id %d = %d \n", MEM_REC_PROC_SCRATCH,
22040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_mem_rec->u4_mem_size);
22050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
22060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* TO hold scratch buffers needed for each SAO context */
22070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_SAO_SCRATCH];
22080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
22090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 size = 0;
22100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
22110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        size = 4 * MAX_CTB_SIZE * MAX_CTB_SIZE;
22120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
22130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* 2 temporary buffers*/
22140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        size *= 2;
22150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
22160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        size *= MAX_PROCESS_THREADS;
22170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
22180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_mem_rec->u4_mem_size = size;
22190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
22200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    DEBUG("\nMemory record Id %d = %d \n", MEM_REC_SAO_SCRATCH,
22210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_mem_rec->u4_mem_size);
22220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
22230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_BS_QP];
22240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
22250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 size = 0;
22260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 vert_bs_size, horz_bs_size;
22270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 qp_const_flag_size;
22280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 qp_size, num_8x8;
22290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
22300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Max Number of vertical edges */
2231707042fda96ebede81408b854385173483798bcdHarish Mahendrakar        vert_bs_size = max_wd_luma / 8 + 2 * MAX_CTB_SIZE / 8;
22320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
22330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Max Number of horizontal edges - extra MAX_CTB_SIZE / 8 to handle the last 4 rows separately(shifted CTB processing) */
22340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        vert_bs_size *= (max_ht_luma + MAX_CTB_SIZE) / MIN_TU_SIZE;
22350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
22360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Number of bytes */
22370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        vert_bs_size /= 8;
22380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
22390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Two bits per edge */
22400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        vert_bs_size *= 2;
22410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
22420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Max Number of horizontal edges */
22430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        horz_bs_size = max_ht_luma / 8 + MAX_CTB_SIZE / 8;
22440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
22450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Max Number of vertical edges - extra MAX_CTB_SIZE / 8 to handle the last 4 columns separately(shifted CTB processing) */
22460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        horz_bs_size *= (max_wd_luma + MAX_CTB_SIZE) / MIN_TU_SIZE;
22470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
22480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Number of bytes */
22490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        horz_bs_size /= 8;
22500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
22510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Two bits per edge */
22520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        horz_bs_size *= 2;
22530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
22540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Max CTBs in a row */
22550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        qp_const_flag_size = max_wd_luma / MIN_CTB_SIZE + 1 /* The last ctb row deblk is done in last ctb + 1 row.*/;
22560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
22570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Max CTBs in a column */
22580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        qp_const_flag_size *= max_ht_luma / MIN_CTB_SIZE;
22590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
22600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Number of bytes */
22610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        qp_const_flag_size = (qp_const_flag_size + 7) >> 3;
22620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
22630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* QP changes at CU level - So store at 8x8 level */
22640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        num_8x8 = (max_ht_luma * max_wd_luma) / (MIN_CU_SIZE * MIN_CU_SIZE);
22650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        qp_size = num_8x8;
22660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
22670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* To hold vertical boundary strength */
22680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        size += vert_bs_size;
22690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
22700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* To hold horizontal boundary strength */
22710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        size += horz_bs_size;
22720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
22730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* To hold QP */
22740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        size += qp_size;
22750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
22760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* To hold QP const in CTB flags */
22770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        size += qp_const_flag_size;
22780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
22790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_mem_rec->u4_mem_size = size;
22800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
22810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
22820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    DEBUG("\nMemory record Id %d = %d \n", MEM_REC_BS_QP,
22830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_mem_rec->u4_mem_size);
22840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
22850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_TILE_IDX];
22860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
22870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 size = 0;
22880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Max CTBs in a row */
22890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        size  = max_wd_luma / MIN_CTB_SIZE + 2 /* Top row and bottom row extra. This ensures accessing left,top in first row
22900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                  and right in last row will not result in invalid access*/;
22910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Max CTBs in a column */
22920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        size *= max_ht_luma / MIN_CTB_SIZE;
22930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
22940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        size *= sizeof(UWORD16);
22950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_mem_rec->u4_mem_size = size;
22960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
22970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    DEBUG("\nMemory record Id %d = %d \n", MEM_REC_TILE_IDX,
22980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_mem_rec->u4_mem_size);
22990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
23000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_SAO];
23010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
23020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        UWORD32 size;
23030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
23040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* 4 bytes per color component per CTB */
23050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        size = 3 * 4;
23060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
23070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* MAX number of CTBs in a row */
23080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        size *= max_wd_luma / MIN_CTB_SIZE;
23090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
23100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* MAX number of CTBs in a column */
23110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        size *= max_ht_luma / MIN_CTB_SIZE;
23120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_mem_rec->u4_mem_size = size;
23130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
23140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
23150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    DEBUG("\nMemory record Id %d = %d \n", MEM_REC_SAO,
23160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_mem_rec->u4_mem_size);
23170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
23180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
23190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_REF_PIC];
23200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
23210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* size for holding buffer manager context */
23220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec->u4_mem_size = sizeof(buf_mgr_t);
23230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
23240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Size for holding pic_buf_t for each reference picture */
23250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Note this allocation is done for BUF_MGR_MAX_CNT instead of
23260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * max_dpb_size or MAX_DPB_SIZE for following reasons
23270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * max_dpb_size will be based on max_wd and max_ht
23280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * For higher max_wd and max_ht this number will be smaller than MAX_DPB_SIZE
23290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * But during actual initialization number of buffers allocated can be more
23300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     *
23310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * Also to handle display depth application can allocate more than what
23320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * codec asks for in case of non-shared mode
23330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * Since this is only a structure allocation and not actual buffer allocation,
23340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * it is allocated for BUF_MGR_MAX_CNT entries
23350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     */
23360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec->u4_mem_size += BUF_MGR_MAX_CNT * sizeof(pic_buf_t);
23370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
23380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* In case of non-shared mode allocate for reference picture buffers */
2339221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy    /* In case of shared and 420p output, allocate for chroma samples */
2340221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy    if((0 == share_disp_buf) || (chroma_format == IV_YUV_420P))
23410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
2342221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy        UWORD32 init_num_bufs;
2343221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy        UWORD32 init_extra_bufs;
2344221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy        WORD32 chroma_only;
2345221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy
2346221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy        chroma_only = 0;
2347221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy        init_extra_bufs = 0;
2348221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy        init_num_bufs = num_reorder_frames + num_ref_frames + 1;
2349221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy
2350221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy        /* In case of shared display buffers and chroma format 420P
2351221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy         * Allocate for chroma in reference buffers, luma buffer will be display buffer
2352221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy         */
2353221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy
2354221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy        if((1 == share_disp_buf) && (chroma_format == IV_YUV_420P))
2355221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy        {
2356221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy            chroma_only = 1;
2357221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy            init_extra_bufs = num_extra_disp_bufs;
2358221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy        }
2359221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy
23600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Note: Number of luma samples is not max_wd * max_ht here, instead it is
23610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * set to maximum number of luma samples allowed at the given level.
23620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * This is done to ensure that any stream with width and height lesser
23630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * than max_wd and max_ht is supported. Number of buffers required can be greater
23640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * for lower width and heights at a given level and this increased number of buffers
23650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * might require more memory than what max_wd and max_ht buffer would have required
23660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * Number of buffers is doubled in order to return one frame at a time instead of sending
23670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * multiple outputs during dpb full case.
23680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * Also note one extra buffer is allocted to store current picture
23690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * In case of asynchronous parsing and processing, number of buffers should increase here
23700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * based on when parsing and processing threads are synchronized
23710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         */
23720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_mem_rec->u4_mem_size +=
23730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ihevcd_get_total_pic_buf_size(max_wd_luma * max_ht_luma, level,  PAD_WD,  PAD_HT,
2374221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy                                                      init_num_bufs, init_extra_bufs, chroma_only);
23750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
23760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    DEBUG("\nMemory record Id %d = %d \n", MEM_REC_REF_PIC,
23770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_mem_rec->u4_mem_size);
23780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
23790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Request memory to hold mem records to be returned during retrieve call */
23800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_BACKUP];
23810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec->u4_mem_size = MEM_REC_CNT * sizeof(iv_mem_rec_t);
23820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    DEBUG("\nMemory record Id %d = %d \n", MEM_REC_BACKUP,
23830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_mem_rec->u4_mem_size);
23840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
23850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Each memtab size is aligned to next multiple of 128 bytes */
23860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* This is to ensure all the memtabs start at different cache lines */
23870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = ps_mem_rec_base;
23880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    for(i = 0; i < MEM_REC_CNT; i++)
23890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
23900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_mem_rec->u4_mem_size = ALIGN128(ps_mem_rec->u4_mem_size);
23910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_mem_rec++;
23920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
23930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_q_op->s_ivd_fill_mem_rec_op_t.u4_num_mem_rec_filled = MEM_REC_CNT;
23940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#ifdef APPLY_CONCEALMENT
23950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
23960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        IV_API_CALL_STATUS_T status;
23970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        icncl_fill_mem_rec_ip_t cncl_fill_ip;
23980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        icncl_fill_mem_rec_op_t cncl_fill_op;
23990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        UWORD8 mem_loc = MEM_REC_CNT;
24000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
24010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        cncl_fill_ip.s_ivd_fill_mem_rec_ip_t.e_cmd = IV_CMD_FILL_NUM_MEM_REC;
24020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        cncl_fill_ip.s_ivd_fill_mem_rec_ip_t.pv_mem_rec_location = &(memTab[mem_loc]);
24030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        cncl_fill_ip.s_ivd_fill_mem_rec_ip_t.u4_size = ps_mem_q_ip->s_ivd_fill_mem_rec_ip_t.u4_size;
24040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        cncl_fill_ip.s_ivd_fill_mem_rec_ip_t.u4_max_frm_wd = max_wd_luma;
24050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        cncl_fill_ip.s_ivd_fill_mem_rec_ip_t.u4_max_frm_ht = max_ht_luma;
24060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
24070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        status = icncl_api_function(NULL, (void *)&cncl_fill_ip, (void *)&cncl_fill_op);
24080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
24090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(IV_SUCCESS == status)
24100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
24110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            icncl_num_mem_rec_ip_t cncl_mem_ip;
24120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            icncl_num_mem_rec_op_t cncl_mem_op;
24130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
24140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            cncl_mem_ip.s_ivd_num_rec_ip_t.e_cmd = IV_CMD_GET_NUM_MEM_REC;
24150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            cncl_mem_ip.s_ivd_num_rec_ip_t.u4_size = sizeof(icncl_num_mem_rec_ip_t);
24160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
24170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            status = icncl_api_function(NULL, (void *)&cncl_mem_ip, (void *)&cncl_mem_op);
24180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(IV_SUCCESS == status)
24190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
24200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_mem_q_op->s_ivd_fill_mem_rec_op_t.u4_num_mem_rec_filled += cncl_mem_op.s_ivd_num_mem_rec_op_t.u4_num_mem_rec;
24210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
24220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
24230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
24240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        return status;
24250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
24260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
24270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#endif //APPLY_CONCEALMENT
24280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    DEBUG("Num mem recs in fill call : %d\n",
24290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_mem_q_op->s_ivd_fill_mem_rec_op_t.u4_num_mem_rec_filled);
24300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
24310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
24320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return (status);
24330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
24340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
24350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
24360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
24370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
24380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
24390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
24400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Initializes from mem records passed to the codec
24410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
24420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
24430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Initializes pointers based on mem records passed
24440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
24450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_codec_obj
24460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to codec object at API level
24470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
24480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pv_api_ip
24490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to input argument structure
24500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
24510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pv_api_op
24520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to output argument structure
24530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
24540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns  Status
24550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
24560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
24570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
24580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
24590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
24600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
24610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWORD32 ihevcd_init_mem_rec(iv_obj_t *ps_codec_obj,
24620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                           void *pv_api_ip,
24630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                           void *pv_api_op)
24640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
24650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
24660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ihevcd_cxa_init_ip_t *dec_init_ip;
24670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ihevcd_cxa_init_op_t *dec_init_op;
24680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 i;
24690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    iv_mem_rec_t *ps_mem_rec, *ps_mem_rec_base;
24700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 status = IV_SUCCESS;
24710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    codec_t *ps_codec;
24720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 max_tile_cols, max_tile_rows;
24730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
24740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    dec_init_ip = (ihevcd_cxa_init_ip_t *)pv_api_ip;
24750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    dec_init_op = (ihevcd_cxa_init_op_t *)pv_api_op;
24760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
24770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec_base = dec_init_ip->s_ivd_init_ip_t.pv_mem_rec_location;
24780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
24790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_CODEC];
24800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec_obj->pv_codec_handle = ps_mem_rec->pv_base;
24810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
24820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec = (codec_t *)(ps_codec_obj->pv_codec_handle);
24830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
24840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Note this memset can not be done in init() call, since init will called
24850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    during reset as well. And calling this during reset will mean all pointers
24860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    need to reinitialized*/
24870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    memset(ps_codec, 0, sizeof(codec_t));
24880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
24890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(dec_init_ip->s_ivd_init_ip_t.u4_size
24900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    > offsetof(ihevcd_cxa_init_ip_t, i4_level))
24910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
24920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->i4_init_level = dec_init_ip->i4_level;
24930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
24940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->i4_init_level *= 3;
24950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
24960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else
24970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
24980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->i4_init_level = MAX_LEVEL;
24990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
25000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
25010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(dec_init_ip->s_ivd_init_ip_t.u4_size
25020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    > offsetof(ihevcd_cxa_init_ip_t, u4_num_ref_frames))
25030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
25040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->i4_init_num_ref = dec_init_ip->u4_num_ref_frames;
25050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
25060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else
25070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
25080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->i4_init_num_ref = MAX_REF_CNT;
25090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
25100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
25110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(dec_init_ip->s_ivd_init_ip_t.u4_size
25120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    > offsetof(ihevcd_cxa_init_ip_t, u4_num_reorder_frames))
25130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
25140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->i4_init_num_reorder = dec_init_ip->u4_num_reorder_frames;
25150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
25160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else
25170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
25180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->i4_init_num_reorder = MAX_REF_CNT;
25190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
25200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
25210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(dec_init_ip->s_ivd_init_ip_t.u4_size
25220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    > offsetof(ihevcd_cxa_init_ip_t, u4_num_extra_disp_buf))
25230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
25240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->i4_init_num_extra_disp_buf =
25250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        dec_init_ip->u4_num_extra_disp_buf;
25260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
25270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else
25280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
25290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->i4_init_num_extra_disp_buf = 0;
25300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
25310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
25320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(dec_init_ip->s_ivd_init_ip_t.u4_size
25330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    > offsetof(ihevcd_cxa_init_ip_t, u4_share_disp_buf))
25340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
25350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#ifndef LOGO_EN
25360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->i4_share_disp_buf = dec_init_ip->u4_share_disp_buf;
25370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#else
25380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->i4_share_disp_buf = 0;
25390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#endif
25400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
25410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else
25420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
25430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->i4_share_disp_buf = 0;
25440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
25450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Shared display mode is supported only for 420SP and 420P formats */
25460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if((dec_init_ip->s_ivd_init_ip_t.e_output_format != IV_YUV_420P) &&
25470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar       (dec_init_ip->s_ivd_init_ip_t.e_output_format != IV_YUV_420SP_UV) &&
25480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar       (dec_init_ip->s_ivd_init_ip_t.e_output_format != IV_YUV_420SP_VU))
25490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
25500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->i4_share_disp_buf = 0;
25510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
25520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
25530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if((ps_codec->i4_init_level < MIN_LEVEL)
25540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    || (ps_codec->i4_init_level > MAX_LEVEL))
25550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
25560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        dec_init_op->s_ivd_init_op_t.u4_error_code |= IHEVCD_LEVEL_UNSUPPORTED;
25570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        return (IV_FAIL);
25580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
25590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
25600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ps_codec->i4_init_num_ref > MAX_REF_CNT)
25610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
25620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        dec_init_op->s_ivd_init_op_t.u4_error_code |=
25630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        IHEVCD_NUM_REF_UNSUPPORTED;
25640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->i4_init_num_ref = MAX_REF_CNT;
25650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
25660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
25670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ps_codec->i4_init_num_reorder > MAX_REF_CNT)
25680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
25690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        dec_init_op->s_ivd_init_op_t.u4_error_code |=
25700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        IHEVCD_NUM_REORDER_UNSUPPORTED;
25710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->i4_init_num_reorder = MAX_REF_CNT;
25720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
25730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
25740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ps_codec->i4_init_num_extra_disp_buf > MAX_REF_CNT)
25750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
25760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        dec_init_op->s_ivd_init_op_t.u4_error_code |=
25770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        IHEVCD_NUM_EXTRA_DISP_UNSUPPORTED;
25780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->i4_init_num_extra_disp_buf = 0;
25790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
25800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
25810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->e_chroma_fmt = dec_init_ip->s_ivd_init_ip_t.e_output_format;
25820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
25830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_max_wd = dec_init_ip->s_ivd_init_ip_t.u4_frm_max_wd;
25840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_max_ht = dec_init_ip->s_ivd_init_ip_t.u4_frm_max_ht;
25850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
25860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_max_wd = ALIGN64(ps_codec->i4_max_wd);
25870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_max_ht = ALIGN64(ps_codec->i4_max_ht);
25880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2589707042fda96ebede81408b854385173483798bcdHarish Mahendrakar    ps_codec->i4_new_max_wd = ps_codec->i4_max_wd;
2590707042fda96ebede81408b854385173483798bcdHarish Mahendrakar    ps_codec->i4_new_max_ht = ps_codec->i4_max_ht;
2591707042fda96ebede81408b854385173483798bcdHarish Mahendrakar
25920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    max_tile_cols = (ps_codec->i4_max_wd + MIN_TILE_WD - 1) / MIN_TILE_WD;
25930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    max_tile_rows = (ps_codec->i4_max_ht + MIN_TILE_HT - 1) / MIN_TILE_HT;
25940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
25950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_BACKUP];
25960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->ps_mem_rec_backup = (iv_mem_rec_t *)ps_mem_rec->pv_base;
25970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
25980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    memcpy(ps_codec->ps_mem_rec_backup, ps_mem_rec_base,
25990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar           MEM_REC_CNT * sizeof(iv_mem_rec_t));
26000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_BITSBUF];
26020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->pu1_bitsbuf = (UWORD8 *)ps_mem_rec->pv_base;
26030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->u4_bitsbuf_size = ps_mem_rec->u4_mem_size;
26040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_TU_DATA];
26060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->pv_tu_data = ps_mem_rec->pv_base;
26070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_MVBANK];
26080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->pv_mv_buf_mgr = ps_mem_rec->pv_base;
26090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->pv_mv_bank_buf_base = (UWORD8 *)ps_codec->pv_mv_buf_mgr + sizeof(buf_mgr_t);
26100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_total_mv_bank_size = ps_mem_rec->u4_mem_size - sizeof(buf_mgr_t);
26120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_VPS];
26150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->ps_vps_base = (vps_t *)ps_mem_rec->pv_base;
26160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.ps_vps_base = ps_codec->ps_vps_base;
26170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_SPS];
26190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->ps_sps_base = (sps_t *)ps_mem_rec->pv_base;
26200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.ps_sps_base = ps_codec->ps_sps_base;
26210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_PPS];
26230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->ps_pps_base = (pps_t *)ps_mem_rec->pv_base;
26240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.ps_pps_base = ps_codec->ps_pps_base;
26250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_SLICE_HDR];
26270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->ps_slice_hdr_base = (slice_header_t *)ps_mem_rec->pv_base;
26280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.ps_slice_hdr_base = ps_codec->ps_slice_hdr_base;
26290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_TILE];
26310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->ps_tile = (tile_t *)ps_mem_rec->pv_base;
26320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_ENTRY_OFST];
26340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->pi4_entry_ofst = (WORD32 *)ps_mem_rec->pv_base;
26350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_SCALING_MAT];
26370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->pi2_scaling_mat = (WORD16 *)ps_mem_rec->pv_base;
26380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_PARSE_SKIP_FLAG];
26400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.pu4_skip_cu_top = (UWORD32 *)ps_mem_rec->pv_base;
26410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_PARSE_CT_DEPTH];
26430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.pu4_ct_depth_top = (UWORD32 *)ps_mem_rec->pv_base;
26440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_PARSE_INTRA_PRED_MODE];
26460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.pu1_luma_intra_pred_mode_left =
26470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    (UWORD8 *)ps_mem_rec->pv_base;
26480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.pu1_luma_intra_pred_mode_top  =
26490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    (UWORD8 *)ps_mem_rec->pv_base + 16;
26500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_INTRA_FLAG];
26520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    memset(ps_mem_rec->pv_base, 0, (ps_codec->i4_max_wd / MIN_CU_SIZE) * (ps_codec->i4_max_ht / MIN_CU_SIZE) / 8);
26540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->pu1_pic_intra_flag = (UWORD8 *)ps_mem_rec->pv_base;
26560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.pu1_pic_intra_flag = ps_codec->pu1_pic_intra_flag;
26570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_TRANSQUANT_BYPASS_FLAG];
26580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
26600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 loop_filter_size = ((ps_codec->i4_max_wd  + 64) / MIN_CU_SIZE) * ((ps_codec->i4_max_ht + 64) / MIN_CU_SIZE) / 8;
26610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 loop_filter_strd = (ps_codec->i4_max_wd + 63) >> 6;
26620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        memset(ps_mem_rec->pv_base, 0, loop_filter_size);
26640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* The offset is added for easy processing of top and left blocks while loop filtering */
26660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->pu1_pic_no_loop_filter_flag = (UWORD8 *)ps_mem_rec->pv_base + loop_filter_strd + 1;
26670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.pu1_pic_no_loop_filter_flag = ps_codec->pu1_pic_no_loop_filter_flag;
26680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.s_deblk_ctxt.pu1_pic_no_loop_filter_flag = ps_codec->pu1_pic_no_loop_filter_flag;
26690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.s_sao_ctxt.pu1_pic_no_loop_filter_flag = ps_codec->pu1_pic_no_loop_filter_flag;
26700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
26710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Initialize pointers in PPS structures */
26730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
26740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        sps_t *ps_sps = ps_codec->ps_sps_base;
26750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pps_t *ps_pps = ps_codec->ps_pps_base;
26760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        tile_t *ps_tile =  ps_codec->ps_tile;
26770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD16 *pi2_scaling_mat =  ps_codec->pi2_scaling_mat;
26780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 scaling_mat_size;
26790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        SCALING_MAT_SIZE(scaling_mat_size);
26810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(i = 0; i < MAX_SPS_CNT; i++)
26830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
26840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_sps->pi2_scaling_mat  = pi2_scaling_mat;
26850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pi2_scaling_mat += scaling_mat_size;
26860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_sps++;
26870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
26880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(i = 0; i < MAX_PPS_CNT; i++)
26900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
26910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_pps->ps_tile = ps_tile;
26920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_tile += (max_tile_cols * max_tile_rows);
26930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_pps->pi2_scaling_mat  = pi2_scaling_mat;
26950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pi2_scaling_mat += scaling_mat_size;
26960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_pps++;
26970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
26980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
26990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
27000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
27010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_THREAD_HANDLE];
27020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    for(i = 0; i < MAX_PROCESS_THREADS; i++)
27030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
27040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 handle_size = ithread_get_handle_size();
27050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->apv_process_thread_handle[i] =
27060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        (UWORD8 *)ps_mem_rec->pv_base + (i * handle_size);
27070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
27080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
27090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_PROC_JOBQ];
27100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->pv_proc_jobq_buf = ps_mem_rec->pv_base;
27110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_proc_jobq_buf_size = ps_mem_rec->u4_mem_size;
27120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
27130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_PARSE_MAP];
27140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->pu1_parse_map = (UWORD8 *)ps_mem_rec->pv_base;
27150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
27160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_PROC_MAP];
27170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->pu1_proc_map = (UWORD8 *)ps_mem_rec->pv_base;
27180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_DISP_MGR];
27190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->pv_disp_buf_mgr = ps_mem_rec->pv_base;
27200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
27210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_DPB_MGR];
27220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->pv_dpb_mgr = ps_mem_rec->pv_base;
27230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
27240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
27250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_PIC_PU_IDX_NEIGHBOR];
27260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
27270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    for(i = 0; i < MAX_PROCESS_THREADS; i++)
27280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
27290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        UWORD32 *pu4_buf = (UWORD32 *)ps_mem_rec->pv_base;
27300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->as_process[i].pu4_pic_pu_idx_left = pu4_buf + i * (MAX_CTB_SIZE / 4);
27310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        memset(ps_codec->as_process[i].pu4_pic_pu_idx_left, 0, sizeof(UWORD32) * MAX_CTB_SIZE / 4);
27320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->as_process[i].pu4_pic_pu_idx_top = pu4_buf + MAX_PROCESS_THREADS * (MAX_CTB_SIZE / 4);
27330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
27340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    memset(ps_codec->as_process[0].pu4_pic_pu_idx_top, 0, sizeof(UWORD32) * (ps_codec->i4_max_wd / 4 + 1));
27350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
27360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
27370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_PROC_SCRATCH];
27380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
27390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        UWORD8 *pu1_buf = (UWORD8 *)ps_mem_rec->pv_base;
27400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 pic_pu_idx_map_size;
27410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
27420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 inter_pred_tmp_buf_size, ntaps_luma;
27430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
27440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Max inter pred size */
27450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ntaps_luma = 8;
27460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        inter_pred_tmp_buf_size = sizeof(WORD16) * (MAX_CTB_SIZE + ntaps_luma) * MAX_CTB_SIZE;
27470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
27480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        inter_pred_tmp_buf_size = ALIGN64(inter_pred_tmp_buf_size);
27490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
27500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* To hold pu_index w.r.t. frame level pu_t array for a CTB */
27510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pic_pu_idx_map_size = sizeof(WORD32) * (18 * 18);
27520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pic_pu_idx_map_size = ALIGN64(pic_pu_idx_map_size);
27530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(i = 0; i < MAX_PROCESS_THREADS; i++)
27540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
27550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].pi2_inter_pred_tmp_buf1 = (WORD16 *)pu1_buf;
27560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_buf += inter_pred_tmp_buf_size;
27570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
27580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].pi2_inter_pred_tmp_buf2 = (WORD16 *)pu1_buf;
27590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_buf += inter_pred_tmp_buf_size;
27600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
27610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Inverse transform intermediate and inverse scan output buffers reuse inter pred scratch buffers */
27620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].pi2_itrans_intrmd_buf =
27630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ps_codec->as_process[i].pi2_inter_pred_tmp_buf2;
27640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].pi2_invscan_out =
27650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ps_codec->as_process[i].pi2_inter_pred_tmp_buf1;
27660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
27670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].pu4_pic_pu_idx_map = (UWORD32 *)pu1_buf;
27680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_bs_ctxt.pu4_pic_pu_idx_map =
27690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            (UWORD32 *)pu1_buf;
27700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_buf += pic_pu_idx_map_size;
27710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
27720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            //   ps_codec->as_process[i].pi2_inter_pred_tmp_buf3 = (WORD16 *)pu1_buf;
27730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            //   pu1_buf += inter_pred_tmp_buf_size;
27740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
27750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].i4_inter_pred_tmp_buf_strd = MAX_CTB_SIZE;
27760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
27770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
27780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(i = 0; i < MAX_PROCESS_THREADS; i++)
27790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
27800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_sao_ctxt.pu1_sao_src_left_luma = (UWORD8 *)pu1_buf;
27810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
27820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.s_sao_ctxt.pu1_sao_src_left_luma = (UWORD8 *)pu1_buf;
27830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_buf += MAX(ps_codec->i4_max_ht, ps_codec->i4_max_wd);
27840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
27850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(i = 0; i < MAX_PROCESS_THREADS; i++)
27860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
27870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_sao_ctxt.pu1_sao_src_left_chroma = (UWORD8 *)pu1_buf;
27880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
27890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.s_sao_ctxt.pu1_sao_src_left_chroma = (UWORD8 *)pu1_buf;
27900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_buf += MAX(ps_codec->i4_max_ht, ps_codec->i4_max_wd);
27910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(i = 0; i < MAX_PROCESS_THREADS; i++)
27920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
27930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_sao_ctxt.pu1_sao_src_top_luma = (UWORD8 *)pu1_buf;
27940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
27950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.s_sao_ctxt.pu1_sao_src_top_luma = (UWORD8 *)pu1_buf;
27960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_buf += ps_codec->i4_max_wd;
27970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
27980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(i = 0; i < MAX_PROCESS_THREADS; i++)
27990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
28000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_sao_ctxt.pu1_sao_src_top_chroma = (UWORD8 *)pu1_buf;
28010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
28020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.s_sao_ctxt.pu1_sao_src_top_chroma = (UWORD8 *)pu1_buf;
28030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_buf += ps_codec->i4_max_wd;
28040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(i = 0; i < MAX_PROCESS_THREADS; i++)
28050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
28060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_sao_ctxt.pu1_sao_src_luma_top_left_ctb = (UWORD8 *)pu1_buf;
28070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
28080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.s_sao_ctxt.pu1_sao_src_luma_top_left_ctb = (UWORD8 *)pu1_buf;
28090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_buf += ps_codec->i4_max_ht / MIN_CTB_SIZE;
28100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
28110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(i = 0; i < MAX_PROCESS_THREADS; i++)
28120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
28130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_sao_ctxt.pu1_sao_src_chroma_top_left_ctb = (UWORD8 *)pu1_buf;
28140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
28150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.s_sao_ctxt.pu1_sao_src_chroma_top_left_ctb = (UWORD8 *)pu1_buf;
28160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_buf += (ps_codec->i4_max_ht / MIN_CTB_SIZE) * 2;
28170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
28180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(i = 0; i < MAX_PROCESS_THREADS; i++)
28190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
28200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_sao_ctxt.pu1_sao_src_top_left_luma_curr_ctb = (UWORD8 *)pu1_buf;
28210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
28220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.s_sao_ctxt.pu1_sao_src_top_left_luma_curr_ctb = (UWORD8 *)pu1_buf;
28230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_buf += ps_codec->i4_max_ht / MIN_CTB_SIZE;
28240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
28250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(i = 0; i < MAX_PROCESS_THREADS; i++)
28260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
28270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_sao_ctxt.pu1_sao_src_top_left_chroma_curr_ctb = (UWORD8 *)pu1_buf;
28280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
28290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.s_sao_ctxt.pu1_sao_src_top_left_chroma_curr_ctb = (UWORD8 *)pu1_buf;
28300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
28310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_buf += (ps_codec->i4_max_ht / MIN_CTB_SIZE) * 2;
28320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(i = 0; i < MAX_PROCESS_THREADS; i++)
28330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
28340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_sao_ctxt.pu1_sao_src_top_left_luma_top_right = (UWORD8 *)pu1_buf;
28350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
28360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.s_sao_ctxt.pu1_sao_src_top_left_luma_top_right = (UWORD8 *)pu1_buf;
28370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
28380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_buf += ps_codec->i4_max_wd / MIN_CTB_SIZE;
28390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(i = 0; i < MAX_PROCESS_THREADS; i++)
28400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
28410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_sao_ctxt.pu1_sao_src_top_left_chroma_top_right = (UWORD8 *)pu1_buf;
28420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
28430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.s_sao_ctxt.pu1_sao_src_top_left_chroma_top_right = (UWORD8 *)pu1_buf;
28440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
28450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_buf += (ps_codec->i4_max_wd / MIN_CTB_SIZE) * 2;
28460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
28470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /*Per CTB, Store 1 value for luma , 2 values for chroma*/
28480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(i = 0; i < MAX_PROCESS_THREADS; i++)
28490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
28500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_sao_ctxt.pu1_sao_src_top_left_luma_bot_left = (UWORD8 *)pu1_buf;
28510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
28520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.s_sao_ctxt.pu1_sao_src_top_left_luma_bot_left = (UWORD8 *)pu1_buf;
28530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
28540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_buf += (ps_codec->i4_max_ht / MIN_CTB_SIZE);
28550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
28560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(i = 0; i < MAX_PROCESS_THREADS; i++)
28570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
28580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_sao_ctxt.pu1_sao_src_top_left_chroma_bot_left = (UWORD8 *)pu1_buf;
28590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
28600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.s_sao_ctxt.pu1_sao_src_top_left_chroma_bot_left = (UWORD8 *)pu1_buf;
28610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
28620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_buf += (ps_codec->i4_max_ht / MIN_CTB_SIZE) * 2;
28630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
28640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
28650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_SAO_SCRATCH];
28660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
28670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        UWORD8 *pu1_buf = (UWORD8 *)ps_mem_rec->pv_base;
28680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(i = 0; i < MAX_PROCESS_THREADS; i++)
28690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
28700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_sao_ctxt.pu1_tmp_buf_luma = (UWORD8 *)pu1_buf;
28710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_buf += 4 * MAX_CTB_SIZE * MAX_CTB_SIZE * sizeof(UWORD8);
28720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
28730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_sao_ctxt.pu1_tmp_buf_chroma = (UWORD8 *)pu1_buf;
28740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_buf += 4 * MAX_CTB_SIZE * MAX_CTB_SIZE * sizeof(UWORD8);
28750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
28760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
28770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
28780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_BS_QP];
28790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
28800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        UWORD8 *pu1_buf = (UWORD8 *)ps_mem_rec->pv_base;
28810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 vert_bs_size, horz_bs_size;
28820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 qp_const_flag_size;
28830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 qp_size;
28840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 num_8x8;
28850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
28860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Max Number of vertical edges */
2887707042fda96ebede81408b854385173483798bcdHarish Mahendrakar        vert_bs_size = ps_codec->i4_max_wd / 8 + 2 * MAX_CTB_SIZE / 8;
28880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
28890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Max Number of horizontal edges - extra MAX_CTB_SIZE / 8 to handle the last 4 rows separately(shifted CTB processing) */
28900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        vert_bs_size *= (ps_codec->i4_max_ht + MAX_CTB_SIZE) / MIN_TU_SIZE;
28910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
28920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Number of bytes */
28930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        vert_bs_size /= 8;
28940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
28950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Two bits per edge */
28960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        vert_bs_size *= 2;
28970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
28980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Max Number of horizontal edges */
28990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        horz_bs_size = ps_codec->i4_max_ht / 8 + MAX_CTB_SIZE / 8;
29000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
29010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Max Number of vertical edges - extra MAX_CTB_SIZE / 8 to handle the last 4 columns separately(shifted CTB processing) */
29020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        horz_bs_size *= (ps_codec->i4_max_wd + MAX_CTB_SIZE) / MIN_TU_SIZE;
29030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
29040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Number of bytes */
29050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        horz_bs_size /= 8;
29060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
29070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Two bits per edge */
29080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        horz_bs_size *= 2;
29090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
29100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Max CTBs in a row */
29110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        qp_const_flag_size = ps_codec->i4_max_wd / MIN_CTB_SIZE + 1 /* The last ctb row deblk is done in last ctb + 1 row.*/;
29120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
29130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Max CTBs in a column */
29140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        qp_const_flag_size *= ps_codec->i4_max_ht / MIN_CTB_SIZE;
29150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
29160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Number of bytes */
29170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        qp_const_flag_size /= 8;
29180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
29190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* QP changes at CU level - So store at 8x8 level */
29200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        num_8x8 = (ps_codec->i4_max_ht * ps_codec->i4_max_wd) / (MIN_CU_SIZE * MIN_CU_SIZE);
29210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        qp_size = num_8x8;
29220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        memset(pu1_buf, 0, vert_bs_size + horz_bs_size + qp_size + qp_const_flag_size);
29230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
29240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(i = 0; i < MAX_PROCESS_THREADS; i++)
29250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
29260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_bs_ctxt.pu4_pic_vert_bs = (UWORD32 *)pu1_buf;
29270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_deblk_ctxt.s_bs_ctxt.pu4_pic_vert_bs = (UWORD32 *)pu1_buf;
29280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.s_deblk_ctxt.s_bs_ctxt.pu4_pic_vert_bs = (UWORD32 *)pu1_buf;
29290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_buf += vert_bs_size;
29300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
29310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_bs_ctxt.pu4_pic_horz_bs = (UWORD32 *)pu1_buf;
29320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_deblk_ctxt.s_bs_ctxt.pu4_pic_horz_bs = (UWORD32 *)pu1_buf;
29330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.s_deblk_ctxt.s_bs_ctxt.pu4_pic_horz_bs = (UWORD32 *)pu1_buf;
29340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_buf += horz_bs_size;
29350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
29360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_bs_ctxt.pu1_pic_qp = (UWORD8 *)pu1_buf;
29370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_deblk_ctxt.s_bs_ctxt.pu1_pic_qp = (UWORD8 *)pu1_buf;
29380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.s_deblk_ctxt.s_bs_ctxt.pu1_pic_qp = (UWORD8 *)pu1_buf;
29390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_buf += qp_size;
29400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
29410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_bs_ctxt.pu1_pic_qp_const_in_ctb = (UWORD8 *)pu1_buf;
29420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].s_deblk_ctxt.s_bs_ctxt.pu1_pic_qp_const_in_ctb = (UWORD8 *)pu1_buf;
29430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->s_parse.s_deblk_ctxt.s_bs_ctxt.pu1_pic_qp_const_in_ctb = (UWORD8 *)pu1_buf;
29440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_buf += qp_const_flag_size;
29450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
29460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_buf -= (vert_bs_size + horz_bs_size + qp_size + qp_const_flag_size);
29470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
29480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.s_bs_ctxt.pu4_pic_vert_bs = (UWORD32 *)pu1_buf;
29490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_buf += vert_bs_size;
29500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
29510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.s_bs_ctxt.pu4_pic_horz_bs = (UWORD32 *)pu1_buf;
29520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_buf += horz_bs_size;
29530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
29540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.s_bs_ctxt.pu1_pic_qp = (UWORD8 *)pu1_buf;
29550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_buf += qp_size;
29560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
29570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->s_parse.s_bs_ctxt.pu1_pic_qp_const_in_ctb = (UWORD8 *)pu1_buf;
29580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_buf += qp_const_flag_size;
29590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
29600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
29610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
29620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_TILE_IDX];
29630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
29640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        UWORD8 *pu1_buf = (UWORD8 *)ps_mem_rec->pv_base;
29650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
29660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(i = 0; i < MAX_PROCESS_THREADS; i++)
29670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
29680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->as_process[i].pu1_tile_idx = (UWORD16 *)pu1_buf + ps_codec->i4_max_wd / MIN_CTB_SIZE /* Offset 1 row */;
29690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
29700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
29710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
29720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_SAO];
29730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.ps_pic_sao = (sao_t *)ps_mem_rec->pv_base;
29740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->s_parse.s_sao_ctxt.ps_pic_sao = (sao_t *)ps_mem_rec->pv_base;
29750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    for(i = 0; i < MAX_PROCESS_THREADS; i++)
29760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
29770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->as_process[i].s_sao_ctxt.ps_pic_sao = ps_codec->s_parse.ps_pic_sao;
29780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
29790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
29800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_mem_rec = &ps_mem_rec_base[MEM_REC_REF_PIC];
29810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->pv_pic_buf_mgr = ps_mem_rec->pv_base;
29820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->pv_pic_buf_base = (UWORD8 *)ps_codec->pv_pic_buf_mgr + sizeof(buf_mgr_t);
29830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_total_pic_buf_size = ps_mem_rec->u4_mem_size - sizeof(buf_mgr_t);
2984221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy    ps_codec->pu1_cur_chroma_ref_buf = (UWORD8 *)ps_codec->pv_pic_buf_base + BUF_MGR_MAX_CNT * sizeof(pic_buf_t);
2985221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy    ps_codec->i4_remaining_pic_buf_size = ps_codec->i4_total_pic_buf_size - BUF_MGR_MAX_CNT * sizeof(pic_buf_t);
29860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
29870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
29880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
29890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
29900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#ifdef APPLY_CONCEALMENT
29910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
29920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
29930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        UWORD32 mem_loc;
29940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
29950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        icncl_init_ip_t cncl_init_ip;
29960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        icncl_init_op_t cncl_init_op;
29970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        iv_mem_rec_t *ps_mem_rec;
29980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        DecStruct *ps_codec;
29990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
30000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_mem_rec = dec_init_ip->s_ivd_init_ip_t.pv_mem_rec_location;
30010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        mem_loc = MEM_REC_CNT;
30020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
30030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->ps_conceal = (iv_obj_t *)ps_mem_rec[mem_loc].pv_base;
30040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->i4_first_frame_done = 0;
30050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
30060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        cncl_init_ip.u4_size = sizeof(icncl_init_ip_t);
30070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        cncl_init_ip.pv_mem_rec_location = &(ps_mem_rec[mem_loc]);
30080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        cncl_init_ip.e_cmd = IV_CMD_INIT;
30090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
30100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        status = icncl_api_function(ps_codec->ps_conceal, (void *)&cncl_init_ip, (void *)&cncl_init_op);
30110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
30120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
30130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#endif //APPLY_CONCEALMENT
30140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
30150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    status = ihevcd_init(ps_codec);
30160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
30170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    TRACE_INIT(NULL);
30180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    STATS_INIT();
30190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return status;
30200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
30210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
30220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
30230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
30240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
30250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Retrieves mem records passed to the codec
30260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
30270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
30280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Retrieves memrecs passed earlier
30290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
30300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_codec_obj
30310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to codec object at API level
30320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
30330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pv_api_ip
30340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to input argument structure
30350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
30360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pv_api_op
30370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to output argument structure
30380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
30390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns  Status
30400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
30410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
30420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
30430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
30440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
30450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
30460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWORD32 ihevcd_retrieve_memrec(iv_obj_t *ps_codec_obj,
30470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                              void *pv_api_ip,
30480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                              void *pv_api_op)
30490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
30500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
30510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    iv_retrieve_mem_rec_ip_t *dec_clr_ip;
30520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    iv_retrieve_mem_rec_op_t *dec_clr_op;
30530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    codec_t *ps_codec;
30540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    dec_clr_ip = (iv_retrieve_mem_rec_ip_t *)pv_api_ip;
30550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    dec_clr_op = (iv_retrieve_mem_rec_op_t *)pv_api_op;
30560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec = (codec_t *)(ps_codec_obj->pv_codec_handle);
30570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
30580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ps_codec->i4_init_done != 1)
30590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
30600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        dec_clr_op->u4_error_code |= 1 << IVD_FATALERROR;
30610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        dec_clr_op->u4_error_code |= IHEVCD_INIT_NOT_DONE;
30620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        return IV_FAIL;
30630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
30640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
30650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    memcpy(dec_clr_ip->pv_mem_rec_location, ps_codec->ps_mem_rec_backup,
30660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar           MEM_REC_CNT * (sizeof(iv_mem_rec_t)));
30670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    dec_clr_op->u4_num_mem_rec_filled = MEM_REC_CNT;
30680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
30690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#ifdef APPLY_CONCEALMENT
30700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
30710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        IV_API_CALL_STATUS_T status;
30720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        icncl_fill_mem_rec_ip_t cncl_fill_ip;
30730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        icncl_fill_mem_rec_op_t cncl_fill_op;
30740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
30750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        iv_mem_rec_t *ps_mem_rec;
30760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
30770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        UWORD8 mem_loc = MEM_REC_CNT;
30780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        UWORD8 num_cncl_mem = 0;
30790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
30800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_mem_rec = dec_clr_ip->pv_mem_rec_location;
30810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
30820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        cncl_fill_ip.s_ivd_fill_mem_rec_ip_t.e_cmd = IV_CMD_FILL_NUM_MEM_REC;
30830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        cncl_fill_ip.s_ivd_fill_mem_rec_ip_t.pv_mem_rec_location = &(ps_mem_rec[mem_loc]);
30840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        cncl_fill_ip.s_ivd_fill_mem_rec_ip_t.u4_size = sizeof(icncl_fill_mem_rec_ip_t);
30850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
30860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        status = icncl_api_function(NULL, (void *)&cncl_fill_ip, (void *)&cncl_fill_op);
30870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
30880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        cncl_fill_ip.s_ivd_fill_mem_rec_ip_t.e_cmd = IV_CMD_RETRIEVE_MEMREC;
30890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        cncl_fill_op.s_ivd_fill_mem_rec_op_t.u4_size = sizeof(icncl_fill_mem_rec_op_t);
30900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
30910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        status = icncl_api_function(ps_codec->ps_conceal, (void *)&cncl_fill_ip, (void *)&cncl_fill_op);
30920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
30930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(status == IV_SUCCESS)
30940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
30950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Add the concealment library's memory requirements */
30960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            dec_clr_op->u4_num_mem_rec_filled += cncl_fill_op.s_ivd_fill_mem_rec_op_t.u4_num_mem_rec_filled;
30970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
30980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
30990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#endif //APPLY_CONCEALMENT
31000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    DEBUG("Retrieve num mem recs: %d\n",
31010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    dec_clr_op->u4_num_mem_rec_filled);
31020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    STATS_PRINT();
31030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ihevcd_jobq_free((jobq_t *)ps_codec->pv_proc_jobq);
31040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
31050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
31060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
31070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return IV_SUCCESS;
31080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
31090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
31100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
31110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
31120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
31130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
31140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Passes display buffer from application to codec
31150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
31160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
31170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Adds display buffer to the codec
31180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
31190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_codec_obj
31200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to codec object at API level
31210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
31220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pv_api_ip
31230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to input argument structure
31240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
31250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pv_api_op
31260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to output argument structure
31270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
31280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns  Status
31290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
31300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
31310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
31320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
31330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
31340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
31350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWORD32 ihevcd_set_display_frame(iv_obj_t *ps_codec_obj,
31360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                void *pv_api_ip,
31370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                void *pv_api_op)
31380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
31390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 ret = IV_SUCCESS;
31400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
31410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ivd_set_display_frame_ip_t *ps_dec_disp_ip;
31420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ivd_set_display_frame_op_t *ps_dec_disp_op;
31430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
31440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 i;
31450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
31460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    codec_t *ps_codec = (codec_t *)(ps_codec_obj->pv_codec_handle);
31470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
31480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_dec_disp_ip = (ivd_set_display_frame_ip_t *)pv_api_ip;
31490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_dec_disp_op = (ivd_set_display_frame_op_t *)pv_api_op;
31500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
31510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_num_disp_bufs = 0;
31520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ps_codec->i4_share_disp_buf)
31530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
31540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        UWORD32 num_bufs = ps_dec_disp_ip->num_disp_bufs;
31550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pic_buf_t *ps_pic_buf;
31560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        UWORD8 *pu1_buf;
31570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 buf_ret;
31580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 strd;
31590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        strd = ps_codec->i4_strd;
31600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(0 == strd)
31610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            strd = ps_codec->i4_max_wd + PAD_WD;
31620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        num_bufs = MIN(num_bufs, BUF_MGR_MAX_CNT);
31630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->i4_num_disp_bufs = num_bufs;
31640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
31650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_pic_buf = (pic_buf_t *)ps_codec->ps_pic_buf;
31660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(i = 0; i < (WORD32)num_bufs; i++)
31670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
31680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_buf =  ps_dec_disp_ip->s_disp_buffer[i].pu1_bufs[0];
31690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_pic_buf->pu1_luma = pu1_buf + strd * PAD_TOP + PAD_LEFT;
31700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3171221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy            if(ps_codec->e_chroma_fmt == IV_YUV_420P)
3172221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy            {
3173221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy                pu1_buf =  ps_codec->pu1_cur_chroma_ref_buf;
3174221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy                ps_codec->pu1_cur_chroma_ref_buf += strd * (ps_codec->i4_ht / 2 + PAD_HT / 2);
3175221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy                ps_codec->i4_remaining_pic_buf_size -= strd * (ps_codec->i4_ht / 2 + PAD_HT / 2);
3176221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy
3177221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy                if(0 > ps_codec->i4_remaining_pic_buf_size)
3178221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy                {
3179221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy                    ps_codec->i4_error_code = IHEVCD_BUF_MGR_ERROR;
3180221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy                    return IHEVCD_BUF_MGR_ERROR;
3181221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy                }
3182221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy
3183221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy            }
3184221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy            else
3185221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy            {
3186221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy                /* For YUV 420SP case use display buffer itself as chroma ref buffer */
3187221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy                pu1_buf =  ps_dec_disp_ip->s_disp_buffer[i].pu1_bufs[1];
3188221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy            }
3189221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy
31900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_pic_buf->pu1_chroma = pu1_buf + strd * (PAD_TOP / 2) + PAD_LEFT;
31910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
31920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            buf_ret = ihevc_buf_mgr_add((buf_mgr_t *)ps_codec->pv_pic_buf_mgr, ps_pic_buf, i);
31930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
31940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(0 != buf_ret)
31950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
31960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_codec->i4_error_code = IHEVCD_BUF_MGR_ERROR;
31970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return IHEVCD_BUF_MGR_ERROR;
31980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
31990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
32000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Mark pic buf as needed for display */
32010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* This ensures that till the buffer is explicitly passed to the codec,
32020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar             * application owns the buffer. Decoder is allowed to use a buffer only
32030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar             * when application sends it through fill this buffer call in OMX
32040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar             */
32050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ihevc_buf_mgr_set_status((buf_mgr_t *)ps_codec->pv_pic_buf_mgr, i, BUF_MGR_DISP);
32060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
32070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_pic_buf++;
32080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3209221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy            /* Store display buffers in codec context. Needed for 420p output */
3210221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy            memcpy(&ps_codec->s_disp_buffer[ps_codec->i4_share_disp_buf_cnt],
3211221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy                   &ps_dec_disp_ip->s_disp_buffer[i],
3212221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy                   sizeof(ps_dec_disp_ip->s_disp_buffer[i]));
3213221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy
3214221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy            ps_codec->i4_share_disp_buf_cnt++;
3215221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy
32160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
32170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
32180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
32190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_dec_disp_op->u4_error_code = 0;
32200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return ret;
32210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
32220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
32230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
32240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
32250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
32260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
32270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
32280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Sets the decoder in flush mode. Decoder will come out of  flush only
32290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* after returning all the buffers or at reset
32300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
32310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
32320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Sets the decoder in flush mode
32330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
32340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_codec_obj
32350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to codec object at API level
32360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
32370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pv_api_ip
32380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to input argument structure
32390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
32400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pv_api_op
32410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to output argument structure
32420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
32430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns  Status
32440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
32450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
32460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
32470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
32480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
32490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
32500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWORD32 ihevcd_set_flush_mode(iv_obj_t *ps_codec_obj,
32510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                             void *pv_api_ip,
32520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                             void *pv_api_op)
32530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
32540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
32550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    codec_t *ps_codec;
32560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ivd_ctl_flush_op_t *ps_ctl_op = (ivd_ctl_flush_op_t *)pv_api_op;
32570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UNUSED(pv_api_ip);
32580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec = (codec_t *)(ps_codec_obj->pv_codec_handle);
32590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
32600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Signal flush frame control call */
32610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_flush_mode = 1;
32620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
32630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_ctl_op->u4_error_code = 0;
32640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
32650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Set pic count to zero, so that decoder starts buffering again */
32660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* once it comes out of flush mode */
32670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->u4_pic_cnt = 0;
32680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->u4_disp_cnt = 0;
32690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return IV_SUCCESS;
32700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
32710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
32720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
32730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
32740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
32750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
32760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
32770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
32780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Gets decoder status and buffer requirements
32790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
32800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
32810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Gets the decoder status
32820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
32830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_codec_obj
32840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to codec object at API level
32850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
32860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pv_api_ip
32870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to input argument structure
32880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
32890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pv_api_op
32900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to output argument structure
32910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
32920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns  Status
32930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
32940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
32950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
32960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
32970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
32980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
32990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
33000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWORD32 ihevcd_get_status(iv_obj_t *ps_codec_obj,
33010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                         void *pv_api_ip,
33020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                         void *pv_api_op)
33030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
33040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
33050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 i;
33060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    codec_t *ps_codec;
33070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 wd, ht;
33080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ivd_ctl_getstatus_op_t *ps_ctl_op = (ivd_ctl_getstatus_op_t *)pv_api_op;
33090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
33100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UNUSED(pv_api_ip);
33110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
33120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_ctl_op->u4_error_code = 0;
33130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
33140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec = (codec_t *)(ps_codec_obj->pv_codec_handle);
33150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
33160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_ctl_op->u4_min_num_in_bufs = MIN_IN_BUFS;
33170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ps_codec->e_chroma_fmt == IV_YUV_420P)
33180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_num_out_bufs = MIN_OUT_BUFS_420;
33190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else if(ps_codec->e_chroma_fmt == IV_YUV_422ILE)
33200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_num_out_bufs = MIN_OUT_BUFS_422ILE;
33210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else if(ps_codec->e_chroma_fmt == IV_RGB_565)
33220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_num_out_bufs = MIN_OUT_BUFS_RGB565;
33230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else if(ps_codec->e_chroma_fmt == IV_RGBA_8888)
33240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_num_out_bufs = MIN_OUT_BUFS_RGBA8888;
33250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else if((ps_codec->e_chroma_fmt == IV_YUV_420SP_UV)
33260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    || (ps_codec->e_chroma_fmt == IV_YUV_420SP_VU))
33270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_num_out_bufs = MIN_OUT_BUFS_420SP;
33280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
33290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_ctl_op->u4_num_disp_bufs = 1;
33300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
33310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    for(i = 0; i < (WORD32)ps_ctl_op->u4_min_num_in_bufs; i++)
33320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
33330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_in_buf_size[i] = MAX((ps_codec->i4_wd * ps_codec->i4_ht), MIN_BITSBUF_SIZE);
33340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
33350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
33360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    wd = ps_codec->i4_wd;
33370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ht = ps_codec->i4_ht;
33380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
33390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ps_codec->i4_sps_done)
33400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
33410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(0 == ps_codec->i4_share_disp_buf)
33420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
33430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            wd = ps_codec->i4_disp_wd;
33440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ht = ps_codec->i4_disp_ht;
33450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
33460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
33470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else
33480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
33490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            wd = ps_codec->i4_disp_strd;
33500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ht = ps_codec->i4_ht + PAD_HT;
33510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
33520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
33530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else
33540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
3355707042fda96ebede81408b854385173483798bcdHarish Mahendrakar        if(0 == ps_codec->i4_share_disp_buf)
3356707042fda96ebede81408b854385173483798bcdHarish Mahendrakar        {
3357707042fda96ebede81408b854385173483798bcdHarish Mahendrakar            wd = ps_codec->i4_new_max_wd;
3358707042fda96ebede81408b854385173483798bcdHarish Mahendrakar            ht = ps_codec->i4_new_max_ht;
3359707042fda96ebede81408b854385173483798bcdHarish Mahendrakar        }
3360707042fda96ebede81408b854385173483798bcdHarish Mahendrakar        else
33610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
33620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            wd = ALIGN32(wd + PAD_WD);
33630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ht += PAD_HT;
33640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
33650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
33660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
33670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ps_codec->i4_disp_strd > wd)
33680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        wd = ps_codec->i4_disp_strd;
33690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
33700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(0 == ps_codec->i4_share_disp_buf)
33710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_num_disp_bufs = 1;
33720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else
33730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
33740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 pic_size;
33750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 max_dpb_size;
33760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
33770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(ps_codec->i4_sps_done)
33780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
33790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            sps_t *ps_sps = (ps_codec->s_parse.ps_sps_base + ps_codec->i4_sps_id);
33800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 reorder_pic_cnt;
33810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 ref_pic_cnt;
33820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 level;
33830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
33840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            reorder_pic_cnt = MIN(ps_sps->ai1_sps_max_num_reorder_pics[0], ps_codec->i4_init_num_reorder);
33850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pic_size = ps_sps->i2_pic_width_in_luma_samples * ps_sps->i2_pic_height_in_luma_samples;
33860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
33870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            level = ps_codec->i4_init_level;
33880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            max_dpb_size = ihevcd_get_dpb_size(level, pic_size);
33890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ref_pic_cnt = max_dpb_size;
33900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_ctl_op->u4_num_disp_bufs = reorder_pic_cnt;
33910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
33920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_ctl_op->u4_num_disp_bufs += ref_pic_cnt + 1;
33930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
33940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
33950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else
33960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
33970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pic_size = ps_codec->i4_max_wd * ps_codec->i4_max_ht;
33980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            max_dpb_size = ihevcd_get_dpb_size(ps_codec->i4_init_level, pic_size);
33990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_ctl_op->u4_num_disp_bufs = 2 * max_dpb_size;
34000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
34010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_ctl_op->u4_num_disp_bufs = MIN(ps_ctl_op->u4_num_disp_bufs,
3402707042fda96ebede81408b854385173483798bcdHarish Mahendrakar                            (UWORD32)(ps_codec->i4_init_num_ref + ps_codec->i4_init_num_reorder + 1));
34030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
34040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
34050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
34060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_num_disp_bufs = MIN(
34070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_ctl_op->u4_num_disp_bufs, 32);
34080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
34090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
34100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /*!*/
34110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ps_codec->e_chroma_fmt == IV_YUV_420P)
34120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
34130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_out_buf_size[0] = (wd * ht);
34140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_out_buf_size[1] = (wd * ht) >> 2;
34150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_out_buf_size[2] = (wd * ht) >> 2;
34160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
34170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else if(ps_codec->e_chroma_fmt == IV_YUV_422ILE)
34180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
34190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_out_buf_size[0] = (wd * ht) * 2;
34200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_out_buf_size[1] =
34210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_ctl_op->u4_min_out_buf_size[2] = 0;
34220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
34230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else if(ps_codec->e_chroma_fmt == IV_RGB_565)
34240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
34250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_out_buf_size[0] = (wd * ht) * 2;
34260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_out_buf_size[1] =
34270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_ctl_op->u4_min_out_buf_size[2] = 0;
34280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
34290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else if(ps_codec->e_chroma_fmt == IV_RGBA_8888)
34300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
34310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_out_buf_size[0] = (wd * ht) * 4;
34320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_out_buf_size[1] =
34330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_ctl_op->u4_min_out_buf_size[2] = 0;
34340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
34350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else if((ps_codec->e_chroma_fmt == IV_YUV_420SP_UV)
34360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    || (ps_codec->e_chroma_fmt == IV_YUV_420SP_VU))
34370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
34380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_out_buf_size[0] = (wd * ht);
34390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_out_buf_size[1] = (wd * ht) >> 1;
34400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_out_buf_size[2] = 0;
34410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
34420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_ctl_op->u4_pic_ht = ht;
34430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_ctl_op->u4_pic_wd = wd;
34440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_ctl_op->u4_frame_rate = 30000;
34450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_ctl_op->u4_bit_rate = 1000000;
34460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_ctl_op->e_content_type = IV_PROGRESSIVE;
34470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_ctl_op->e_output_chroma_format = ps_codec->e_chroma_fmt;
34480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_num_disp_bufs = ps_ctl_op->u4_num_disp_bufs;
3449707042fda96ebede81408b854385173483798bcdHarish Mahendrakar
3450707042fda96ebede81408b854385173483798bcdHarish Mahendrakar    if(ps_ctl_op->u4_size == sizeof(ihevcd_cxa_ctl_getstatus_op_t))
3451707042fda96ebede81408b854385173483798bcdHarish Mahendrakar    {
3452707042fda96ebede81408b854385173483798bcdHarish Mahendrakar        ihevcd_cxa_ctl_getstatus_op_t *ps_ext_ctl_op = (ihevcd_cxa_ctl_getstatus_op_t *)ps_ctl_op;
3453707042fda96ebede81408b854385173483798bcdHarish Mahendrakar        ps_ext_ctl_op->u4_coded_pic_wd = ps_codec->i4_wd;
3454707042fda96ebede81408b854385173483798bcdHarish Mahendrakar        ps_ext_ctl_op->u4_coded_pic_wd = ps_codec->i4_ht;
3455707042fda96ebede81408b854385173483798bcdHarish Mahendrakar    }
34560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return IV_SUCCESS;
34570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
34580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
34590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
34600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
34610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
34620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Gets decoder buffer requirements
34630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
34640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
34650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Gets the decoder buffer requirements. If called before  header decoder,
34660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* buffer requirements are based on max_wd  and max_ht else actual width and
34670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* height will be used
34680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
34690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_codec_obj
34700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to codec object at API level
34710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
34720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pv_api_ip
34730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to input argument structure
34740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
34750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pv_api_op
34760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to output argument structure
34770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
34780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns  Status
34790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
34800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
34810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
34820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
34830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
34840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
34850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWORD32 ihevcd_get_buf_info(iv_obj_t *ps_codec_obj,
34860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                           void *pv_api_ip,
34870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                           void *pv_api_op)
34880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
34890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
34900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    codec_t *ps_codec;
34910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32 i = 0;
34920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 wd, ht;
34930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ivd_ctl_getbufinfo_op_t *ps_ctl_op =
34940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    (ivd_ctl_getbufinfo_op_t *)pv_api_op;
34950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
34960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UNUSED(pv_api_ip);
34970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_ctl_op->u4_error_code = 0;
34980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
34990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec = (codec_t *)(ps_codec_obj->pv_codec_handle);
35000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
35010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_ctl_op->u4_min_num_in_bufs = MIN_IN_BUFS;
35020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ps_codec->e_chroma_fmt == IV_YUV_420P)
35030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_num_out_bufs = MIN_OUT_BUFS_420;
35040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else if(ps_codec->e_chroma_fmt == IV_YUV_422ILE)
35050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_num_out_bufs = MIN_OUT_BUFS_422ILE;
35060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else if(ps_codec->e_chroma_fmt == IV_RGB_565)
35070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_num_out_bufs = MIN_OUT_BUFS_RGB565;
35080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else if(ps_codec->e_chroma_fmt == IV_RGBA_8888)
35090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_num_out_bufs = MIN_OUT_BUFS_RGBA8888;
35100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else if((ps_codec->e_chroma_fmt == IV_YUV_420SP_UV)
35110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    || (ps_codec->e_chroma_fmt == IV_YUV_420SP_VU))
35120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_num_out_bufs = MIN_OUT_BUFS_420SP;
35130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
35140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_ctl_op->u4_num_disp_bufs = 1;
35150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
35160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    for(i = 0; i < ps_ctl_op->u4_min_num_in_bufs; i++)
35170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
35180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_in_buf_size[i] = MAX((ps_codec->i4_wd * ps_codec->i4_ht), MIN_BITSBUF_SIZE);
35190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
35200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
35210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    wd = ps_codec->i4_max_wd;
35220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ht = ps_codec->i4_max_ht;
35230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
35240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ps_codec->i4_sps_done)
35250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
35260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(0 == ps_codec->i4_share_disp_buf)
35270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
35280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            wd = ps_codec->i4_disp_wd;
35290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ht = ps_codec->i4_disp_ht;
35300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
35310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
35320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else
35330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
35340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            wd = ps_codec->i4_disp_strd;
35350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ht = ps_codec->i4_ht + PAD_HT;
35360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
35370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
35380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else
35390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
35400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(1 == ps_codec->i4_share_disp_buf)
35410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
35420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            wd = ALIGN32(wd + PAD_WD);
35430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ht += PAD_HT;
35440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
35450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
35460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
35470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ps_codec->i4_disp_strd > wd)
35480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        wd = ps_codec->i4_disp_strd;
35490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
35500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(0 == ps_codec->i4_share_disp_buf)
35510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_num_disp_bufs = 1;
35520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else
35530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
35540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 pic_size;
35550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 max_dpb_size;
35560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
35570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(ps_codec->i4_sps_done)
35580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
35590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            sps_t *ps_sps = (ps_codec->s_parse.ps_sps_base + ps_codec->i4_sps_id);
35600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 reorder_pic_cnt;
35610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 ref_pic_cnt;
35620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 level;
35630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
35640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            reorder_pic_cnt = MIN(ps_sps->ai1_sps_max_num_reorder_pics[0], ps_codec->i4_init_num_reorder);
35650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pic_size = ps_sps->i2_pic_width_in_luma_samples * ps_sps->i2_pic_height_in_luma_samples;
35660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
35670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            level = ps_codec->i4_init_level;
35680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            max_dpb_size = ihevcd_get_dpb_size(level, pic_size);
35690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ref_pic_cnt = max_dpb_size;
35700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_ctl_op->u4_num_disp_bufs = reorder_pic_cnt;
35710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
35720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_ctl_op->u4_num_disp_bufs += ref_pic_cnt + 1;
35730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
35740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
35750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else
35760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
35770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pic_size = ps_codec->i4_max_wd * ps_codec->i4_max_ht;
35780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            max_dpb_size = ihevcd_get_dpb_size(ps_codec->i4_init_level, pic_size);
35790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_ctl_op->u4_num_disp_bufs = 2 * max_dpb_size;
35800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
35810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_ctl_op->u4_num_disp_bufs = MIN(ps_ctl_op->u4_num_disp_bufs,
3582707042fda96ebede81408b854385173483798bcdHarish Mahendrakar                            (UWORD32)(ps_codec->i4_init_num_ref + ps_codec->i4_init_num_reorder + 1));
35830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
35840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
35850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
35860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_num_disp_bufs = MIN(
35870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_ctl_op->u4_num_disp_bufs, 32);
35880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
35890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
35900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
35910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /*!*/
35920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ps_codec->e_chroma_fmt == IV_YUV_420P)
35930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
35940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_out_buf_size[0] = (wd * ht);
35950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_out_buf_size[1] = (wd * ht) >> 2;
35960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_out_buf_size[2] = (wd * ht) >> 2;
35970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
35980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else if(ps_codec->e_chroma_fmt == IV_YUV_422ILE)
35990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
36000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_out_buf_size[0] = (wd * ht) * 2;
36010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_out_buf_size[1] =
36020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_ctl_op->u4_min_out_buf_size[2] = 0;
36030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
36040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else if(ps_codec->e_chroma_fmt == IV_RGB_565)
36050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
36060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_out_buf_size[0] = (wd * ht) * 2;
36070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_out_buf_size[1] =
36080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_ctl_op->u4_min_out_buf_size[2] = 0;
36090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
36100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else if(ps_codec->e_chroma_fmt == IV_RGBA_8888)
36110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
36120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_out_buf_size[0] = (wd * ht) * 4;
36130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_out_buf_size[1] =
36140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_ctl_op->u4_min_out_buf_size[2] = 0;
36150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
36160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else if((ps_codec->e_chroma_fmt == IV_YUV_420SP_UV)
36170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    || (ps_codec->e_chroma_fmt == IV_YUV_420SP_VU))
36180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
36190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_out_buf_size[0] = (wd * ht);
36200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_out_buf_size[1] = (wd * ht) >> 1;
36210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_min_out_buf_size[2] = 0;
36220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
36230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_num_disp_bufs = ps_ctl_op->u4_num_disp_bufs;
36240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
36250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return IV_SUCCESS;
36260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
36270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
36280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
36290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
36300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
36310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
36320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
36330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Sets dynamic parameters
36340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
36350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
36360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Sets dynamic parameters. Note Frame skip, decode header  mode are dynamic
36370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Dynamic change in stride is not  supported
36380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
36390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_codec_obj
36400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to codec object at API level
36410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
36420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pv_api_ip
36430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to input argument structure
36440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
36450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pv_api_op
36460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to output argument structure
36470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
36480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns  Status
36490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
36500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
36510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
36520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
36530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
36540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
36550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWORD32 ihevcd_set_params(iv_obj_t *ps_codec_obj,
36560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                         void *pv_api_ip,
36570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                         void *pv_api_op)
36580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
36590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
36600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    codec_t *ps_codec;
36610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 ret = IV_SUCCESS;
36620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 strd;
36630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ivd_ctl_set_config_ip_t *s_ctl_dynparams_ip =
36640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    (ivd_ctl_set_config_ip_t *)pv_api_ip;
36650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ivd_ctl_set_config_op_t *s_ctl_dynparams_op =
36660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    (ivd_ctl_set_config_op_t *)pv_api_op;
36670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
36680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec = (codec_t *)(ps_codec_obj->pv_codec_handle);
36690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
36700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    s_ctl_dynparams_op->u4_error_code = 0;
36710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
36720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->e_pic_skip_mode = s_ctl_dynparams_ip->e_frm_skip_mode;
36730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
36740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(s_ctl_dynparams_ip->e_frm_skip_mode != IVD_SKIP_NONE)
36750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
36760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
36770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if((s_ctl_dynparams_ip->e_frm_skip_mode != IVD_SKIP_P) &&
36780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar           (s_ctl_dynparams_ip->e_frm_skip_mode != IVD_SKIP_B) &&
36790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar           (s_ctl_dynparams_ip->e_frm_skip_mode != IVD_SKIP_PB))
36800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
36810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            s_ctl_dynparams_op->u4_error_code = (1 << IVD_UNSUPPORTEDPARAM);
36820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ret = IV_FAIL;
36830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
36840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
36850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
36860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    strd = ps_codec->i4_disp_strd;
36870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(1 == ps_codec->i4_share_disp_buf)
36880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
36890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        strd = ps_codec->i4_strd;
36900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
36910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
36920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
36930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if((-1 != (WORD32)s_ctl_dynparams_ip->u4_disp_wd) &&
36940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    (0  != s_ctl_dynparams_ip->u4_disp_wd) &&
36950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    (0  != strd) &&
36960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ((WORD32)s_ctl_dynparams_ip->u4_disp_wd < strd))
36970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
36980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        s_ctl_dynparams_op->u4_error_code |= (1 << IVD_UNSUPPORTEDPARAM);
36990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        s_ctl_dynparams_op->u4_error_code |= IHEVCD_INVALID_DISP_STRD;
37000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ret = IV_FAIL;
37010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
37020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else
37030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
37040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if((WORD32)s_ctl_dynparams_ip->u4_disp_wd >= ps_codec->i4_wd)
37050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
37060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            strd = s_ctl_dynparams_ip->u4_disp_wd;
37070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
3708221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy        else if(0 == ps_codec->i4_sps_done)
37090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
37100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            strd = s_ctl_dynparams_ip->u4_disp_wd;
37110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
37120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else if(s_ctl_dynparams_ip->u4_disp_wd == 0)
37130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
37140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            strd = ps_codec->i4_disp_strd;
37150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
37160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else
37170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
37180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            strd = 0;
37190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            s_ctl_dynparams_op->u4_error_code |= (1 << IVD_UNSUPPORTEDPARAM);
37200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            s_ctl_dynparams_op->u4_error_code |= IHEVCD_INVALID_DISP_STRD;
37210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ret = IV_FAIL;
37220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
37230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
37240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
37250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_disp_strd = strd;
37260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(1 == ps_codec->i4_share_disp_buf)
37270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
37280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->i4_strd = strd;
37290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
37300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
37310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(s_ctl_dynparams_ip->e_vid_dec_mode == IVD_DECODE_FRAME)
37320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->i4_header_mode = 0;
37330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else if(s_ctl_dynparams_ip->e_vid_dec_mode == IVD_DECODE_HEADER)
37340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->i4_header_mode = 1;
37350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else
37360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
37370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
37380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        s_ctl_dynparams_op->u4_error_code = (1 << IVD_UNSUPPORTEDPARAM);
37390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->i4_header_mode = 1;
37400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ret = IV_FAIL;
37410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
37420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
37430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
37440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return ret;
37450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
37460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
37470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
37480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
37490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
37500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
37510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Resets the decoder state
37520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
37530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
37540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Resets the decoder state by calling ihevcd_init()
37550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
37560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_codec_obj
37570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to codec object at API level
37580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
37590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pv_api_ip
37600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to input argument structure
37610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
37620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pv_api_op
37630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to output argument structure
37640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
37650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns  Status
37660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
37670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
37680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
37690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
37700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
37710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
37720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWORD32 ihevcd_reset(iv_obj_t *ps_codec_obj, void *pv_api_ip, void *pv_api_op)
37730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
37740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    codec_t *ps_codec;
37750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ivd_ctl_reset_op_t *s_ctl_reset_op = (ivd_ctl_reset_op_t *)pv_api_op;
37760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UNUSED(pv_api_ip);
37770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec = (codec_t *)(ps_codec_obj->pv_codec_handle);
37780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
37790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ps_codec != NULL)
37800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
37810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        DEBUG("\nReset called \n");
37820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ihevcd_init(ps_codec);
37830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
37840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else
37850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
37860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        DEBUG("\nReset called without Initializing the decoder\n");
37870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        s_ctl_reset_op->u4_error_code = IHEVCD_INIT_NOT_DONE;
37880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
37890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
37900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return IV_SUCCESS;
37910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
37920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
37930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
37940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
37950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
37960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
37970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Releases display buffer from application to codec  to signal to the codec
37980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* that it can write to this buffer  if required. Till release is called,
37990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* codec can not write  to this buffer
38000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
38010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
38020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Marks the buffer as display done
38030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
38040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_codec_obj
38050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to codec object at API level
38060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
38070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pv_api_ip
38080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to input argument structure
38090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
38100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pv_api_op
38110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to output argument structure
38120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
38130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns  Status
38140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
38150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
38160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
38170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
38180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
38190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
38200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
38210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWORD32 ihevcd_rel_display_frame(iv_obj_t *ps_codec_obj,
38220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                void *pv_api_ip,
38230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                void *pv_api_op)
38240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
38250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
38260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ivd_rel_display_frame_ip_t *ps_dec_rel_disp_ip;
38270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ivd_rel_display_frame_op_t *ps_dec_rel_disp_op;
38280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
38290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    codec_t *ps_codec = (codec_t *)ps_codec_obj->pv_codec_handle;
38300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
38310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_dec_rel_disp_ip = (ivd_rel_display_frame_ip_t *)pv_api_ip;
38320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_dec_rel_disp_op = (ivd_rel_display_frame_op_t *)pv_api_op;
38330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
38340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UNUSED(ps_dec_rel_disp_op);
38350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
38360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(0 == ps_codec->i4_share_disp_buf)
38370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
38380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        return IV_SUCCESS;
38390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
38400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
38410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ihevc_buf_mgr_release((buf_mgr_t *)ps_codec->pv_pic_buf_mgr, ps_dec_rel_disp_ip->u4_disp_buf_id, BUF_MGR_DISP);
38420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
38430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return IV_SUCCESS;
38440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
38450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
38460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
38470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
38480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
38490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Sets degrade params
38500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
38510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
38520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Sets degrade params.
38530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Refer to ihevcd_cxa_ctl_degrade_ip_t definition for details
38540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
38550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_codec_obj
38560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to codec object at API level
38570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
38580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pv_api_ip
38590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to input argument structure
38600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
38610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pv_api_op
38620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to output argument structure
38630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
38640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns  Status
38650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
38660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
38670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
38680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
38690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
38700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
38710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
38720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWORD32 ihevcd_set_degrade(iv_obj_t *ps_codec_obj,
38730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                          void *pv_api_ip,
38740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                          void *pv_api_op)
38750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
38760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ihevcd_cxa_ctl_degrade_ip_t *ps_ip;
38770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ihevcd_cxa_ctl_degrade_op_t *ps_op;
38780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    codec_t *ps_codec = (codec_t *)ps_codec_obj->pv_codec_handle;
38790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
38800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_ip = (ihevcd_cxa_ctl_degrade_ip_t *)pv_api_ip;
38810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op = (ihevcd_cxa_ctl_degrade_op_t *)pv_api_op;
38820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
38830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_degrade_type = ps_ip->i4_degrade_type;
38840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_nondegrade_interval = ps_ip->i4_nondegrade_interval;
38850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_degrade_pics = ps_ip->i4_degrade_pics;
38860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
38870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u4_error_code = 0;
38880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_degrade_pic_cnt = 0;
38890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
38900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return IV_SUCCESS;
38910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
38920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
38930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
38940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
38950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
38960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
38970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
38980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Gets frame dimensions/offsets
38990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
39000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
39010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Gets frame buffer chararacteristics such a x & y offsets  display and
39020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* buffer dimensions
39030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
39040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_codec_obj
39050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to codec object at API level
39060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
39070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pv_api_ip
39080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to input argument structure
39090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
39100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pv_api_op
39110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to output argument structure
39120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
39130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns  Status
39140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
39150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
39160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
39170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
39180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
39190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
39200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
39210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWORD32 ihevcd_get_frame_dimensions(iv_obj_t *ps_codec_obj,
39220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   void *pv_api_ip,
39230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                   void *pv_api_op)
39240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
39250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ihevcd_cxa_ctl_get_frame_dimensions_ip_t *ps_ip;
39260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ihevcd_cxa_ctl_get_frame_dimensions_op_t *ps_op;
39270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    codec_t *ps_codec = (codec_t *)ps_codec_obj->pv_codec_handle;
39280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 disp_wd, disp_ht, buffer_wd, buffer_ht, x_offset, y_offset;
39290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_ip = (ihevcd_cxa_ctl_get_frame_dimensions_ip_t *)pv_api_ip;
39300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op = (ihevcd_cxa_ctl_get_frame_dimensions_op_t *)pv_api_op;
39310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UNUSED(ps_ip);
39320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ps_codec->i4_sps_done)
39330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
39340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        disp_wd = ps_codec->i4_disp_wd;
39350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        disp_ht = ps_codec->i4_disp_ht;
39360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
39370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(0 == ps_codec->i4_share_disp_buf)
39380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
39390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            buffer_wd = disp_wd;
39400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            buffer_ht = disp_ht;
39410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
39420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else
39430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
39440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            buffer_wd = ps_codec->i4_strd;
39450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            buffer_ht = ps_codec->i4_ht + PAD_HT;
39460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
39470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
39480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else
39490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
39500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
39510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        disp_wd = ps_codec->i4_max_wd;
39520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        disp_ht = ps_codec->i4_max_ht;
39530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
39540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(0 == ps_codec->i4_share_disp_buf)
39550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
39560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            buffer_wd = disp_wd;
39570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            buffer_ht = disp_ht;
39580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
39590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        else
39600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
39610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            buffer_wd = ALIGN16(disp_wd) + PAD_WD;
39620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            buffer_ht = ALIGN16(disp_ht) + PAD_HT;
39630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
39640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
39650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
39660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ps_codec->i4_strd > buffer_wd)
39670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        buffer_wd = ps_codec->i4_strd;
39680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
39690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(0 == ps_codec->i4_share_disp_buf)
39700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
39710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        x_offset = 0;
39720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        y_offset = 0;
39730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
39740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else
39750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
39760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        y_offset = PAD_TOP;
39770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        x_offset = PAD_LEFT;
39780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
39790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
39800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u4_disp_wd[0] = disp_wd;
39810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u4_disp_ht[0] = disp_ht;
39820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u4_buffer_wd[0] = buffer_wd;
39830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u4_buffer_ht[0] = buffer_ht;
39840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u4_x_offset[0] = x_offset;
39850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u4_y_offset[0] = y_offset;
39860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
39870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u4_disp_wd[1] = ps_op->u4_disp_wd[2] = ((ps_op->u4_disp_wd[0] + 1)
39880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    >> 1);
39890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u4_disp_ht[1] = ps_op->u4_disp_ht[2] = ((ps_op->u4_disp_ht[0] + 1)
39900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    >> 1);
39910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u4_buffer_wd[1] = ps_op->u4_buffer_wd[2] = (ps_op->u4_buffer_wd[0]
39920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    >> 1);
39930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u4_buffer_ht[1] = ps_op->u4_buffer_ht[2] = (ps_op->u4_buffer_ht[0]
39940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    >> 1);
39950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u4_x_offset[1] = ps_op->u4_x_offset[2] = (ps_op->u4_x_offset[0]
39960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    >> 1);
39970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u4_y_offset[1] = ps_op->u4_y_offset[2] = (ps_op->u4_y_offset[0]
39980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    >> 1);
39990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
40000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if((ps_codec->e_chroma_fmt == IV_YUV_420SP_UV)
40010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    || (ps_codec->e_chroma_fmt == IV_YUV_420SP_VU))
40020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
40030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_op->u4_disp_wd[2] = 0;
40040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_op->u4_disp_ht[2] = 0;
40050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_op->u4_buffer_wd[2] = 0;
40060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_op->u4_buffer_ht[2] = 0;
40070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_op->u4_x_offset[2] = 0;
40080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_op->u4_y_offset[2] = 0;
40090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
40100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_op->u4_disp_wd[1] <<= 1;
40110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_op->u4_buffer_wd[1] <<= 1;
40120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_op->u4_x_offset[1] <<= 1;
40130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
40140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
40150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return IV_SUCCESS;
40160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
40170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
40180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
40190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
40200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
40210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
40220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
40230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
40240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Gets vui parameters
40250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
40260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
40270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Gets VUI parameters
40280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
40290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_codec_obj
40300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to codec object at API level
40310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
40320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pv_api_ip
40330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to input argument structure
40340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
40350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pv_api_op
40360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to output argument structure
40370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
40380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns  Status
40390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
40400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
40410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
40420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
40430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
40440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
40450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWORD32 ihevcd_get_vui_params(iv_obj_t *ps_codec_obj,
40460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                             void *pv_api_ip,
40470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                             void *pv_api_op)
40480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
40490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ihevcd_cxa_ctl_get_vui_params_ip_t *ps_ip;
40500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ihevcd_cxa_ctl_get_vui_params_op_t *ps_op;
40510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    codec_t *ps_codec = (codec_t *)ps_codec_obj->pv_codec_handle;
40520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    sps_t *ps_sps;
40530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    vui_t *ps_vui;
40540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 i;
40550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
40560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_ip = (ihevcd_cxa_ctl_get_vui_params_ip_t *)pv_api_ip;
40570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op = (ihevcd_cxa_ctl_get_vui_params_op_t *)pv_api_op;
40580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
40590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(0 == ps_codec->i4_sps_done)
40600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
40610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_op->u4_error_code = IHEVCD_VUI_PARAMS_NOT_FOUND;
40620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        return IV_FAIL;
40630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
40640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
40650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_sps = ps_codec->s_parse.ps_sps;
40660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(0 == ps_sps->i1_sps_valid || 0 == ps_sps->i1_vui_parameters_present_flag)
40670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
40680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        WORD32 sps_idx = 0;
40690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_sps = ps_codec->ps_sps_base;
40700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
40710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        while((0 == ps_sps->i1_sps_valid) || (0 == ps_sps->i1_vui_parameters_present_flag))
40720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
40730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            sps_idx++;
40740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_sps++;
40750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
40760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(sps_idx == MAX_SPS_CNT - 1)
40770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
40780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->u4_error_code = IHEVCD_VUI_PARAMS_NOT_FOUND;
40790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                return IV_FAIL;
40800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
40810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
40820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
40830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
40840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_vui = &ps_sps->s_vui_parameters;
40850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UNUSED(ps_ip);
40860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
40870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_aspect_ratio_info_present_flag         =  ps_vui->u1_aspect_ratio_info_present_flag;
40880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_aspect_ratio_idc                       =  ps_vui->u1_aspect_ratio_idc;
40890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u2_sar_width                              =  ps_vui->u2_sar_width;
40900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u2_sar_height                             =  ps_vui->u2_sar_height;
40910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_overscan_info_present_flag             =  ps_vui->u1_overscan_info_present_flag;
40920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_overscan_appropriate_flag              =  ps_vui->u1_overscan_appropriate_flag;
40930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_video_signal_type_present_flag         =  ps_vui->u1_video_signal_type_present_flag;
40940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_video_format                           =  ps_vui->u1_video_format;
40950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_video_full_range_flag                  =  ps_vui->u1_video_full_range_flag;
40960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_colour_description_present_flag        =  ps_vui->u1_colour_description_present_flag;
40970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_colour_primaries                       =  ps_vui->u1_colour_primaries;
40980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_transfer_characteristics               =  ps_vui->u1_transfer_characteristics;
40990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_matrix_coefficients                    =  ps_vui->u1_matrix_coefficients;
41000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_chroma_loc_info_present_flag           =  ps_vui->u1_chroma_loc_info_present_flag;
41010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_chroma_sample_loc_type_top_field       =  ps_vui->u1_chroma_sample_loc_type_top_field;
41020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_chroma_sample_loc_type_bottom_field    =  ps_vui->u1_chroma_sample_loc_type_bottom_field;
41030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_neutral_chroma_indication_flag         =  ps_vui->u1_neutral_chroma_indication_flag;
41040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_field_seq_flag                         =  ps_vui->u1_field_seq_flag;
41050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_frame_field_info_present_flag          =  ps_vui->u1_frame_field_info_present_flag;
41060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_default_display_window_flag            =  ps_vui->u1_default_display_window_flag;
41070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u4_def_disp_win_left_offset               =  ps_vui->u4_def_disp_win_left_offset;
41080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u4_def_disp_win_right_offset              =  ps_vui->u4_def_disp_win_right_offset;
41090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u4_def_disp_win_top_offset                =  ps_vui->u4_def_disp_win_top_offset;
41100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u4_def_disp_win_bottom_offset             =  ps_vui->u4_def_disp_win_bottom_offset;
41110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_vui_hrd_parameters_present_flag        =  ps_vui->u1_vui_hrd_parameters_present_flag;
41120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_vui_timing_info_present_flag           =  ps_vui->u1_vui_timing_info_present_flag;
41130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u4_vui_num_units_in_tick                  =  ps_vui->u4_vui_num_units_in_tick;
41140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u4_vui_time_scale                         =  ps_vui->u4_vui_time_scale;
41150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_poc_proportional_to_timing_flag        =  ps_vui->u1_poc_proportional_to_timing_flag;
41160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_num_ticks_poc_diff_one_minus1          =  ps_vui->u1_num_ticks_poc_diff_one_minus1;
41170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_bitstream_restriction_flag             =  ps_vui->u1_bitstream_restriction_flag;
41180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_tiles_fixed_structure_flag             =  ps_vui->u1_tiles_fixed_structure_flag;
41190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_motion_vectors_over_pic_boundaries_flag =  ps_vui->u1_motion_vectors_over_pic_boundaries_flag;
41200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_restricted_ref_pic_lists_flag          =  ps_vui->u1_restricted_ref_pic_lists_flag;
41210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u4_min_spatial_segmentation_idc           =  ps_vui->u4_min_spatial_segmentation_idc;
41220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_max_bytes_per_pic_denom                =  ps_vui->u1_max_bytes_per_pic_denom;
41230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_max_bits_per_mincu_denom               =  ps_vui->u1_max_bits_per_mincu_denom;
41240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_log2_max_mv_length_horizontal          =  ps_vui->u1_log2_max_mv_length_horizontal;
41250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_log2_max_mv_length_vertical            =  ps_vui->u1_log2_max_mv_length_vertical;
41260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
41270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
41280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* HRD parameters */
41290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_timing_info_present_flag                         =    ps_vui->s_vui_hrd_parameters.u1_timing_info_present_flag;
41300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u4_num_units_in_tick                                =    ps_vui->s_vui_hrd_parameters.u4_num_units_in_tick;
41310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u4_time_scale                                       =    ps_vui->s_vui_hrd_parameters.u4_time_scale;
41320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_nal_hrd_parameters_present_flag                  =    ps_vui->s_vui_hrd_parameters.u1_nal_hrd_parameters_present_flag;
41330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_vcl_hrd_parameters_present_flag                  =    ps_vui->s_vui_hrd_parameters.u1_vcl_hrd_parameters_present_flag;
41340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_cpbdpb_delays_present_flag                       =    ps_vui->s_vui_hrd_parameters.u1_cpbdpb_delays_present_flag;
41350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_sub_pic_cpb_params_present_flag                  =    ps_vui->s_vui_hrd_parameters.u1_sub_pic_cpb_params_present_flag;
41360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_tick_divisor_minus2                              =    ps_vui->s_vui_hrd_parameters.u1_tick_divisor_minus2;
41370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_du_cpb_removal_delay_increment_length_minus1     =    ps_vui->s_vui_hrd_parameters.u1_du_cpb_removal_delay_increment_length_minus1;
41380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_sub_pic_cpb_params_in_pic_timing_sei_flag        =    ps_vui->s_vui_hrd_parameters.u1_sub_pic_cpb_params_in_pic_timing_sei_flag;
41390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_dpb_output_delay_du_length_minus1                =    ps_vui->s_vui_hrd_parameters.u1_dpb_output_delay_du_length_minus1;
41400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u4_bit_rate_scale                                   =    ps_vui->s_vui_hrd_parameters.u4_bit_rate_scale;
41410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u4_cpb_size_scale                                   =    ps_vui->s_vui_hrd_parameters.u4_cpb_size_scale;
41420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u4_cpb_size_du_scale                                =    ps_vui->s_vui_hrd_parameters.u4_cpb_size_du_scale;
41430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_initial_cpb_removal_delay_length_minus1          =    ps_vui->s_vui_hrd_parameters.u1_initial_cpb_removal_delay_length_minus1;
41440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_au_cpb_removal_delay_length_minus1               =    ps_vui->s_vui_hrd_parameters.u1_au_cpb_removal_delay_length_minus1;
41450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u1_dpb_output_delay_length_minus1                   =    ps_vui->s_vui_hrd_parameters.u1_dpb_output_delay_length_minus1;
41460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
41470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    for(i = 0; i < 6; i++)
41480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
41490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_op->au1_fixed_pic_rate_general_flag[i]                  =    ps_vui->s_vui_hrd_parameters.au1_fixed_pic_rate_general_flag[i];
41500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_op->au1_fixed_pic_rate_within_cvs_flag[i]               =    ps_vui->s_vui_hrd_parameters.au1_fixed_pic_rate_within_cvs_flag[i];
41510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_op->au1_elemental_duration_in_tc_minus1[i]              =    ps_vui->s_vui_hrd_parameters.au1_elemental_duration_in_tc_minus1[i];
41520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_op->au1_low_delay_hrd_flag[i]                           =    ps_vui->s_vui_hrd_parameters.au1_low_delay_hrd_flag[i];
41530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_op->au1_cpb_cnt_minus1[i]                               =    ps_vui->s_vui_hrd_parameters.au1_cpb_cnt_minus1[i];
41540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
41550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
41560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
41570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return IV_SUCCESS;
41580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
41590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
41600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
41610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
41620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
41630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
41640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Sets Processor type
41650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
41660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
41670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Sets Processor type
41680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
41690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_codec_obj
41700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to codec object at API level
41710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
41720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pv_api_ip
41730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to input argument structure
41740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
41750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pv_api_op
41760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to output argument structure
41770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
41780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns  Status
41790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
41800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
41810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
41820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
41830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
41840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
41850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
41860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWORD32 ihevcd_set_processor(iv_obj_t *ps_codec_obj,
41870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            void *pv_api_ip,
41880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            void *pv_api_op)
41890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
41900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ihevcd_cxa_ctl_set_processor_ip_t *ps_ip;
41910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ihevcd_cxa_ctl_set_processor_op_t *ps_op;
41920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    codec_t *ps_codec = (codec_t *)ps_codec_obj->pv_codec_handle;
41930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
41940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_ip = (ihevcd_cxa_ctl_set_processor_ip_t *)pv_api_ip;
41950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op = (ihevcd_cxa_ctl_set_processor_op_t *)pv_api_op;
41960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
41970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->e_processor_arch = (IVD_ARCH_T)ps_ip->u4_arch;
41980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->e_processor_soc = (IVD_SOC_T)ps_ip->u4_soc;
41990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
42000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ihevcd_init_function_ptr(ps_codec);
42010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
42020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ihevcd_update_function_ptr(ps_codec);
42030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
42040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ps_codec->e_processor_soc && (ps_codec->e_processor_soc <= SOC_HISI_37X))
42050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
42060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* 8th bit indicates if format conversion is to be done ahead */
42070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(ps_codec->e_processor_soc & 0x80)
42080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->u4_enable_fmt_conv_ahead = 1;
42090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
42100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Lower 7 bit indicate NCTB - if non-zero */
42110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->e_processor_soc &= 0x7F;
42120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
42130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        if(ps_codec->e_processor_soc)
42140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_codec->u4_nctb = ps_codec->e_processor_soc;
42150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
42160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
42170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
42180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
42190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if((ps_codec->e_processor_soc == SOC_HISI_37X) && (ps_codec->i4_num_cores == 2))
42200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
42210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_codec->u4_nctb = 2;
42220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
42230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
42240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
42250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u4_error_code = 0;
42260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return IV_SUCCESS;
42270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
42280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
42290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
42300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
42310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
42320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
42330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Sets Number of cores that can be used in the codec. Codec uses these many
42340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* threads for decoding
42350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
42360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
42370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Sets number of cores
42380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
42390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_codec_obj
42400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to codec object at API level
42410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
42420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pv_api_ip
42430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to input argument structure
42440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
42450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pv_api_op
42460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to output argument structure
42470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
42480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns  Status
42490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
42500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
42510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
42520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
42530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
42540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
42550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
42560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWORD32 ihevcd_set_num_cores(iv_obj_t *ps_codec_obj,
42570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            void *pv_api_ip,
42580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            void *pv_api_op)
42590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
42600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ihevcd_cxa_ctl_set_num_cores_ip_t *ps_ip;
42610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ihevcd_cxa_ctl_set_num_cores_op_t *ps_op;
42620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    codec_t *ps_codec = (codec_t *)ps_codec_obj->pv_codec_handle;
42630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
42640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_ip = (ihevcd_cxa_ctl_set_num_cores_ip_t *)pv_api_ip;
42650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op = (ihevcd_cxa_ctl_set_num_cores_op_t *)pv_api_op;
42660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
42670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#ifdef MULTICORE
42680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_num_cores = ps_ip->u4_num_cores;
42690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#else
42700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->i4_num_cores = 1;
42710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#endif
42720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_op->u4_error_code = 0;
42730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return IV_SUCCESS;
42740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
42750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
42760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
42770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
42780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
42790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Codec control call
42800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
42810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
42820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Codec control call which in turn calls appropriate calls  based on
42830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* subcommand
42840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
42850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_codec_obj
42860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to codec object at API level
42870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
42880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pv_api_ip
42890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to input argument structure
42900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
42910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pv_api_op
42920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to output argument structure
42930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
42940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns  Status
42950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
42960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
42970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
42980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
42990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
43000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
43010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
43020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWORD32 ihevcd_ctl(iv_obj_t *ps_codec_obj, void *pv_api_ip, void *pv_api_op)
43030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
43040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ivd_ctl_set_config_ip_t *ps_ctl_ip;
43050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ivd_ctl_set_config_op_t *ps_ctl_op;
43060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 ret = 0;
43070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 subcommand;
43080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    codec_t *ps_codec = (codec_t *)ps_codec_obj->pv_codec_handle;
43090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
43100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_ctl_ip = (ivd_ctl_set_config_ip_t *)pv_api_ip;
43110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_ctl_op = (ivd_ctl_set_config_op_t *)pv_api_op;
43120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
43130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ps_codec->i4_init_done != 1)
43140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
43150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_error_code |= 1 << IVD_FATALERROR;
43160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ps_ctl_op->u4_error_code |= IHEVCD_INIT_NOT_DONE;
43170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        return IV_FAIL;
43180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
43190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    subcommand = ps_ctl_ip->e_sub_cmd;
43200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
43210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    switch(subcommand)
43220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
43230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IVD_CMD_CTL_GETPARAMS:
43240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ret = ihevcd_get_status(ps_codec_obj, (void *)pv_api_ip,
43250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    (void *)pv_api_op);
43260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
43270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IVD_CMD_CTL_SETPARAMS:
43280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ret = ihevcd_set_params(ps_codec_obj, (void *)pv_api_ip,
43290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    (void *)pv_api_op);
43300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
43310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IVD_CMD_CTL_RESET:
43320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ret = ihevcd_reset(ps_codec_obj, (void *)pv_api_ip,
43330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                               (void *)pv_api_op);
43340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
43350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IVD_CMD_CTL_SETDEFAULT:
43360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
43370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ivd_ctl_set_config_op_t *s_ctl_dynparams_op =
43380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            (ivd_ctl_set_config_op_t *)pv_api_op;
43390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
43400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ret = ihevcd_set_default_params(ps_codec);
43410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(IV_SUCCESS == ret)
43420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                s_ctl_dynparams_op->u4_error_code = 0;
43430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
43440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
43450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IVD_CMD_CTL_FLUSH:
43460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ret = ihevcd_set_flush_mode(ps_codec_obj, (void *)pv_api_ip,
43470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        (void *)pv_api_op);
43480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
43490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IVD_CMD_CTL_GETBUFINFO:
43500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ret = ihevcd_get_buf_info(ps_codec_obj, (void *)pv_api_ip,
43510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                      (void *)pv_api_op);
43520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
43530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IVD_CMD_CTL_GETVERSION:
43540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
43550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ivd_ctl_getversioninfo_ip_t *ps_ip;
43560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ivd_ctl_getversioninfo_op_t *ps_op;
43570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            IV_API_CALL_STATUS_T ret;
43580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_ip = (ivd_ctl_getversioninfo_ip_t *)pv_api_ip;
43590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_op = (ivd_ctl_getversioninfo_op_t *)pv_api_op;
43600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
43610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_op->u4_error_code = IV_SUCCESS;
43620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
43630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((WORD32)ps_ip->u4_version_buffer_size <= 0)
43640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
43650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ps_op->u4_error_code = IHEVCD_CXA_VERS_BUF_INSUFFICIENT;
43660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ret = IV_FAIL;
43670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
43680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            else
43690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
43700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                ret = ihevcd_get_version((CHAR *)ps_ip->pv_version_buffer,
43710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                         ps_ip->u4_version_buffer_size);
43720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(ret != IV_SUCCESS)
43730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
43740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_op->u4_error_code = IHEVCD_CXA_VERS_BUF_INSUFFICIENT;
43750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ret = IV_FAIL;
43760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
43770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
43780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
43790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
43800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IHEVCD_CXA_CMD_CTL_DEGRADE:
43810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ret = ihevcd_set_degrade(ps_codec_obj, (void *)pv_api_ip,
43820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            (void *)pv_api_op);
43830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
43840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IHEVCD_CXA_CMD_CTL_SET_NUM_CORES:
43850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ret = ihevcd_set_num_cores(ps_codec_obj, (void *)pv_api_ip,
43860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                       (void *)pv_api_op);
43870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
43880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IHEVCD_CXA_CMD_CTL_GET_BUFFER_DIMENSIONS:
43890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ret = ihevcd_get_frame_dimensions(ps_codec_obj, (void *)pv_api_ip,
43900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                              (void *)pv_api_op);
43910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
43920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IHEVCD_CXA_CMD_CTL_GET_VUI_PARAMS:
43930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ret = ihevcd_get_vui_params(ps_codec_obj, (void *)pv_api_ip,
43940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        (void *)pv_api_op);
43950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
43960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IHEVCD_CXA_CMD_CTL_SET_PROCESSOR:
43970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ret = ihevcd_set_processor(ps_codec_obj, (void *)pv_api_ip,
43980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            (void *)pv_api_op);
43990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
44000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        default:
44010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            DEBUG("\nDo nothing\n");
44020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
44030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
44040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
44050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return ret;
44060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
44070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
44080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
44090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
44100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
44110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
44120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Codecs entry point function. All the function calls to  the codec are
44130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* done using this function with different  values specified in command
44140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
44150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
44160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Arguments are tested for validity and then based on the  command
44170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* appropriate function is called
44180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
44190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_handle
44200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  API level handle for codec
44210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
44220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] pv_api_ip
44230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Input argument structure
44240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
44250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[out] pv_api_op
44260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Output argument structure
44270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
44280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns  Status of the function corresponding to command
44290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
44300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
44310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
44320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
44330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
44340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
44350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarIV_API_CALL_STATUS_T ihevcd_cxa_api_function(iv_obj_t *ps_handle,
44360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                             void *pv_api_ip,
44370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                             void *pv_api_op)
44380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
44390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 command;
44400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32 *pu4_ptr_cmd;
44410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 ret = 0;
44420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    IV_API_CALL_STATUS_T e_status;
44430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    e_status = api_check_struct_sanity(ps_handle, pv_api_ip, pv_api_op);
44440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
44450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(e_status != IV_SUCCESS)
44460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
44470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        DEBUG("error code = %d\n", *((UWORD32 *)pv_api_op + 1));
44480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        return IV_FAIL;
44490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
44500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
44510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    pu4_ptr_cmd = (UWORD32 *)pv_api_ip;
44520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    pu4_ptr_cmd++;
44530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
44540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    command = *pu4_ptr_cmd;
44550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
44560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    switch(command)
44570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
44580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IV_CMD_GET_NUM_MEM_REC:
44590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ret = ihevcd_get_num_rec((void *)pv_api_ip, (void *)pv_api_op);
44600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
44610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
44620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IV_CMD_FILL_NUM_MEM_REC:
44630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
44640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ret = ihevcd_fill_num_mem_rec((void *)pv_api_ip, (void *)pv_api_op);
44650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
44660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IV_CMD_INIT:
44670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ret = ihevcd_init_mem_rec(ps_handle, (void *)pv_api_ip,
44680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                      (void *)pv_api_op);
44690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
44700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
44710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IVD_CMD_VIDEO_DECODE:
44720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ret = ihevcd_decode(ps_handle, (void *)pv_api_ip, (void *)pv_api_op);
44730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
44740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
44750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IVD_CMD_GET_DISPLAY_FRAME:
44760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            //ret = ihevcd_get_display_frame(ps_handle,(void *)pv_api_ip,(void *)pv_api_op);
44770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
44780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
44790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IVD_CMD_SET_DISPLAY_FRAME:
44800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ret = ihevcd_set_display_frame(ps_handle, (void *)pv_api_ip,
44810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                           (void *)pv_api_op);
44820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
44830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
44840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
44850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IVD_CMD_REL_DISPLAY_FRAME:
44860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ret = ihevcd_rel_display_frame(ps_handle, (void *)pv_api_ip,
44870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                           (void *)pv_api_op);
44880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
44890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
44900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IV_CMD_RETRIEVE_MEMREC:
44910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ret = ihevcd_retrieve_memrec(ps_handle, (void *)pv_api_ip,
44920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                         (void *)pv_api_op);
44930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
44940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
44950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case IVD_CMD_VIDEO_CTL:
44960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ret = ihevcd_ctl(ps_handle, (void *)pv_api_ip, (void *)pv_api_op);
44970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
44980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        default:
44990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ret = IV_FAIL;
45000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
45010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
45020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
45030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    return (IV_API_CALL_STATUS_T)ret;
45040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
45050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4506