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_decode.c 220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @brief 240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Contains codecs main decode function 250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @author 270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Harish 280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @par List of Functions: 300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * - fill_outargs() 310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * - ihevcd_decode 320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @remarks 330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * None 340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ******************************************************************************* 360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */ 370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/ 380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* File Includes */ 390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/ 400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <stdio.h> 410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <stddef.h> 420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <stdlib.h> 430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <string.h> 440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <assert.h> 450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_typedefs.h" 470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "iv.h" 480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ivd.h" 490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_cxa.h" 500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ithread.h" 510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_defs.h" 530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_debug.h" 540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_structs.h" 550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_macros.h" 560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_platform_macros.h" 570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_cabac_tables.h" 580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_disp_mgr.h" 590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_buf_mgr.h" 600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_dpb_mgr.h" 610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_error.h" 620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_defs.h" 640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_function_selector.h" 650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_structs.h" 660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_error.h" 670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_nal.h" 680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_bitstream.h" 690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_fmt_conv.h" 700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_job_queue.h" 710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_debug.h" 720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_process_slice.h" 730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_ittiam_logo.h" 740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_profile.h" 750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define NUM_FRAMES_LIMIT_ENABLED 0 770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#if NUM_FRAMES_LIMIT_ENABLED 79221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy#define NUM_FRAMES_LIMIT 10000 800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#else 810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define NUM_FRAMES_LIMIT 0x7FFFFFFF 820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#endif 830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 841ffb19f7ae4c9622a270ad87f950ce8ffe622783Naveen Kumar PIHEVCD_ERROR_T ihevcd_check_out_buf_size(codec_t *ps_codec); 850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarIHEVCD_ERROR_T ihevcd_fmt_conv(codec_t *ps_codec, 860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar process_ctxt_t *ps_proc, 870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_y_dst, 880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_u_dst, 890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_v_dst, 900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 cur_row, 910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 num_rows); 920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWORD32 ihevcd_init(codec_t *ps_codec); 934d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar 944d73ab3ec9823d009fa01beea164c0036b5215b9Harish MahendrakarWORD32 ihevcd_allocate_dynamic_bufs(codec_t *ps_codec); 954d73ab3ec9823d009fa01beea164c0036b5215b9Harish MahendrakarWORD32 ihevcd_free_dynamic_bufs(codec_t *ps_codec); 960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/ 970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* Function Prototypes */ 980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/ 990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 1020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ******************************************************************************* 1030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 1040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @brief Fills output arguments for decode process 1050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 1060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @par Description 1070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Fills elements in the output structure based on the current state 1080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 1090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] ps_codec 1100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Codec context 1110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 1120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] ps_dec_ip 1130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Pointer to input structure 1140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 1150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] ps_dec_op 1160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Pointer to output structure 1170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 1180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @returns none 1190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 1200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @remarks 1210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 1220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ******************************************************************************* 1230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */ 1240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarstatic UWORD32 ihevcd_map_error(IHEVCD_ERROR_T e_error) 1250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 1260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 error_code = 0; 1270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar error_code = e_error; 1280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar switch(error_code) 1290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case IHEVCD_SUCCESS : 1310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar break; 1320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case IHEVCD_INIT_NOT_DONE: 1330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case IHEVCD_LEVEL_UNSUPPORTED: 1340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case IHEVCD_NUM_REF_UNSUPPORTED: 1350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case IHEVCD_NUM_REORDER_UNSUPPORTED: 1360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case IHEVCD_NUM_EXTRA_DISP_UNSUPPORTED: 1370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case IHEVCD_INSUFFICIENT_MEM_MVBANK: 1380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case IHEVCD_INSUFFICIENT_MEM_PICBUF: 1390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar error_code |= 1 << IVD_FATALERROR; 1400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar break; 1410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case IHEVCD_INVALID_DISP_STRD: 1420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case IHEVCD_CXA_VERS_BUF_INSUFFICIENT: 1430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case IHEVCD_UNSUPPORTED_VPS_ID: 1440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case IHEVCD_UNSUPPORTED_SPS_ID: 1450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case IHEVCD_UNSUPPORTED_PPS_ID: 1460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case IHEVCD_UNSUPPORTED_CHROMA_FMT_IDC: 1470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case IHEVCD_UNSUPPORTED_BIT_DEPTH: 1480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case IHEVCD_BUF_MGR_ERROR: 1490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case IHEVCD_NO_FREE_MVBANK: 1500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case IHEVCD_NO_FREE_PICBUF: 1510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case IHEVCD_SLICE_IN_HEADER_MODE: 1520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar case IHEVCD_END_OF_SEQUENCE: 1530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar break; 1540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar default: 1550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar break; 1560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 1570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return error_code; 1580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 1590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 1600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ******************************************************************************* 1610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 1620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @brief Fills output arguments for decode process 1630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 1640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @par Description 1650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Fills elements in the output structure based on the current state 1660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 1670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] ps_codec 1680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Codec context 1690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 1700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] ps_dec_ip 1710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Pointer to input structure 1720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 1730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] ps_dec_op 1740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Pointer to output structure 1750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 1760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @returns none 1770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 1780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @remarks 1790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 1800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ******************************************************************************* 1810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */ 1820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarstatic void ihevcd_fill_outargs(codec_t *ps_codec, 1830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ivd_video_decode_ip_t *ps_dec_ip, 1840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ivd_video_decode_op_t *ps_dec_op) 1850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 1860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_error_code = ihevcd_map_error((IHEVCD_ERROR_T)ps_codec->i4_error_code); 1880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_num_bytes_consumed = ps_dec_ip->u4_num_Bytes 1890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar - ps_codec->i4_bytes_remaining; 1904d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar if(ps_codec->i4_sps_done) 191221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy { 192221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy ps_dec_op->u4_pic_wd = ps_codec->i4_disp_wd; 193221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy ps_dec_op->u4_pic_ht = ps_codec->i4_disp_ht; 194221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy } 1950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 1960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_pic_wd = 0; 1980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_pic_ht = 0; 1990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->e_pic_type = ps_codec->e_dec_pic_type; 2020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_frame_decoded_flag = ps_codec->i4_pic_present; 2030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_new_seq = 0; 2040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_output_present = 0; 2060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_progressive_frame_flag = 1; 207613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar if(ps_codec->i4_sps_done) 208613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 209613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar sps_t *ps_sps = (ps_codec->s_parse.ps_sps_base + ps_codec->i4_sps_id); 210613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar profile_tier_lvl_info_t *ps_ptl; 211613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_ptl = &ps_sps->s_ptl; 212613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar if((0 == ps_ptl->s_ptl_gen.i1_general_progressive_source_flag) && 213613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar (1 == ps_ptl->s_ptl_gen.i1_general_interlaced_source_flag)) 214613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 215613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_dec_op->u4_progressive_frame_flag = 0; 216613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 217613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 218613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar 2190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_is_ref_flag = 1; 2200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->e_output_format = ps_codec->e_chroma_fmt; 2210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_is_ref_flag = 1; 2220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->e4_fld_type = IV_FLD_TYPE_DEFAULT; 2240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_ts = (UWORD32)(-1); 2260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_disp_buf_id = ps_codec->i4_disp_buf_id; 2270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_codec->i4_flush_mode) 2280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_num_bytes_consumed = 0; 2300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*In the case of flush ,since no frame is decoded set pic type as invalid*/ 2310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_is_ref_flag = 0; 2320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->e_pic_type = IV_NA_FRAME; 2330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_frame_decoded_flag = 0; 2340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* If there is a display buffer */ 2370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_codec->ps_disp_buf) 2380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pic_buf_t *ps_disp_buf = ps_codec->ps_disp_buf; 240613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar sei_params_t *ps_sei = &ps_disp_buf->s_sei_params; 2410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 242613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar if(ps_sei->i1_sei_parameters_present_flag && 243613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_sei->i1_pic_timing_params_present_flag) 244613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 245613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar UWORD32 u4_pic_struct; 246613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar u4_pic_struct = ps_sei->s_pic_timing_sei_params.u4_pic_struct; 247613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar switch(u4_pic_struct) 248613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar { 249613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar case 1: 250613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_dec_op->e4_fld_type = IV_TOP_FLD; 251613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_dec_op->u4_progressive_frame_flag = 0; 252613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar break; 253613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar case 2: 254613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_dec_op->e4_fld_type = IV_BOT_FLD; 255613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_dec_op->u4_progressive_frame_flag = 0; 256613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar break; 257613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar case 0: 258613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar default: 259613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_dec_op->e4_fld_type = IV_FLD_TYPE_DEFAULT; 260613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar ps_dec_op->u4_progressive_frame_flag = 1; 261613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar break; 262613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 263613c712d196d00b6aec71d0b316427ab3e947012Harish Mahendrakar } 2640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_output_present = 1; 2650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_ts = ps_disp_buf->u4_ts; 2660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((ps_codec->i4_flush_mode == 0) && (ps_codec->s_parse.i4_end_of_frame == 0)) 2670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_output_present = 0; 2680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->s_disp_frm_buf.u4_y_wd = ps_codec->i4_disp_wd; 2690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->s_disp_frm_buf.u4_y_ht = ps_codec->i4_disp_ht; 2700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_codec->i4_share_disp_buf) 2720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->s_disp_frm_buf.pv_y_buf = ps_disp_buf->pu1_luma; 2740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_codec->e_chroma_fmt != IV_YUV_420P) 2750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->s_disp_frm_buf.pv_u_buf = ps_disp_buf->pu1_chroma; 2770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->s_disp_frm_buf.pv_v_buf = NULL; 2780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 2800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2811b02194ad7f00cf277bbad52053cc2323aac0542Harish Mahendrakar WORD32 i; 2821b02194ad7f00cf277bbad52053cc2323aac0542Harish Mahendrakar UWORD8 *pu1_u_dst = NULL, *pu1_v_dst = NULL; 2831b02194ad7f00cf277bbad52053cc2323aac0542Harish Mahendrakar for(i = 0; i < ps_codec->i4_share_disp_buf_cnt; i++) 2841b02194ad7f00cf277bbad52053cc2323aac0542Harish Mahendrakar { 2851b02194ad7f00cf277bbad52053cc2323aac0542Harish Mahendrakar WORD32 diff = ps_disp_buf->pu1_luma - ps_codec->s_disp_buffer[i].pu1_bufs[0]; 2861b02194ad7f00cf277bbad52053cc2323aac0542Harish Mahendrakar if(diff == (ps_codec->i4_strd * PAD_TOP + PAD_LEFT)) 2871b02194ad7f00cf277bbad52053cc2323aac0542Harish Mahendrakar { 2881b02194ad7f00cf277bbad52053cc2323aac0542Harish Mahendrakar pu1_u_dst = ps_codec->s_disp_buffer[i].pu1_bufs[1]; 2891b02194ad7f00cf277bbad52053cc2323aac0542Harish Mahendrakar pu1_u_dst += (ps_codec->i4_strd * PAD_TOP) / 4 + (PAD_LEFT / 2); 2900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2911b02194ad7f00cf277bbad52053cc2323aac0542Harish Mahendrakar pu1_v_dst = ps_codec->s_disp_buffer[i].pu1_bufs[2]; 2921b02194ad7f00cf277bbad52053cc2323aac0542Harish Mahendrakar pu1_v_dst += (ps_codec->i4_strd * PAD_TOP) / 4 + (PAD_LEFT / 2); 2931b02194ad7f00cf277bbad52053cc2323aac0542Harish Mahendrakar break; 2941b02194ad7f00cf277bbad52053cc2323aac0542Harish Mahendrakar } 2951b02194ad7f00cf277bbad52053cc2323aac0542Harish Mahendrakar } 2961b02194ad7f00cf277bbad52053cc2323aac0542Harish Mahendrakar ps_dec_op->s_disp_frm_buf.pv_u_buf = pu1_u_dst; 2971b02194ad7f00cf277bbad52053cc2323aac0542Harish Mahendrakar ps_dec_op->s_disp_frm_buf.pv_v_buf = pu1_v_dst; 2980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->s_disp_frm_buf.u4_y_strd = ps_codec->i4_strd; 3000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 3020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->s_disp_frm_buf.pv_y_buf = 3040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_ip->s_out_buffer.pu1_bufs[0]; 3050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->s_disp_frm_buf.pv_u_buf = 3060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_ip->s_out_buffer.pu1_bufs[1]; 3070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->s_disp_frm_buf.pv_v_buf = 3080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_ip->s_out_buffer.pu1_bufs[2]; 3090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->s_disp_frm_buf.u4_y_strd = ps_codec->i4_disp_strd; 3100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((IV_YUV_420SP_VU == ps_codec->e_chroma_fmt) 3130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar || (IV_YUV_420SP_UV == ps_codec->e_chroma_fmt)) 3140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->s_disp_frm_buf.u4_u_strd = 3160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->s_disp_frm_buf.u4_y_strd; 3170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->s_disp_frm_buf.u4_v_strd = 0; 3180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->s_disp_frm_buf.u4_u_wd = 3190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->s_disp_frm_buf.u4_y_wd; 3200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->s_disp_frm_buf.u4_v_wd = 0; 3210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->s_disp_frm_buf.u4_u_ht = 3220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->s_disp_frm_buf.u4_y_ht / 2; 3230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->s_disp_frm_buf.u4_v_ht = 0; 3240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else if(IV_YUV_420P == ps_codec->e_chroma_fmt) 3260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->s_disp_frm_buf.u4_u_strd = 3280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->s_disp_frm_buf.u4_y_strd / 2; 3290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->s_disp_frm_buf.u4_v_strd = 3300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->s_disp_frm_buf.u4_y_strd / 2; 3310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->s_disp_frm_buf.u4_u_wd = 3320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->s_disp_frm_buf.u4_y_wd / 2; 3330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->s_disp_frm_buf.u4_v_wd = 3340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->s_disp_frm_buf.u4_y_wd / 2; 3350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->s_disp_frm_buf.u4_u_ht = 3360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->s_disp_frm_buf.u4_y_ht / 2; 3370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->s_disp_frm_buf.u4_v_ht = 3380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->s_disp_frm_buf.u4_y_ht / 2; 3390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else if(ps_codec->i4_flush_mode) 3430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_error_code = IHEVCD_END_OF_SEQUENCE; 3450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Come out of flush mode */ 3460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_flush_mode = 0; 3470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 3500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 3520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ******************************************************************************* 3530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 3540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @brief 3550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Codec process call 3560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 3570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @par Description: 3580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Codec process call Tests for few error checks Handle flush and decode 3590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * header related code Parse bitstream for start codes For each NAL unit 3600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * call decode NAL function Once a complete frame is decoded (in frame 3610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * decode mode) Fill output arguments and return 3620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 3630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] ps_codec_obj 3640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Pointer to codec object at API level 3650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 3660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] pv_api_ip 3670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Pointer to input argument structure 3680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 3690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] pv_api_op 3700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Pointer to output argument structure 3710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 3720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @returns Status 3730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 3740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @remarks 3750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 3760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 3770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ******************************************************************************* 3780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */ 3790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWORD32 ihevcd_decode(iv_obj_t *ps_codec_obj, void *pv_api_ip, void *pv_api_op) 3800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 3810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ret = IV_SUCCESS; 3820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar codec_t *ps_codec = (codec_t *)(ps_codec_obj->pv_codec_handle); 3830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ivd_video_decode_ip_t *ps_dec_ip; 3840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ivd_video_decode_op_t *ps_dec_op; 3850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 proc_idx = 0; 3870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 prev_proc_idx = 0; 3880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Initialize error code */ 3900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_error_code = 0; 3910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_ip = (ivd_video_decode_ip_t *)pv_api_ip; 3930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op = (ivd_video_decode_op_t *)pv_api_op; 3940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 395221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy { 396221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy UWORD32 u4_size = ps_dec_op->u4_size; 397221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy memset(ps_dec_op, 0, sizeof(ivd_video_decode_op_t)); 398221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy ps_dec_op->u4_size = u4_size; //Restore size field 399221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy } 4000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_codec->i4_init_done != 1) 4010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_error_code |= 1 << IVD_FATALERROR; 4030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_error_code |= IHEVCD_INIT_NOT_DONE; 4040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return IV_FAIL; 4050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_codec->u4_pic_cnt >= NUM_FRAMES_LIMIT) 4080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_error_code |= 1 << IVD_FATALERROR; 4100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_error_code |= IHEVCD_NUM_FRAMES_LIMIT_REACHED; 4110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return IV_FAIL; 4120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* If reset flag is set, flush the existing buffers */ 4150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_codec->i4_reset_flag) 4160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_flush_mode = 1; 4180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Data memory barries instruction,so that bitstream write by the application is complete*/ 4210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar //arm_dsb(); 4220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* In case the decoder is not in flush mode check for input buffer validity */ 4230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_codec->i4_flush_mode) 4240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_dec_ip->pv_stream_buffer == NULL) 4260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM; 4280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_error_code |= IVD_DEC_FRM_BS_BUF_NULL; 4290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return IV_FAIL; 4300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_dec_ip->u4_num_Bytes <= MIN_START_CODE_LEN) 4320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((WORD32)ps_dec_ip->u4_num_Bytes > 0) 4340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_num_bytes_consumed = ps_dec_ip->u4_num_Bytes; 4350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 4360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_num_bytes_consumed = 0; 4370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM; 4390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_error_code |= IVD_DEC_NUMBYTES_INV; 4400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return IV_FAIL; 4410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#ifdef APPLY_CONCEALMENT 4460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 num_mbs; 4480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar num_mbs = (ps_codec->i4_wd * ps_codec->i4_ht + 255) >> 8; 4500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Reset MB Count at the beginning of every process call */ 4510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->mb_count = 0; 4520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar memset(ps_codec->mb_map, 0, ((num_mbs + 7) >> 3)); 4530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#endif 4550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_codec->i4_share_disp_buf && ps_codec->i4_header_mode == 0) 4570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 i; 4590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_dec_ip->s_out_buffer.u4_num_bufs == 0) 4600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM; 4620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_error_code |= IVD_DISP_FRM_ZERO_OP_BUFS; 4630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return IV_FAIL; 4640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < ps_dec_ip->s_out_buffer.u4_num_bufs; i++) 4670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_dec_ip->s_out_buffer.pu1_bufs[i] == NULL) 4690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM; 4710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_error_code |= IVD_DISP_FRM_OP_BUF_NULL; 4720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return IV_FAIL; 4730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_dec_ip->s_out_buffer.u4_min_out_buf_size[i] == 0) 4760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM; 4780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_error_code |= IVD_DISP_FRM_ZERO_OP_BUF_SIZE; 4790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return IV_FAIL; 4800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->ps_out_buffer = &ps_dec_ip->s_out_buffer; 4850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->u4_ts = ps_dec_ip->u4_ts; 4860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_codec->i4_flush_mode) 4870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_pic_wd = ps_codec->i4_disp_wd; 4900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_pic_ht = ps_codec->i4_disp_ht; 4910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_new_seq = 0; 4930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->ps_disp_buf = (pic_buf_t *)ihevc_disp_mgr_get( 4950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (disp_mgr_t *)ps_codec->pv_disp_buf_mgr, &ps_codec->i4_disp_buf_id); 4960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* In case of non-shared mode, then convert/copy the frame to output buffer */ 4970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Only if the codec is in non-shared mode or in shared mode but needs 420P output */ 4980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((ps_codec->ps_disp_buf) 4990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar && ((0 == ps_codec->i4_share_disp_buf) 5000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar || (IV_YUV_420P 5010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar == ps_codec->e_chroma_fmt))) 5020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar process_ctxt_t *ps_proc = &ps_codec->as_process[prev_proc_idx]; 5050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_proc->i4_init_done) 5060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevcd_init_proc_ctxt(ps_proc, 0); 5080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5101ffb19f7ae4c9622a270ad87f950ce8ffe622783Naveen Kumar P /* Output buffer check */ 5111ffb19f7ae4c9622a270ad87f950ce8ffe622783Naveen Kumar P ret = ihevcd_check_out_buf_size(ps_codec); 5121ffb19f7ae4c9622a270ad87f950ce8ffe622783Naveen Kumar P RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret); 5131ffb19f7ae4c9622a270ad87f950ce8ffe622783Naveen Kumar P 5140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Set remaining number of rows to be processed */ 5150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ret = ihevcd_fmt_conv(ps_codec, &ps_codec->as_process[prev_proc_idx], 5160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_ip->s_out_buffer.pu1_bufs[0], 5170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_ip->s_out_buffer.pu1_bufs[1], 5180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_ip->s_out_buffer.pu1_bufs[2], 0, 5190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_disp_ht); 5200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_buf_mgr_release((buf_mgr_t *)ps_codec->pv_pic_buf_mgr, 5220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_disp_buf_id, BUF_MGR_DISP); 5230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevcd_fill_outargs(ps_codec, ps_dec_ip, ps_dec_op); 5260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(1 == ps_dec_op->u4_output_present) 5280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 xpos = ps_codec->i4_disp_wd - 32 - LOGO_WD; 5300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ypos = ps_codec->i4_disp_ht - 32 - LOGO_HT; 5310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ypos < 0) 5330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ypos = 0; 5340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(xpos < 0) 5360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar xpos = 0; 5370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar INSERT_LOGO(ps_dec_ip->s_out_buffer.pu1_bufs[0], 5390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_ip->s_out_buffer.pu1_bufs[1], 5400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_ip->s_out_buffer.pu1_bufs[2], ps_codec->i4_disp_strd, 5410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar xpos, 5420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ypos, 5430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->e_chroma_fmt, 5440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_disp_wd, 5450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_disp_ht); 5460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(NULL == ps_codec->ps_disp_buf) 5500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* If in flush mode and there are no more buffers to flush, 5520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * check for the reset flag and reset the decoder */ 5530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_codec->i4_reset_flag) 5540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevcd_init(ps_codec); 5560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return (IV_FAIL); 5580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return (IV_SUCCESS); 5610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* In case of shared mode, check if there is a free buffer for reconstruction */ 5640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((0 == ps_codec->i4_header_mode) && (1 == ps_codec->i4_share_disp_buf)) 5650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 buf_status; 5670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar buf_status = 1; 5680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_codec->pv_pic_buf_mgr) 5690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar buf_status = ihevc_buf_mgr_check_free((buf_mgr_t *)ps_codec->pv_pic_buf_mgr); 5700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* If there is no free buffer, then return with an error code */ 5720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == buf_status) 5730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_error_code = IVD_DEC_REF_BUF_NULL; 5750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_op->u4_error_code |= (1 << IVD_UNSUPPORTEDPARAM); 5760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return IV_FAIL; 5770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_bytes_remaining = ps_dec_ip->u4_num_Bytes; 5800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->pu1_inp_bitsbuf = (UWORD8 *)ps_dec_ip->pv_stream_buffer; 5810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_parse.i4_end_of_frame = 0; 5820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_pic_present = 0; 5840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_slice_error = 0; 5850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->ps_disp_buf = NULL; 5860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_codec->i4_num_cores > 1) 5880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ithread_set_affinity(0); 5900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar while(MIN_START_CODE_LEN < ps_codec->i4_bytes_remaining) 5920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 nal_len; 5940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 nal_ofst; 5950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 bits_len; 5960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_codec->i4_slice_error) 5980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar slice_header_t *ps_slice_hdr_next = ps_codec->s_parse.ps_slice_hdr_base + (ps_codec->s_parse.i4_cur_slice_idx & (MAX_SLICE_HDR_CNT - 1)); 6000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 next_slice_addr = ps_slice_hdr_next->i2_ctb_x + 6010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_slice_hdr_next->i2_ctb_y * ps_codec->s_parse.ps_sps->i2_pic_wd_in_ctb; 6020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_codec->s_parse.i4_next_ctb_indx == next_slice_addr) 6030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_slice_error = 0; 6040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6064d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar if(ps_codec->pu1_bitsbuf_dynamic) 6074d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar { 6084d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar ps_codec->pu1_bitsbuf = ps_codec->pu1_bitsbuf_dynamic; 6094d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar ps_codec->u4_bitsbuf_size = ps_codec->u4_bitsbuf_size_dynamic; 6104d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar } 6114d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar else 6124d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar { 6134d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar ps_codec->pu1_bitsbuf = ps_codec->pu1_bitsbuf_static; 6144d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar ps_codec->u4_bitsbuf_size = ps_codec->u4_bitsbuf_size_static; 6154d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar } 6164d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar 6170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar nal_ofst = ihevcd_nal_search_start_code(ps_codec->pu1_inp_bitsbuf, 6180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_bytes_remaining); 6190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_nal_ofst = nal_ofst; 6210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 bytes_remaining = ps_codec->i4_bytes_remaining - nal_ofst; 6230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 624707042fda96ebede81408b854385173483798bcdHarish Mahendrakar bytes_remaining = MIN((UWORD32)bytes_remaining, ps_codec->u4_bitsbuf_size); 6250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevcd_nal_remv_emuln_bytes(ps_codec->pu1_inp_bitsbuf + nal_ofst, 6260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->pu1_bitsbuf, 6270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar bytes_remaining, 6280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar &nal_len, &bits_len); 629fda5fafd411789991bfacf6884186a1d73908e05Harish Mahendrakar 630fda5fafd411789991bfacf6884186a1d73908e05Harish Mahendrakar /* Decoder may read upto 8 extra bytes at the end of frame */ 631fda5fafd411789991bfacf6884186a1d73908e05Harish Mahendrakar /* These are not used, but still set them to zero to avoid uninitialized reads */ 632fda5fafd411789991bfacf6884186a1d73908e05Harish Mahendrakar if(bits_len < (WORD32)(ps_codec->u4_bitsbuf_size - 8)) 633fda5fafd411789991bfacf6884186a1d73908e05Harish Mahendrakar { 634fda5fafd411789991bfacf6884186a1d73908e05Harish Mahendrakar memset(ps_codec->pu1_bitsbuf + bits_len, 0, 2 * sizeof(UWORD32)); 635fda5fafd411789991bfacf6884186a1d73908e05Harish Mahendrakar } 6360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* This may be used to update the offsets for tiles and entropy sync row offsets */ 6380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_num_emln_bytes = nal_len - bits_len; 6390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_nal_len = nal_len; 6400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevcd_bits_init(&ps_codec->s_parse.s_bitstrm, ps_codec->pu1_bitsbuf, 6420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar bits_len); 6430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ret = ihevcd_nal_unit(ps_codec); 6450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* If the frame is incomplete and 6470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * the bytes remaining is zero or a header is received, 6480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * complete the frame treating it to be in error */ 6490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_codec->i4_pic_present && 6500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (ps_codec->s_parse.i4_next_ctb_indx != ps_codec->s_parse.ps_sps->i4_pic_size_in_ctb)) 6510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((ps_codec->i4_bytes_remaining - (nal_len + nal_ofst) <= MIN_START_CODE_LEN) || 6530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (ps_codec->i4_header_in_slice_mode)) 6540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar slice_header_t *ps_slice_hdr_next; 6560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_parse.i4_cur_slice_idx--; 6580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_codec->s_parse.i4_cur_slice_idx < 0) 6590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_parse.i4_cur_slice_idx = 0; 6600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_slice_hdr_next = ps_codec->s_parse.ps_slice_hdr_base + ((ps_codec->s_parse.i4_cur_slice_idx + 1) & (MAX_SLICE_HDR_CNT - 1)); 6620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_slice_hdr_next->i2_ctb_x = 0; 6630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_slice_hdr_next->i2_ctb_y = ps_codec->s_parse.ps_sps->i2_pic_ht_in_ctb; 6640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_slice_error = 1; 6650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar continue; 6660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(IHEVCD_IGNORE_SLICE == ret) 6700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 671f4f3556e04a9776bcc776523ae0763e7d0d5c668Harish Mahendrakar ps_codec->s_parse.i4_cur_slice_idx = MAX(0, (ps_codec->s_parse.i4_cur_slice_idx - 1)); 6720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->pu1_inp_bitsbuf += (nal_ofst + nal_len); 6730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_bytes_remaining -= (nal_ofst + nal_len); 6740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar continue; 6760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 678221aaccb7a9b501ce16ccc1fd7f7d44a8f73cd6eNaveen Kumar Ponnusamy if((IVD_RES_CHANGED == ret) || 679f9f8d07fb83b1395af5d515bccbaed8aa6788019Harish Mahendrakar (IVD_STREAM_WIDTH_HEIGHT_NOT_SUPPORTED == ret)) 6800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar break; 6820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Update bytes remaining and bytes consumed and input bitstream pointer */ 6850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Do not consume the NAL in the following cases */ 6860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Slice header reached during header decode mode */ 6870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* TODO: Next picture's slice reached */ 6880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ret != IHEVCD_SLICE_IN_HEADER_MODE) 6890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((0 == ps_codec->i4_slice_error) || 6910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (ps_codec->i4_bytes_remaining - (nal_len + nal_ofst) <= MIN_START_CODE_LEN)) 6920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->pu1_inp_bitsbuf += (nal_ofst + nal_len); 6940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_bytes_remaining -= (nal_ofst + nal_len); 6950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ret != IHEVCD_SUCCESS) 6970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar break; 6980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_codec->s_parse.i4_end_of_frame) 7000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar break; 7010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 7020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 7030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 7040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ret = IHEVCD_SUCCESS; 7050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar break; 7060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 7070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7084d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar /* Allocate dynamic bitstream buffer once SPS is decoded */ 7094d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar if((ps_codec->u4_allocate_dynamic_done == 0) && ps_codec->i4_sps_done) 7104d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar { 7114d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar WORD32 ret; 7124d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar ret = ihevcd_allocate_dynamic_bufs(ps_codec); 7134d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar if(ret != IV_SUCCESS) 7144d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar { 7154d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar /* Free any dynamic buffers that are allocated */ 7164d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar ihevcd_free_dynamic_bufs(ps_codec); 7174d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar ps_codec->i4_error_code = IVD_MEM_ALLOC_FAILED; 7184d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar ps_dec_op->u4_error_code |= 1 << IVD_FATALERROR; 7194d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar ps_dec_op->u4_error_code |= IVD_MEM_ALLOC_FAILED; 7204d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar 7214d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar return IV_FAIL; 7224d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar } 7234d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar } 7244d73ab3ec9823d009fa01beea164c0036b5215b9Harish Mahendrakar 7250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BREAK_AFTER_SLICE_NAL(); 7260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 7270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((ps_codec->u4_pic_cnt == 0) && (ret != IHEVCD_SUCCESS)) 7290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 7300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_error_code = ret; 7310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevcd_fill_outargs(ps_codec, ps_dec_ip, ps_dec_op); 7330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return IV_FAIL; 7340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 7350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(1 == ps_codec->i4_pic_present) 7370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 7380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 i; 7390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sps_t *ps_sps = ps_codec->s_parse.ps_sps; 7400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_first_pic_done = 1; 7410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*TODO temporary fix: end_of_frame is checked before adding format conversion to job queue */ 7430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_codec->i4_num_cores > 1 && ps_codec->s_parse.i4_end_of_frame) 7440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 7450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Add job queue for format conversion / frame copy for each ctb row */ 7470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Only if the codec is in non-shared mode or in shared mode but needs 420P output */ 7480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar process_ctxt_t *ps_proc; 7490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* i4_num_cores - 1 contexts are currently being used by other threads */ 7510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_proc = &ps_codec->as_process[ps_codec->i4_num_cores - 1]; 7520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((ps_codec->ps_disp_buf) && 7540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ((0 == ps_codec->i4_share_disp_buf) || (IV_YUV_420P == ps_codec->e_chroma_fmt))) 7550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 7560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* If format conversion jobs were not issued in pic_init() add them here */ 7570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((0 == ps_codec->u4_enable_fmt_conv_ahead) || 7580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (ps_codec->i4_disp_buf_id == ps_proc->i4_cur_pic_buf_id)) 7590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < ps_sps->i2_pic_ht_in_ctb; i++) 7600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 7610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar proc_job_t s_job; 7620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar IHEVCD_ERROR_T ret; 7630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar s_job.i4_cmd = CMD_FMTCONV; 7640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar s_job.i2_ctb_cnt = 0; 7650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar s_job.i2_ctb_x = 0; 7660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar s_job.i2_ctb_y = i; 7670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar s_job.i2_slice_idx = 0; 7680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar s_job.i4_tu_coeff_data_ofst = 0; 7690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ret = ihevcd_jobq_queue((jobq_t *)ps_codec->s_parse.pv_proc_jobq, 7700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar &s_job, sizeof(proc_job_t), 1); 7710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS) 7720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return (WORD32)ret; 7730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 7740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 7750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Reached end of frame : Signal terminate */ 7760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* The terminate flag is checked only after all the jobs are dequeued */ 7770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ret = ihevcd_jobq_terminate((jobq_t *)ps_codec->s_parse.pv_proc_jobq); 7780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar while(1) 7800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 7810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar IHEVCD_ERROR_T ret; 7820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar proc_job_t s_job; 7830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar process_ctxt_t *ps_proc; 7840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* i4_num_cores - 1 contexts are currently being used by other threads */ 7860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_proc = &ps_codec->as_process[ps_codec->i4_num_cores - 1]; 7870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ret = ihevcd_jobq_dequeue((jobq_t *)ps_proc->pv_proc_jobq, &s_job, 7890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sizeof(proc_job_t), 1); 7900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((IHEVCD_ERROR_T)IHEVCD_SUCCESS != ret) 7910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar break; 7920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_proc->i4_ctb_cnt = s_job.i2_ctb_cnt; 7940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_proc->i4_ctb_x = s_job.i2_ctb_x; 7950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_proc->i4_ctb_y = s_job.i2_ctb_y; 7960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_proc->i4_cur_slice_idx = s_job.i2_slice_idx; 7970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(CMD_PROCESS == s_job.i4_cmd) 7990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevcd_init_proc_ctxt(ps_proc, s_job.i4_tu_coeff_data_ofst); 8010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevcd_process(ps_proc); 8030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else if(CMD_FMTCONV == s_job.i4_cmd) 8050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sps_t *ps_sps = ps_codec->s_parse.ps_sps; 8070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 num_rows = 1 << ps_sps->i1_log2_ctb_size; 8080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_proc->i4_init_done) 8090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevcd_init_proc_ctxt(ps_proc, 0); 8110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar num_rows = MIN(num_rows, (ps_codec->i4_disp_ht - (s_job.i2_ctb_y << ps_sps->i1_log2_ctb_size))); 8140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(num_rows < 0) 8150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar num_rows = 0; 8160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevcd_fmt_conv(ps_codec, ps_proc, 8180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_ip->s_out_buffer.pu1_bufs[0], 8190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_ip->s_out_buffer.pu1_bufs[1], 8200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_ip->s_out_buffer.pu1_bufs[2], 8210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar s_job.i2_ctb_y << ps_sps->i1_log2_ctb_size, 8220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar num_rows); 8230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* In case of non-shared mode and while running in single core mode, then convert/copy the frame to output buffer */ 8270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Only if the codec is in non-shared mode or in shared mode but needs 420P output */ 8280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else if((ps_codec->ps_disp_buf) && ((0 == ps_codec->i4_share_disp_buf) || 8290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (IV_YUV_420P == ps_codec->e_chroma_fmt)) && 8300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (ps_codec->s_parse.i4_end_of_frame)) 8310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar process_ctxt_t *ps_proc = &ps_codec->as_process[proc_idx]; 8330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Set remaining number of rows to be processed */ 8340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_fmt_conv.i4_num_rows = ps_codec->i4_disp_ht 8350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar - ps_codec->s_fmt_conv.i4_cur_row; 8360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_proc->i4_init_done) 8370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevcd_init_proc_ctxt(ps_proc, 0); 8390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_codec->s_fmt_conv.i4_num_rows < 0) 8420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_fmt_conv.i4_num_rows = 0; 8430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ret = ihevcd_fmt_conv(ps_codec, ps_proc, 8450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_ip->s_out_buffer.pu1_bufs[0], 8460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_ip->s_out_buffer.pu1_bufs[1], 8470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_ip->s_out_buffer.pu1_bufs[2], 8480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_fmt_conv.i4_cur_row, 8490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_fmt_conv.i4_num_rows); 8500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_fmt_conv.i4_cur_row += ps_codec->s_fmt_conv.i4_num_rows; 8510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar DEBUG_DUMP_MV_MAP(ps_codec); 8560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Mark MV Buf as needed for reference */ 8580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_buf_mgr_set_status((buf_mgr_t *)ps_codec->pv_mv_buf_mgr, 8590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->as_process[proc_idx].i4_cur_mv_bank_buf_id, 8600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BUF_MGR_REF); 8610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Mark pic buf as needed for reference */ 8630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_buf_mgr_set_status((buf_mgr_t *)ps_codec->pv_pic_buf_mgr, 8640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->as_process[proc_idx].i4_cur_pic_buf_id, 8650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BUF_MGR_REF); 8660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Mark pic buf as needed for display */ 8680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_buf_mgr_set_status((buf_mgr_t *)ps_codec->pv_pic_buf_mgr, 8690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->as_process[proc_idx].i4_cur_pic_buf_id, 8700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar BUF_MGR_DISP); 8710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Insert the current picture as short term reference */ 8730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_dpb_mgr_insert_ref((dpb_mgr_t *)ps_codec->pv_dpb_mgr, 8740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->as_process[proc_idx].ps_cur_pic, 8750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->as_process[proc_idx].i4_cur_pic_buf_id); 8760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* If a frame was displayed (in non-shared mode), then release it from display manager */ 8780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((0 == ps_codec->i4_share_disp_buf) && (ps_codec->ps_disp_buf)) 8790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevc_buf_mgr_release((buf_mgr_t *)ps_codec->pv_pic_buf_mgr, 8800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_disp_buf_id, BUF_MGR_DISP); 8810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Wait for threads */ 8830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < (ps_codec->i4_num_cores - 1); i++) 8840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_codec->ai4_process_thread_created[i]) 8860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ithread_join(ps_codec->apv_process_thread_handle[i], NULL); 8880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->ai4_process_thread_created[i] = 0; 8890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar DEBUG_VALIDATE_PADDED_REGION(&ps_codec->as_process[proc_idx]); 8930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_codec->u4_pic_cnt > 0) 8940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar DEBUG_DUMP_PIC_PU(ps_codec); 8960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar DEBUG_DUMP_PIC_BUFFERS(ps_codec); 8980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Increment the number of pictures decoded */ 9000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->u4_pic_cnt++; 9010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 9020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ihevcd_fill_outargs(ps_codec, ps_dec_ip, ps_dec_op); 9030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(1 == ps_dec_op->u4_output_present) 9050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 9060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 xpos = ps_codec->i4_disp_wd - 32 - LOGO_WD; 9070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ypos = ps_codec->i4_disp_ht - 32 - LOGO_HT; 9080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ypos < 0) 9100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ypos = 0; 9110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(xpos < 0) 9130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar xpos = 0; 9140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar INSERT_LOGO(ps_dec_ip->s_out_buffer.pu1_bufs[0], 9160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_ip->s_out_buffer.pu1_bufs[1], 9170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_dec_ip->s_out_buffer.pu1_bufs[2], ps_codec->i4_disp_strd, 9180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar xpos, 9190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ypos, 9200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->e_chroma_fmt, 9210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_disp_wd, 9220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->i4_disp_ht); 9230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 9240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar return ret; 9270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 9280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 929