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