OMX_VideoDec_Utils.c revision a7d8550490e7973b12ab6aed936182ce30f882a1
1fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* 3fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Copyright (C) Texas Instruments - http://www.ti.com/ 4fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 5fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This library is free software; you can redistribute it and/or 6fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * modify it under the terms of the GNU Lesser General Public 7fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * License as published by the Free Software Foundation; either 8fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * version 2.1 of the License, or (at your option) any later version. 9fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 10fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 11fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This library is distributed in the hope that it will be useful, 12fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * but WITHOUT ANY WARRANTY; without even the implied warranty of 13fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Lesser General Public License for more details. 15fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 16fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 17fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * You should have received a copy of the GNU Lesser General Public 18fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * License along with this library; if not, write to the Free Software 19fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 21fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ============================================================================= 22fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Texas Instruments OMAP(TM) Platform Software 23fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* (c) Copyright Texas Instruments, Incorporated. All Rights Reserved. 24fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 25fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Use of this software is controlled by the terms and conditions found 26fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* in the license agreement under which this software has been supplied. 27fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* =========================================================================== */ 28fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 29fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @file OMX_Video_Dec_Utils.c 30fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 31fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* This file implements OMX Component for MPEG-4 decoder that 32fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* is fully compliant with the Khronos OMX specification 1.0. 33fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 34fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @path $(CSLPATH)\src 35fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 36fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @rev 0.1 37fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/ 38fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* -------------------------------------------------------------------------- */ 39fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ============================================================================= 40fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 41fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! Revision History 42fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! =================================== 43fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 44fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 02-Feb-2006 mf: Revisions appear in reverse chronological order; 45fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! that is, newest first. The date format is dd-Mon-yyyy. 46fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* =========================================================================== */ 47fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 48fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ------compilation control switches ----------------------------------------*/ 49fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/******************************************************************************* 50fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* INCLUDE FILES 51fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*******************************************************************************/ 52fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ----- system and platform files -------------------------------------------*/ 53fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "OMX_VideoDecoder.h" 54fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "OMX_VideoDec_Utils.h" 55fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "OMX_VideoDec_DSP.h" 56fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "OMX_VideoDec_Thread.h" 57b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#define LOG_TAG "TI_Video_Decoder" 58fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*----------------------------------------------------------------------------*/ 59fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 60fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * VIDDEC_GetRMFrecuency() Return the value for frecuecny to use RM. 61fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 62fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*----------------------------------------------------------------------------*/ 63fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_U32 VIDDEC_GetRMFrecuency(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate) 64fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 65fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nReturnValue = VIDDEC_MPU; 66fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 67fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "+++ENTERING\n"); 68fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 69fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*resolution for greater than CIF*/ 70b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth > VIDDEC_CIF_WIDTH) || 71b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight > VIDDEC_CIF_HEIGHT)) { 72fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingAVC) { 73fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nReturnValue = VIDDEC_RM_FREC_H264_VGA; 74fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 75fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingWMV) { 76fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nReturnValue = VIDDEC_RM_FREC_WMV_VGA; 77fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 78fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG4) { 79b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ((OMX_U16)pComponentPrivate->pInPortDef->format.video.nFrameHeight > VIDDEC_D1MAX_HEIGHT || 80b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)pComponentPrivate->pInPortDef->format.video.nFrameWidth > VIDDEC_D1MAX_WIDTH) 81fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 82fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nReturnValue = VIDDEC_RM_FREC_MPEG4_720P; 83fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 84fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 85fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 86fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nReturnValue = VIDDEC_RM_FREC_MPEG4_VGA; 87fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 88fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 89fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG2) { 90fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nReturnValue = VIDDEC_RM_FREC_MPEG2_VGA; 91fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 92fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingH263) { 93fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nReturnValue = VIDDEC_RM_FREC_H263_VGA; 94fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 95fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_SPARK_CODE 96fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (VIDDEC_SPARKCHECK) { 97fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nReturnValue = VIDDEC_RM_FREC_SPARK_VGA; 98fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 99fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nReturnValue = VIDDEC_MPU; 102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*resolution from QCIF up to CIF*/ 105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth <= VIDDEC_CIF_WIDTH) && 106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth > VIDDEC_QCIF_WIDTH)) || 107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight <= VIDDEC_CIF_HEIGHT) && 108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight > VIDDEC_QCIF_HEIGHT))) { 109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingAVC) { 110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nReturnValue = VIDDEC_RM_FREC_H264_CIF; 111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingWMV) { 113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nReturnValue = VIDDEC_RM_FREC_WMV_CIF; 114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG4) { 116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nReturnValue = VIDDEC_RM_FREC_MPEG4_CIF; 117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG2) { 119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nReturnValue = VIDDEC_RM_FREC_MPEG2_CIF; 120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingH263) { 122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nReturnValue = VIDDEC_RM_FREC_H263_CIF; 123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_SPARK_CODE 125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (VIDDEC_SPARKCHECK) { 126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nReturnValue = VIDDEC_RM_FREC_SPARK_CIF; 127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nReturnValue = VIDDEC_MPU; 131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*resolution up to QCIF*/ 134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth <= VIDDEC_QCIF_WIDTH) && 135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth >= VIDDEC_MIN_WIDTH)) || 136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight <= VIDDEC_QCIF_HEIGHT) && 137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight >= VIDDEC_MIN_HEIGHT))) { 138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingAVC) { 139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nReturnValue = VIDDEC_RM_FREC_H264_QCIF; 140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingWMV) { 142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nReturnValue = VIDDEC_RM_FREC_WMV_QCIF; 143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG4) { 145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nReturnValue = VIDDEC_RM_FREC_MPEG4_QCIF; 146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG2) { 148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nReturnValue = VIDDEC_RM_FREC_MPEG2_QCIF; 149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingH263) { 151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nReturnValue = VIDDEC_RM_FREC_H263_QCIF; 152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_SPARK_CODE 154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (VIDDEC_SPARKCHECK) { 155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nReturnValue = VIDDEC_RM_FREC_SPARK_QCIF; 156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nReturnValue = VIDDEC_MPU; 160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nReturnValue = VIDDEC_MPU; 164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "Used RM Frec value = %d\n",(int)nReturnValue); 166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "Used RM Frec defaulted value = %d\n",(int)nReturnValue); 168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "---EXITING\n"); 170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return nReturnValue; 171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_Queue_Init(VIDDEC_QUEUE_TYPE *queue, VIDDEC_QUEUE_TYPES type) 175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorUndefined; 177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 count; 178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->nHead = 0; 180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->nTail = 0; 181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->nElements = 0; 182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin switch(type) 184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case VIDDEC_QUEUE_OMX_U32: 186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->Elements = (void*)malloc(VIDDEC_MAX_QUEUE_SIZE*sizeof(OMX_U32)); 187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*OMX_MALLOC_STRUCT_SIZED(queue->Elements, void, VIDDEC_MAX_QUEUE_SIZE*sizeof(OMX_U32));*/ 188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case VIDDEC_QUEUE_OMX_MARKTYPE: 190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->Elements = (void*)malloc(VIDDEC_MAX_QUEUE_SIZE*sizeof(OMX_MARKTYPE)); 191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*OMX_MALLOC_STRUCT_SIZED(queue->Elements, void, VIDDEC_MAX_QUEUE_SIZE*sizeof(OMX_MARKTYPE));*/ 192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_init(&(queue->mMutex), NULL); 196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for(count=0; count < VIDDEC_MAX_QUEUE_SIZE; count++) 198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->CounterElements[count] = 0; 200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*EXIT:*/ 204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_Queue_Flush(VIDDEC_QUEUE_TYPE *queue) 208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorUndefined; 210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 count; 211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pthread_mutex_lock (&(queue->mMutex)) != 0) { 213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUndefined; 214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->nHead = 0; 217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->nTail = 0; 218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->nElements = 0; 219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for(count=0; count < VIDDEC_MAX_QUEUE_SIZE; count++) 221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->CounterElements[count] = 0; 223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pthread_mutex_unlock (&(queue->mMutex)) != 0) { 227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUndefined; 228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_Queue_Add(VIDDEC_QUEUE_TYPE *queue, OMX_PTR pElement, VIDDEC_QUEUE_TYPES type) 235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorUndefined; 237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pthread_mutex_lock (&(queue->mMutex)) != 0) { 239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUndefined; 240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(queue->nElements == 0) 243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin switch(type) 245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case VIDDEC_QUEUE_OMX_U32: 247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 *pLocal = (OMX_U32 *)queue->Elements; 249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLocal[queue->nHead] = *(OMX_U32 *)pElement; 250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case VIDDEC_QUEUE_OMX_MARKTYPE: 253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_MARKTYPE *pLocal = (OMX_MARKTYPE *)queue->Elements; 255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLocal[queue->nHead] = *(OMX_MARKTYPE *)pElement; 256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*memcpy(&pLocal[queue->nHead], pElement, sizeof(OMX_MARKTYPE));*/ 257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->CounterElements[queue->nHead] = 1; 261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->nElements++; 262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin switch(type) 267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case VIDDEC_QUEUE_OMX_U32: 269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 *pLocal = (OMX_U32 *)queue->Elements; 271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pLocal[queue->nHead] == *(OMX_U32 *)pElement) 273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->CounterElements[queue->nHead]++; 275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(queue->nElements >= VIDDEC_MAX_QUEUE_SIZE) 280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto UNLOCK; 283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->nHead++; 285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(queue->nHead >= VIDDEC_MAX_QUEUE_SIZE) 286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->nHead = 0; 288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLocal[queue->nHead] = *(OMX_U32 *)pElement; 290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->CounterElements[queue->nHead] = 1; 291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->nElements++; 292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case VIDDEC_QUEUE_OMX_MARKTYPE: 296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_MARKTYPE *pLocal = (OMX_MARKTYPE *)queue->Elements; 298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pLocal[queue->nHead].hMarkTargetComponent == ((OMX_MARKTYPE *)pElement)->hMarkTargetComponent 300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin && pLocal[queue->nHead].pMarkData == ((OMX_MARKTYPE *)pElement)->pMarkData) 301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->CounterElements[queue->nHead]++; 303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(queue->nElements >= VIDDEC_MAX_QUEUE_SIZE) 308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto UNLOCK; 311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->nHead++; 313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(queue->nHead >= VIDDEC_MAX_QUEUE_SIZE) 314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->nHead = 0; 316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLocal[queue->nHead] = *(OMX_MARKTYPE *)pElement; 318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->CounterElements[queue->nHead] = 1; 319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->nElements++; 320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinUNLOCK: 328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pthread_mutex_unlock (&(queue->mMutex)) != 0) { 329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUndefined; 330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_Queue_Remove(VIDDEC_QUEUE_TYPE *queue, OMX_PTR pElement, VIDDEC_QUEUE_TYPES type) 337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorUndefined; 339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pthread_mutex_lock (&(queue->mMutex)) != 0) { 341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUndefined; 342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(queue->nElements > 0) 346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pElement) 348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin switch(type) 350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case VIDDEC_QUEUE_OMX_U32: 352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 *pLocal = (OMX_U32 *)queue->Elements; 354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *(OMX_U32 *)pElement = pLocal[queue->nTail]; 355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case VIDDEC_QUEUE_OMX_MARKTYPE: 358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_MARKTYPE *pLocal = (OMX_MARKTYPE *)queue->Elements; 360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *(OMX_MARKTYPE *)pElement = pLocal[queue->nTail]; 361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->CounterElements[queue->nTail]--; 366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(queue->CounterElements[queue->nTail] == 0) 367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->nElements--; 369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(queue->nElements > 0) 370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->nTail++; 372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(queue->nTail == VIDDEC_MAX_QUEUE_SIZE) 373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->nTail = 0; 375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pthread_mutex_unlock (&(queue->mMutex)) != 0) { 382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUndefined; 383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_Queue_Get_Tail(VIDDEC_QUEUE_TYPE *queue, OMX_PTR pElement, VIDDEC_QUEUE_TYPES type) 389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorUndefined; 391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pthread_mutex_lock (&(queue->mMutex)) != 0) { 393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUndefined; 394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(queue->nElements > 0) 397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin switch(type) 399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case VIDDEC_QUEUE_OMX_U32: 401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 *pLocal = (OMX_U32 *)queue->Elements; 403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *(OMX_U32 *)pElement = pLocal[queue->nTail]; 404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case VIDDEC_QUEUE_OMX_MARKTYPE: 407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_MARKTYPE *pLocal = (OMX_MARKTYPE *)queue->Elements; 409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *(OMX_MARKTYPE *)pElement = pLocal[queue->nTail]; 410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 414fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pthread_mutex_unlock (&(queue->mMutex)) != 0) { 416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUndefined; 417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_Queue_Replace_Tail(VIDDEC_QUEUE_TYPE *queue, OMX_PTR pElement, VIDDEC_QUEUE_TYPES type) 424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorUndefined; 426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pthread_mutex_lock (&(queue->mMutex)) != 0) { 428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUndefined; 429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(queue->nElements > 0) 432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin switch(type) 434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case VIDDEC_QUEUE_OMX_U32: 436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 *pLocal = (OMX_U32 *)queue->Elements; 438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(*(OMX_U32 *)pElement != pLocal[queue->nTail]) 439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(queue->CounterElements[queue->nTail] != 1) 441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(queue->nElements >= VIDDEC_MAX_QUEUE_SIZE) 443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto UNLOCK; 446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->CounterElements[queue->nTail]--; 448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->nTail--; 449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if( (queue->nTail >= VIDDEC_MAX_QUEUE_SIZE) || (queue->nTail < 0) ) 450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->nTail = VIDDEC_MAX_QUEUE_SIZE-1; 452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->CounterElements[queue->nTail] = 1; 454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->nElements++; 455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLocal[queue->nTail] = *(OMX_U32 *)pElement; 457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto UNLOCK; 459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case VIDDEC_QUEUE_OMX_MARKTYPE: 463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_MARKTYPE *pLocal = (OMX_MARKTYPE *)queue->Elements; 465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pLocal[queue->nTail].hMarkTargetComponent != ((OMX_MARKTYPE *)pElement)->hMarkTargetComponent 466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin || pLocal[queue->nTail].pMarkData != ((OMX_MARKTYPE *)pElement)->pMarkData) 467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(queue->CounterElements[queue->nTail] != 1) 469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(queue->nElements >= VIDDEC_MAX_QUEUE_SIZE) 471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto UNLOCK; 474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->CounterElements[queue->nTail]--; 476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->nTail--; 477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if( (queue->nTail >= VIDDEC_MAX_QUEUE_SIZE) || (queue->nTail < 0) ) 478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->nTail = VIDDEC_MAX_QUEUE_SIZE-1; 480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->CounterElements[queue->nTail] = 1; 482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->nElements++; 483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLocal[queue->nTail] = *(OMX_MARKTYPE *)pElement; 485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto UNLOCK; 487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinUNLOCK: 493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pthread_mutex_unlock (&(queue->mMutex)) != 0) { 494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUndefined; 495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_Queue_Free(VIDDEC_QUEUE_TYPE *queue) 501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorUndefined; 503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->nHead = 0; 505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->nTail = 0; 506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->nElements = 0; 507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(queue->Elements) 509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin free(queue->Elements); 511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin queue->Elements = NULL; 513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pthread_mutex_destroy (&(queue->mMutex)) != 0) { 515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUndefined; 516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*----------------------------------------------------------------------------*/ 525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * VIDDEC_CircBuf_Init() 527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*----------------------------------------------------------------------------*/ 529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_CircBuf_Init(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, VIDDEC_CBUFFER_TYPE nTypeIndex, VIDDEC_PORT_INDEX nPortIndex) 530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_CIRCULAR_BUFFER *pTempCBuffer = NULL; 533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nCount = 0; 534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(nTypeIndex == VIDDEC_CBUFFER_TIMESTAMP){ 536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempCBuffer = &pComponentPrivate->pCompPort[nPortIndex]->eTimeStamp; 537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_CBUFFER_LOCK 543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pTempCBuffer->m_lock != NULL) { 544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin free(pTempCBuffer->m_lock); 545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempCBuffer->m_lock = NULL; 546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_MALLOC_STRUCT(pTempCBuffer->m_lock, pthread_mutex_t,pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel3]); 548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*pTempCBuffer->m_lock = malloc(sizeof(pthread_mutex_t));*/ 549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_init(pTempCBuffer->m_lock, NULL); 550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for(nCount = 0; nCount >= CBUFFER_SIZE; nCount++) { 552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempCBuffer->pElement[nCount] = NULL; 553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempCBuffer->nCount = 0; 556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempCBuffer->nHead = 0; 557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempCBuffer->nTail = 0; 558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*----------------------------------------------------------------------------*/ 563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 564fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * VIDDEC_CircBuf_Flush() 565fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*----------------------------------------------------------------------------*/ 567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_CircBuf_Flush(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, VIDDEC_CBUFFER_TYPE nTypeIndex, VIDDEC_PORT_INDEX nPortIndex) 568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_CIRCULAR_BUFFER *pTempCBuffer = NULL; 571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nCount = 0; 572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(nTypeIndex == VIDDEC_CBUFFER_TIMESTAMP){ 574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempCBuffer = &pComponentPrivate->pCompPort[nPortIndex]->eTimeStamp; 575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_CBUFFER_LOCK 581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pthread_mutex_lock(pTempCBuffer->m_lock) != 0) { 582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (nCount = pTempCBuffer->nTail; nCount <= pTempCBuffer->nHead; nCount++){ 587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempCBuffer->pElement[nCount] = NULL; 588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempCBuffer->nCount = 0; 590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempCBuffer->nHead = 0; 591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempCBuffer->nTail = 0; 592fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_CBUFFER_LOCK 594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pthread_mutex_unlock(pTempCBuffer->m_lock) != 0) { 595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 602fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*----------------------------------------------------------------------------*/ 603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 604fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * VIDDEC_CircBuf_DeInit() 605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*----------------------------------------------------------------------------*/ 607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_CircBuf_DeInit(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, VIDDEC_CBUFFER_TYPE nTypeIndex, VIDDEC_PORT_INDEX nPortIndex) 608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 610fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_CIRCULAR_BUFFER *pTempCBuffer = NULL; 611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nCount = 0; 612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(nTypeIndex == VIDDEC_CBUFFER_TIMESTAMP){ 614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempCBuffer = &pComponentPrivate->pCompPort[nPortIndex]->eTimeStamp; 615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_CBUFFER_LOCK 621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pTempCBuffer->m_lock != NULL) { 622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin free(pTempCBuffer->m_lock); 623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempCBuffer->m_lock = NULL; 624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for(nCount = 0; nCount >= CBUFFER_SIZE; nCount++) { 627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempCBuffer->pElement[nCount] = NULL; 628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*----------------------------------------------------------------------------*/ 633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * VIDDEC_CircBuf_Add() set the last element in the Circular Buffer 635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * return the error number in case of exist an error. 636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*----------------------------------------------------------------------------*/ 638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_CircBuf_Add(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, VIDDEC_CBUFFER_TYPE nTypeIndex, VIDDEC_PORT_INDEX nPortIndex, OMX_PTR pElement) 639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_CIRCULAR_BUFFER *pTempCBuffer = NULL; 642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(nTypeIndex == VIDDEC_CBUFFER_TIMESTAMP){ 644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempCBuffer = &pComponentPrivate->pCompPort[nPortIndex]->eTimeStamp; 645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 648fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_CBUFFER_LOCK 651fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pthread_mutex_lock(pTempCBuffer->m_lock) != 0) { 652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempCBuffer->pElement[pTempCBuffer->nHead++] = pElement; 657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempCBuffer->nCount++; 658fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pTempCBuffer->nHead >= CBUFFER_SIZE){ 659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempCBuffer->nHead = 0; 660fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 661fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_CBUFFER_LOCK 662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pthread_mutex_unlock(pTempCBuffer->m_lock) != 0) { 663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 669fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 670fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*----------------------------------------------------------------------------*/ 671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * VIDDEC_CircBuf_Remove() get the first element in the Circular Buffer 673fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * return the error number in case of exist an error. 674fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*----------------------------------------------------------------------------*/ 676fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_CircBuf_Remove(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, VIDDEC_CBUFFER_TYPE nTypeIndex, VIDDEC_PORT_INDEX nPortIndex, OMX_PTR* pElement) 677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_CIRCULAR_BUFFER *pTempCBuffer = NULL; 680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(nTypeIndex == VIDDEC_CBUFFER_TIMESTAMP){ 682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempCBuffer = &pComponentPrivate->pCompPort[nPortIndex]->eTimeStamp; 683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 687fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 688fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_CBUFFER_LOCK 689fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pthread_mutex_lock(pTempCBuffer->m_lock) != 0) { 690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 694fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pTempCBuffer->nCount) 695fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *pElement = pTempCBuffer->pElement[pTempCBuffer->nTail]; 697fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempCBuffer->pElement[pTempCBuffer->nTail++] = NULL; 698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempCBuffer->nCount--; 699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pTempCBuffer->nTail >= CBUFFER_SIZE){ 700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempCBuffer->nTail = 0; 701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *pElement = NULL; 706fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_CBUFFER_LOCK 708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pthread_mutex_unlock(pTempCBuffer->m_lock) != 0) { 709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 712fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 713fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*----------------------------------------------------------------------------*/ 717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * VIDDEC_CircBuf_Count() get the number of elements in the Circular Buffer 719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * return the error number in case of exist an error. 720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*----------------------------------------------------------------------------*/ 722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_CircBuf_Count(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, VIDDEC_CBUFFER_TYPE nTypeIndex, VIDDEC_PORT_INDEX nPortIndex, OMX_U8* pCount) 723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_CIRCULAR_BUFFER *pTempCBuffer = NULL; 726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(nTypeIndex == VIDDEC_CBUFFER_TIMESTAMP){ 728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempCBuffer = &pComponentPrivate->pCompPort[nPortIndex]->eTimeStamp; 729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCount = 0; 733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_CBUFFER_LOCK 736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pthread_mutex_lock(pTempCBuffer->m_lock) != 0) { 737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 738fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 741fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 742fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *pCount = pTempCBuffer->nCount; 743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 744fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_CBUFFER_LOCK 745fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pthread_mutex_unlock(pTempCBuffer->m_lock) != 0) { 746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 752fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*----------------------------------------------------------------------------*/ 754fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 755fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * VIDDEC_CircBuf_Head() get the number of elements in the Circular Buffer 756fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * return the error number in case of exist an error. 757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 758fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*----------------------------------------------------------------------------*/ 759fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_U8 VIDDEC_CircBuf_GetHead(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, VIDDEC_CBUFFER_TYPE nTypeIndex, VIDDEC_PORT_INDEX nPortIndex) 760fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*OMX_ERRORTYPE eError = OMX_ErrorNone;*/ 762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_CIRCULAR_BUFFER *pTempCBuffer = NULL; 763fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8 ucHead = 0; 764fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 765fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(nTypeIndex == VIDDEC_CBUFFER_TIMESTAMP){ 766fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempCBuffer = &pComponentPrivate->pCompPort[nPortIndex]->eTimeStamp; 767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 768fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ucHead = 0; 770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return 0; 771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_CBUFFER_LOCK 773fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pthread_mutex_lock(pTempCBuffer->m_lock) != 0) { 774fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return 0; 775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ucHead = pTempCBuffer->nHead; 779fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_CBUFFER_LOCK 781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pthread_mutex_unlock(pTempCBuffer->m_lock) != 0) { 782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return 0; 783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return ucHead; 786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * VIDDEC_Load_Defaults() function will be called by the component to 791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * load the default values 793fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 794fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponentPrivate Pointer to the pComponentPrivatePrivate 795fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 798fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_Load_Defaults (VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, OMX_S32 nPassing) 801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 iCount = 0; 803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 805fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin switch(nPassing){ 806fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case VIDDEC_INIT_ALL: 807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case VIDDEC_INIT_STRUCTS: 808fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nInBufIndex = 0; 809fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nOutBufIndex = 0; 810fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nInMarkBufIndex = 0; 811fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nOutMarkBufIndex = 0; 812fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nInCmdMarkBufIndex = 0; 813fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nOutCmdMarkBufIndex = 0; 814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 815fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pCompPort[0]->hTunnelComponent = NULL; 816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pCompPort[1]->hTunnelComponent = NULL; 817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 818fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Set component version */ 819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pComponentVersion.s.nVersionMajor = VERSION_MAJOR; 820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pComponentVersion.s.nVersionMinor = VERSION_MINOR; 821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pComponentVersion.s.nRevision = VERSION_REVISION; 822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pComponentVersion.s.nStep = VERSION_STEP; 823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Set spec version */ 825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pSpecVersion.s.nVersionMajor = VERSION_MAJOR; 826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pSpecVersion.s.nVersionMinor = VERSION_MINOR; 827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pSpecVersion.s.nRevision = VERSION_REVISION; 828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pSpecVersion.s.nStep = VERSION_STEP; 829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate = NULL; 831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Set pPortParamType defaults */ 832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CONF_INIT_STRUCT(pComponentPrivate->pPortParamType, OMX_PORT_PARAM_TYPE, pComponentPrivate->dbg); 833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortParamType->nPorts = NUM_OF_PORTS; 834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortParamType->nStartPortNumber = VIDDEC_INPUT_PORT; 835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __STD_COMPONENT__ 836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CONF_INIT_STRUCT(pComponentPrivate->pPortParamTypeAudio, OMX_PORT_PARAM_TYPE, pComponentPrivate->dbg); 837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortParamTypeAudio->nPorts = VIDDEC_ZERO; 838fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortParamTypeAudio->nStartPortNumber = VIDDEC_ZERO; 839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CONF_INIT_STRUCT(pComponentPrivate->pPortParamTypeImage, OMX_PORT_PARAM_TYPE, pComponentPrivate->dbg); 840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortParamTypeImage->nPorts = VIDDEC_ZERO; 841fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortParamTypeImage->nStartPortNumber = VIDDEC_ZERO; 842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CONF_INIT_STRUCT(pComponentPrivate->pPortParamTypeOthers, OMX_PORT_PARAM_TYPE, pComponentPrivate->dbg); 843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortParamTypeOthers->nPorts = VIDDEC_ZERO; 844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortParamTypeOthers->nStartPortNumber = VIDDEC_ZERO; 845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 847fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pCompPort[VIDDEC_INPUT_PORT]->nBufferCnt = 0; 848fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pCompPort[VIDDEC_OUTPUT_PORT]->nBufferCnt = 0; 849fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 850fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Set pInPortDef defaults */ 851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CONF_INIT_STRUCT(pComponentPrivate->pInPortDef, OMX_PARAM_PORTDEFINITIONTYPE, pComponentPrivate->dbg); 852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->nPortIndex = VIDDEC_INPUT_PORT; 853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->eDir = OMX_DirInput; 854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->nBufferCountActual = MAX_PRIVATE_IN_BUFFERS; 855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->nBufferCountMin = VIDDEC_BUFFERMINCOUNT; 856fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->nBufferSize = VIDDEC_DEFAULT_INPUT_BUFFER_SIZE; 857fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->bEnabled = VIDDEC_PORT_ENABLED; 858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->bPopulated = VIDDEC_PORT_POPULATED; 859fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->eDomain = VIDDEC_PORT_DOMAIN; 860fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef KHRONOS_1_2 861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->bBuffersContiguous = OMX_FALSE; 862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->nBufferAlignment = OMX_FALSE; 863fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.pNativeRender = VIDDEC_INPUT_PORT_NATIVERENDER; 865fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nFrameWidth = VIDDEC_DEFAULT_WIDTH; 866fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nFrameHeight = VIDDEC_DEFAULT_HEIGHT; 867fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nStride = VIDDEC_INPUT_PORT_STRIDE; 868fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nSliceHeight = VIDDEC_INPUT_PORT_SLICEHEIGHT; 869fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nBitrate = VIDDEC_INPUT_PORT_BITRATE; 870fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.xFramerate = VIDDEC_INPUT_PORT_FRAMERATE; 871fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.cMIMEType = VIDDEC_MIMETYPEMPEG4; 872fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.bFlagErrorConcealment = VIDDEC_INPUT_PORT_FLAGERRORCONCEALMENT; 873fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eCompressionFormat = VIDDEC_INPUT_PORT_COMPRESSIONFORMAT; 874fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eColorFormat = VIDDEC_COLORFORMATUNUSED; 875fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef KHRONOS_1_1 876fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.pNativeWindow = 0; 877fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 878fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 879fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Set pOutPortDef defaults */ 880fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CONF_INIT_STRUCT(pComponentPrivate->pOutPortDef, OMX_PARAM_PORTDEFINITIONTYPE, pComponentPrivate->dbg); 881fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->nPortIndex = VIDDEC_OUTPUT_PORT; 882fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->eDir = OMX_DirOutput; 883fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->nBufferCountActual = MAX_PRIVATE_OUT_BUFFERS; 884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->nBufferCountMin = VIDDEC_BUFFERMINCOUNT; 885fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->nBufferSize = VIDDEC_DEFAULT_OUTPUT_BUFFER_SIZE; 886fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->bEnabled = VIDDEC_PORT_ENABLED; 887fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->bPopulated = VIDDEC_PORT_POPULATED; 888fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->eDomain = VIDDEC_PORT_DOMAIN; 889fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef KHRONOS_1_2 890fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->bBuffersContiguous = OMX_FALSE; 891fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->nBufferAlignment = OMX_FALSE; 892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 893fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.cMIMEType = VIDDEC_MIMETYPEYUV; 894fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.pNativeRender = VIDDEC_OUTPUT_PORT_NATIVERENDER; 895fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.nFrameWidth = VIDDEC_DEFAULT_WIDTH; 896fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.nFrameHeight = VIDDEC_DEFAULT_HEIGHT; 897fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.nStride = VIDDEC_OUTPUT_PORT_STRIDE; 898fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.nSliceHeight = VIDDEC_OUTPUT_PORT_SLICEHEIGHT; 899fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.nBitrate = VIDDEC_OUTPUT_PORT_BITRATE; 900fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.xFramerate = VIDDEC_OUTPUT_PORT_FRAMERATE; 901fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.bFlagErrorConcealment = VIDDEC_OUTPUT_PORT_FLAGERRORCONCEALMENT; 902fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.eCompressionFormat = VIDDEC_OUTPUT_PORT_COMPRESSIONFORMAT; 903fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.eColorFormat = VIDDEC_COLORFORMAT420; 904fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef KHRONOS_1_1 905fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.pNativeWindow = 0; 906fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 907fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (iCount = 0; iCount < MAX_PRIVATE_BUFFERS; iCount++) { 908fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_MALLOC_STRUCT(pComponentPrivate->pCompPort[VIDDEC_INPUT_PORT]->pBufferPrivate[iCount], VIDDEC_BUFFER_PRIVATE,pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel0]); 909fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pCompPort[VIDDEC_INPUT_PORT]->pBufferPrivate[iCount]->pBufferHdr = NULL; 910fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 911fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 912fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (iCount = 0; iCount < MAX_PRIVATE_BUFFERS; iCount++) { 913fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_MALLOC_STRUCT(pComponentPrivate->pCompPort[VIDDEC_OUTPUT_PORT]->pBufferPrivate[iCount], VIDDEC_BUFFER_PRIVATE,pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel0]); 914fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pCompPort[VIDDEC_OUTPUT_PORT]->pBufferPrivate[iCount]->pBufferHdr = NULL; 915fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 916fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 917fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Set pInPortFormat defaults */ 918fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CONF_INIT_STRUCT(pComponentPrivate->pInPortFormat, OMX_VIDEO_PARAM_PORTFORMATTYPE, pComponentPrivate->dbg); 919fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->nPortIndex = VIDDEC_INPUT_PORT; 920fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->nIndex = VIDDEC_DEFAULT_INPUT_INDEX_MPEG4; 921fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->eCompressionFormat = VIDDEC_INPUT_PORT_COMPRESSIONFORMAT; 922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->eColorFormat = VIDDEC_COLORFORMATUNUSED; 923fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef KHRONOS_1_1 924fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->xFramerate = VIDDEC_INPUT_PORT_FRAMERATE; 925fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 926fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 927fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Set pOutPortFormat defaults */ 928fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CONF_INIT_STRUCT(pComponentPrivate->pOutPortFormat, OMX_VIDEO_PARAM_PORTFORMATTYPE, pComponentPrivate->dbg); 929fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortFormat->nPortIndex = VIDDEC_OUTPUT_PORT; 930fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortFormat->nIndex = VIDDEC_DEFAULT_OUTPUT_INDEX_PLANAR420; 931fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortFormat->eCompressionFormat = VIDDEC_OUTPUT_PORT_COMPRESSIONFORMAT; 932fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortFormat->eColorFormat = VIDDEC_COLORFORMAT420; 933fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef KHRONOS_1_1 934fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortFormat->xFramerate = VIDDEC_INPUT_PORT_FRAMERATE; 935fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 936fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Set pPriorityMgmt defaults */ 937fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CONF_INIT_STRUCT(pComponentPrivate->pPriorityMgmt, OMX_PRIORITYMGMTTYPE, pComponentPrivate->dbg); 938fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPriorityMgmt->nGroupPriority = -1; 939fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPriorityMgmt->nGroupID = -1; 940fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 941fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Buffer supplier setting */ 942fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pCompPort[VIDDEC_INPUT_PORT]->eSupplierSetting = OMX_BufferSupplyOutput; 943fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 944fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Set pInBufSupplier defaults */ 945fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CONF_INIT_STRUCT(pComponentPrivate->pInBufSupplier, OMX_PARAM_BUFFERSUPPLIERTYPE , pComponentPrivate->dbg); 946fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInBufSupplier->nPortIndex = VIDDEC_INPUT_PORT; 947fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInBufSupplier->eBufferSupplier = VIDDEC_INPUT_PORT_BUFFERSUPPLIER; 948fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Set pOutBufSupplier defaults */ 950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CONF_INIT_STRUCT(pComponentPrivate->pOutBufSupplier, OMX_PARAM_BUFFERSUPPLIERTYPE , pComponentPrivate->dbg); 951fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutBufSupplier->nPortIndex = VIDDEC_OUTPUT_PORT; 952fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutBufSupplier->eBufferSupplier = VIDDEC_OUTPUT_PORT_BUFFERSUPPLIER; 953fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 954fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef KHRONOS_1_1 955fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*MBError Reporting code */ 956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Set eMBErrorReport defaults */ 957fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CONF_INIT_STRUCT(&pComponentPrivate->eMBErrorReport, OMX_CONFIG_MBERRORREPORTINGTYPE , pComponentPrivate->dbg); 958fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eMBErrorReport.nPortIndex = VIDDEC_OUTPUT_PORT; 959fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eMBErrorReport.bEnabled = OMX_FALSE; 960fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*MBError Reporting code */ 961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Set eMBErrorMapType defaults */ 962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (iCount = 0; iCount < MAX_PRIVATE_BUFFERS; iCount++) { 963fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CONF_INIT_STRUCT(&pComponentPrivate->eMBErrorMapType[iCount], OMX_CONFIG_MACROBLOCKERRORMAPTYPE_TI , pComponentPrivate->dbg); 964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eMBErrorMapType[iCount].nPortIndex = VIDDEC_OUTPUT_PORT; 965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eMBErrorMapType[iCount].nErrMapSize = (VIDDEC_DEFAULT_WIDTH * VIDDEC_DEFAULT_HEIGHT) / 256; 966fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cMBErrorIndexIn = 0; 968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cMBErrorIndexOut = 0; 969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 9721348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong pComponentPrivate->nPendingStateChangeRequests = 0; 9731348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong if(pthread_mutex_init(&pComponentPrivate->mutexStateChangeRequest, NULL)) { 9741348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong return OMX_ErrorUndefined; 9751348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong } 9761348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong if(pthread_cond_init (&pComponentPrivate->StateChangeCondition, NULL)) { 9771348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong return OMX_ErrorUndefined; 9781348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong } 9791348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong 980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Set pMpeg4 defaults */ 981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CONF_INIT_STRUCT (pComponentPrivate->pMpeg4, OMX_VIDEO_PARAM_MPEG4TYPE, pComponentPrivate->dbg); 982fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMpeg4->nPortIndex = VIDDEC_DEFAULT_MPEG4_PORTINDEX; 983fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMpeg4->nSliceHeaderSpacing = VIDDEC_DEFAULT_MPEG4_SLICEHEADERSPACING; 984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMpeg4->bSVH = VIDDEC_DEFAULT_MPEG4_SVH; 985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMpeg4->bGov = VIDDEC_DEFAULT_MPEG4_GOV; 986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMpeg4->nPFrames = VIDDEC_DEFAULT_MPEG4_PFRAMES; 987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMpeg4->nBFrames = VIDDEC_DEFAULT_MPEG4_BFRAMES; 988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMpeg4->nIDCVLCThreshold = VIDDEC_DEFAULT_MPEG4_IDCVLCTHRESHOLD; 989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMpeg4->bACPred = VIDDEC_DEFAULT_MPEG4_ACPRED; 990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMpeg4->nMaxPacketSize = VIDDEC_DEFAULT_MPEG4_MAXPACKETSIZE; 991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMpeg4->nTimeIncRes = VIDDEC_DEFAULT_MPEG4_TIMEINCRES; 992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMpeg4->eProfile = VIDDEC_DEFAULT_MPEG4_PROFILE; 993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMpeg4->eLevel = VIDDEC_DEFAULT_MPEG4_LEVEL; 994fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMpeg4->nAllowedPictureTypes = VIDDEC_DEFAULT_MPEG4_ALLOWEDPICTURETYPES; 995fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMpeg4->nHeaderExtension = VIDDEC_DEFAULT_MPEG4_HEADEREXTENSION; 996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMpeg4->bReversibleVLC = VIDDEC_DEFAULT_MPEG4_REVERSIBLEVLC; 997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Set pMpeg2 defaults */ 999fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CONF_INIT_STRUCT (pComponentPrivate->pMpeg2, OMX_VIDEO_PARAM_MPEG2TYPE, pComponentPrivate->dbg); 1000fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMpeg2->nPortIndex = VIDDEC_DEFAULT_MPEG2_PORTINDEX; 1001fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMpeg2->nPFrames = VIDDEC_DEFAULT_MPEG2_PFRAMES; 1002fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMpeg2->nBFrames = VIDDEC_DEFAULT_MPEG2_BFRAMES; 1003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMpeg2->eProfile = VIDDEC_DEFAULT_MPEG2_PROFILE; 1004fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMpeg2->eLevel = VIDDEC_DEFAULT_MPEG2_LEVEL; 1005fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1006fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Set pH264 defaults */ 1007fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CONF_INIT_STRUCT(pComponentPrivate->pH264, OMX_VIDEO_PARAM_AVCTYPE, pComponentPrivate->dbg); 1008fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH264->nPortIndex = VIDDEC_DEFAULT_H264_PORTINDEX; 1009fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH264->nSliceHeaderSpacing = VIDDEC_DEFAULT_H264_SLICEHEADERSPACING; 1010fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH264->nPFrames = VIDDEC_DEFAULT_H264_PFRAMES; 1011fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH264->nBFrames = VIDDEC_DEFAULT_H264_BFRAMES; 1012fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH264->bUseHadamard = VIDDEC_DEFAULT_H264_USEHADAMARD; 1013fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH264->nRefFrames = VIDDEC_DEFAULT_H264_REFFRAMES; 1014fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH264->nRefIdx10ActiveMinus1 = VIDDEC_DEFAULT_H264_REFIDX10ACTIVEMINUS1; 1015fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH264->nRefIdx11ActiveMinus1 = VIDDEC_DEFAULT_H264_REFIDX11ACTIVEMINUS1; 1016fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH264->bEnableUEP = VIDDEC_DEFAULT_H264_ENABLEUEP; 1017fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH264->bEnableFMO = VIDDEC_DEFAULT_H264_ENABLEFMO; 1018fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH264->bEnableASO = VIDDEC_DEFAULT_H264_ENABLEASO; 1019fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH264->bEnableRS = VIDDEC_DEFAULT_H264_ENABLERS; 1020fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH264->eProfile = VIDDEC_DEFAULT_H264_PROFILE; 1021fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH264->eLevel = VIDDEC_DEFAULT_H264_LEVEL; 1022fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH264->nAllowedPictureTypes = VIDDEC_DEFAULT_H264_ALLOWEDPICTURETYPES; 1023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH264->bFrameMBsOnly = VIDDEC_DEFAULT_H264_FRAMEMBSONLY; 1024fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH264->bMBAFF = VIDDEC_DEFAULT_H264_MBAFF; 1025fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH264->bEntropyCodingCABAC = VIDDEC_DEFAULT_H264_ENTROPYCODINGCABAC; 1026fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH264->bWeightedPPrediction = VIDDEC_DEFAULT_H264_WEIGHTEDPPREDICTION; 1027fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH264->nWeightedBipredicitonMode = VIDDEC_DEFAULT_H264_WEIGHTEDBIPREDICITONMODE; 1028fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH264->bconstIpred = VIDDEC_DEFAULT_H264_CONSTIPRED; 1029fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH264->bDirect8x8Inference = VIDDEC_DEFAULT_H264_DIRECT8X8INFERENCE; 1030fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH264->bDirectSpatialTemporal = VIDDEC_DEFAULT_H264_DIRECTSPATIALTEMPORAL; 1031fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH264->nCabacInitIdc = VIDDEC_DEFAULT_H264_CABACINITIDC; 1032fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH264->eLoopFilterMode = VIDDEC_DEFAULT_H264_LOOPFILTERMODE; 1033b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->H264BitStreamFormat = VIDDEC_DEFAULT_H264BITSTRMFMT; 1034fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1035fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH263->nPortIndex = VIDDEC_DEFAULT_H263_PORTINDEX; 1036fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH263->nPFrames = VIDDEC_DEFAULT_H263_PFRAMES; 1037fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH263->nBFrames = VIDDEC_DEFAULT_H263_BFRAMES; 1038fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH263->eProfile = VIDDEC_DEFAULT_H263_PROFILE; 1039fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH263->eLevel = VIDDEC_DEFAULT_H263_LEVEL; 1040fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH263->bPLUSPTYPEAllowed = VIDDEC_DEFAULT_H263_PLUSPTYPEALLOWED; 1041fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH263->nAllowedPictureTypes = VIDDEC_DEFAULT_H263_ALLOWEDPICTURETYPES; 1042fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH263->bForceRoundingTypeToZero = VIDDEC_DEFAULT_H263_FORCEROUNDINGTYPETOZERO; 1043fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH263->nPictureHeaderRepetition = VIDDEC_DEFAULT_H263_PICTUREHEADERREPETITION; 1044fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH263->nGOBHeaderInterval = VIDDEC_DEFAULT_H263_GOBHEADERINTERVAL; 1045fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1046fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CONF_INIT_STRUCT(pComponentPrivate->pWMV, OMX_VIDEO_PARAM_WMVTYPE, pComponentPrivate->dbg); 1047fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pWMV->nPortIndex = VIDDEC_DEFAULT_WMV_PORTINDEX; 1048fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pWMV->eFormat = VIDDEC_DEFAULT_WMV_FORMAT; 1049b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nWMVFileType = VIDDEC_WMV_RCVSTREAM; /* RCVSTREAM must be the default value*/ 1050fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wmvProfile = VIDDEC_WMV_PROFILEMAX; 1051fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 1052fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsNALBigEndian = OMX_TRUE; 1053fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 1054fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsNALBigEndian = OMX_FALSE; 1055fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1056fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState = VidDec_LCML_State_Unload; 1057fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLCMLHalted = OMX_TRUE; 1058fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 1059fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLCMLOut = OMX_FALSE; 1060fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1061fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eRMProxyState = VidDec_RMPROXY_State_Unload; 1062b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->ProcessMode = VIDDEC_DEFAULT_PROCESSMODE; 1063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bParserEnabled = OMX_TRUE; 1064fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1065fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_CircBuf_Init(pComponentPrivate, VIDDEC_CBUFFER_TIMESTAMP, VIDDEC_INPUT_PORT); 1066fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 1067fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_INIT(pComponentPrivate->sMutex); 1068fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_SEMAPHORE_INIT(pComponentPrivate->sInSemaphore); 1069fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_SEMAPHORE_INIT(pComponentPrivate->sOutSemaphore); 1070fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1071fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (iCount = 0; iCount < CBUFFER_SIZE; iCount++) { 1072fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->aBufferFlags[iCount].nTimeStamp = 0; 1073fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->aBufferFlags[iCount].nFlags = 0; 1074fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->aBufferFlags[iCount].pMarkData = NULL; 1075fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->aBufferFlags[iCount].hMarkTargetComponent = NULL; 1076fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1077fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pBufferRCV.sStructRCV.nNumFrames = 0xFFFFFF; /*Infinite frame number*/ 1078fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pBufferRCV.sStructRCV.nFrameType = 0x85; /*85*/ 1079fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pBufferRCV.sStructRCV.nID = 0x04; /*WMV3*/ 1080fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pBufferRCV.sStructRCV.nStructData = 0x018a3106; /*0x06318a01zero fill 0x018a3106*/ 1081fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pBufferRCV.sStructRCV.nVertSize = 352; /*720*/ 1082fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pBufferRCV.sStructRCV.nHorizSize = 288; /*576*/ 1083fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CONF_INIT_STRUCT( &pComponentPrivate->pBufferTemp, OMX_BUFFERHEADERTYPE, pComponentPrivate->dbg); 1084fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pBufferTemp.nFilledLen = sizeof(VIDDEC_WMV_RCV_header); 1085fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pBufferTemp.nAllocLen = sizeof(VIDDEC_WMV_RCV_header); 1086fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1087fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef ANDROID 1088fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Set PV (opencore) capability flags*/ 1089fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPVCapabilityFlags->iIsOMXComponentMultiThreaded = OMX_TRUE; 1090b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPVCapabilityFlags->iOMXComponentSupportsExternalOutputBufferAlloc = OMX_TRUE; 1091fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPVCapabilityFlags->iOMXComponentSupportsExternalInputBufferAlloc = OMX_FALSE; 1092fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPVCapabilityFlags->iOMXComponentSupportsMovableInputBuffers = OMX_FALSE; 1093fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPVCapabilityFlags->iOMXComponentSupportsPartialFrames = OMX_FALSE; 1094fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPVCapabilityFlags->iOMXComponentCanHandleIncompleteFrames = OMX_FALSE; 1095b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1096b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1097b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->ProcessMode == 0 && pComponentPrivate->H264BitStreamFormat == 0) { 1098b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* frame mode + bytestream */ 1099b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPVCapabilityFlags->iOMXComponentUsesNALStartCodes = OMX_TRUE; 1100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (pComponentPrivate->ProcessMode == 0 && pComponentPrivate->H264BitStreamFormat >= 1) { 1102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* frame mode + NAL-bitstream */ 1103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPVCapabilityFlags->iOMXComponentUsesNALStartCodes = OMX_FALSE; 1104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (pComponentPrivate->ProcessMode == 1 && pComponentPrivate->H264BitStreamFormat == 0) { 1106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* stream mode + bytestream */ 1107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPVCapabilityFlags->iOMXComponentUsesNALStartCodes = OMX_TRUE; 1108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (pComponentPrivate->ProcessMode == 1 && pComponentPrivate->H264BitStreamFormat >= 1) { 1110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* stream mode + NAL-bitstream */ 1111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* not supported */ 1112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 1114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->ProcessMode == 0 && pComponentPrivate->H264BitStreamFormat == 0) { 1117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* frame mode + bytestream */ 1118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPVCapabilityFlags->iOMXComponentUsesFullAVCFrames = OMX_TRUE; 1119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (pComponentPrivate->ProcessMode == 0 && pComponentPrivate->H264BitStreamFormat >= 1) { 1121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* frame mode + NAL-bitstream */ 1122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPVCapabilityFlags->iOMXComponentUsesFullAVCFrames = OMX_TRUE; 1123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (pComponentPrivate->ProcessMode == 1 && pComponentPrivate->H264BitStreamFormat == 0) { 1125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* stream mode + bytestream */ 1126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPVCapabilityFlags->iOMXComponentUsesFullAVCFrames = OMX_FALSE; 1127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (pComponentPrivate->ProcessMode == 1 && pComponentPrivate->H264BitStreamFormat >= 1) { 1129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* stream mode + NAL-bitstream */ 1130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* not supported */ 1131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 1133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Set default deblocking value for default format MPEG4 */ 1136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CONF_INIT_STRUCT(pComponentPrivate->pDeblockingParamType, OMX_PARAM_DEBLOCKINGTYPE, pComponentPrivate->dbg); 1137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pDeblockingParamType->nPortIndex = VIDDEC_OUTPUT_PORT; 1138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pDeblockingParamType->bDeblocking = OMX_FALSE; 1139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case VIDDEC_INIT_VARS: 1142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Set the process mode to zero, frame = 0, stream = 1 */ 1143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_CircBuf_Flush(pComponentPrivate, VIDDEC_CBUFFER_TIMESTAMP, VIDDEC_INPUT_PORT); 1144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsPaused = 0; 1145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsStopping = 0; 1146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFirstBuffer = 1; 1147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eIdleToLoad = OMX_StateInvalid; 1148b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->iEndofInputSent = 0; 1149b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->nCountInputBFromDsp = 0; 1150b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->nCountOutputBFromDsp = 0; 1151b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->nCountInputBFromApp = 0; 1152b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->nCountOutputBFromApp = 0; 1153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->frameCounter = 0; 1154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bMult16Size = OMX_FALSE; 1155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFlushOut = OMX_FALSE; 1156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nBytesConsumed = 0; 1157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bBuffMarkTaked = OMX_FALSE; 1158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bBuffalreadyMarked = OMX_FALSE; 1159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFirstHeader = OMX_FALSE; 1160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nDisplayWidth = 0; 1161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel1] = 0; 1162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel2] = 0; 1163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel3] = 0; 1164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel4] = 0; 1165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bVC1Fix = OMX_TRUE; 1166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eFirstBuffer.pFirstBufferSaved = NULL; 1167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eFirstBuffer.bSaveFirstBuffer = OMX_FALSE; 1168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eFirstBuffer.nFilledLen = 0; 1169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bDynamicConfigurationInProgress = OMX_FALSE; 1170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nInternalConfigBufferFilledAVC = 0; 1171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eMBErrorReport.bEnabled = OMX_FALSE; 1172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavincase VIDDEC_INIT_IDLEEXECUTING: 1175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Set the process mode to zero, frame = 0, stream = 1 */ 1176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsPaused = 0; 1177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsStopping = 0; 1178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFirstBuffer = 1; 1179b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->iEndofInputSent = 0; 1180b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->nCountInputBFromDsp = 0; 1181b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->nCountOutputBFromDsp = 0; 1182b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->nCountInputBFromApp = 0; 1183b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->nCountOutputBFromApp = 0; 1184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->frameCounter = 0; 1185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bMult16Size = OMX_FALSE; 1186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFlushOut = OMX_FALSE; 1187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFirstHeader = OMX_FALSE; 1188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nInBufIndex = 0; 1189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nOutBufIndex = 0; 1190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nInMarkBufIndex = 0; 1191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nOutMarkBufIndex = 0; 1192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nInCmdMarkBufIndex = 0; 1193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nOutCmdMarkBufIndex = 0; 1194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case VIDDEC_INIT_H263: 1197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH263->nPortIndex = VIDDEC_DEFAULT_H263_PORTINDEX; 1198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH263->nPFrames = VIDDEC_DEFAULT_H263_PFRAMES; 1199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH263->nBFrames = VIDDEC_DEFAULT_H263_BFRAMES; 1200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH263->eProfile = OMX_VIDEO_H263ProfileBaseline; 1201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH263->eLevel = OMX_VIDEO_H263Level10; 1202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH263->bPLUSPTYPEAllowed = VIDDEC_DEFAULT_H263_PLUSPTYPEALLOWED; 1203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH263->nAllowedPictureTypes = VIDDEC_DEFAULT_H263_ALLOWEDPICTURETYPES; 1204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH263->bForceRoundingTypeToZero = VIDDEC_DEFAULT_H263_FORCEROUNDINGTYPETOZERO; 1205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH263->nPictureHeaderRepetition = VIDDEC_DEFAULT_H263_PICTUREHEADERREPETITION; 1206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH263->nGOBHeaderInterval = VIDDEC_DEFAULT_H263_GOBHEADERINTERVAL; 1207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->nPortIndex = VIDDEC_INPUT_PORT; 1209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->nIndex = VIDDEC_DEFAULT_INPUT_INDEX_H263; 1210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->eCompressionFormat = OMX_VIDEO_CodingH263; 1211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->eColorFormat = OMX_COLOR_FormatUnused; 1212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef KHRONOS_1_1 1213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->xFramerate = VIDDEC_INPUT_PORT_FRAMERATE; 1214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nFrameWidth = VIDDEC_DEFAULT_WIDTH; 1216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nFrameHeight = VIDDEC_DEFAULT_HEIGHT; 1217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nBitrate = VIDDEC_INPUT_PORT_BITRATE; 1218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.xFramerate = VIDDEC_INPUT_PORT_FRAMERATE; 1219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eCompressionFormat = OMX_VIDEO_CodingH263; 1220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eColorFormat = OMX_COLOR_FormatUnused; 1221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->nBufferSize = pComponentPrivate->pInPortDef->format.video.nFrameWidth * 1222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nFrameHeight * 1223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_FACTORFORMAT420; 1224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pDeblockingParamType->bDeblocking = OMX_FALSE; 1225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsSparkInput = OMX_FALSE; 1226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_SPARK_CODE 1228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case VIDDEC_INIT_SPARK: 1229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->nPortIndex = VIDDEC_INPUT_PORT; 1230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->nIndex = VIDDEC_DEFAULT_INPUT_INDEX_H263; 1231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->eCompressionFormat = OMX_VIDEO_CodingUnused; 1232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->eColorFormat = OMX_COLOR_FormatUnused; 1233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef KHRONOS_1_1 1234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->xFramerate = VIDDEC_INPUT_PORT_FRAMERATE; 1235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nFrameWidth = VIDDEC_DEFAULT_WIDTH; 1237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nFrameHeight = VIDDEC_DEFAULT_HEIGHT; 1238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nBitrate = VIDDEC_INPUT_PORT_BITRATE; 1239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.xFramerate = VIDDEC_INPUT_PORT_FRAMERATE; 1240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eCompressionFormat = pComponentPrivate->pInPortFormat->eCompressionFormat; 1241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eColorFormat = pComponentPrivate->pInPortFormat->eColorFormat; 1242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->nBufferSize = pComponentPrivate->pInPortDef->format.video.nFrameWidth * 1243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nFrameHeight * 1244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_FACTORFORMAT420; 1245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pDeblockingParamType->bDeblocking = OMX_FALSE; 1246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsSparkInput = OMX_TRUE; 1247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case VIDDEC_INIT_H264: 1251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH264->nPortIndex = VIDDEC_DEFAULT_H264_PORTINDEX; 1252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH264->nPFrames = VIDDEC_DEFAULT_H264_PFRAMES; 1253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH264->nBFrames = VIDDEC_DEFAULT_H264_BFRAMES; 1254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pH264->eProfile = OMX_VIDEO_AVCProfileBaseline; 1255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pH264->eLevel = OMX_VIDEO_AVCLevelMax; 1256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->nPortIndex = VIDDEC_INPUT_PORT; 1258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->nIndex = VIDDEC_DEFAULT_INPUT_INDEX_H264; 1259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->eCompressionFormat = OMX_VIDEO_CodingAVC; 1260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->eColorFormat = OMX_COLOR_FormatUnused; 1261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef KHRONOS_1_1 1262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->xFramerate = VIDDEC_INPUT_PORT_FRAMERATE; 1263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nFrameWidth = VIDDEC_DEFAULT_WIDTH; 1265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nFrameHeight = VIDDEC_DEFAULT_HEIGHT; 1266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nBitrate = VIDDEC_INPUT_PORT_BITRATE; 1267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.xFramerate = VIDDEC_INPUT_PORT_FRAMERATE; 1268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eCompressionFormat = OMX_VIDEO_CodingAVC; 1269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eColorFormat = OMX_COLOR_FormatUnused; 1270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->nBufferSize = pComponentPrivate->pInPortDef->format.video.nFrameWidth * 1271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nFrameHeight * 1272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_FACTORFORMAT420; 1273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pDeblockingParamType->bDeblocking = OMX_TRUE; /* Always enable */ 1274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsSparkInput = OMX_FALSE; 1275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case VIDDEC_INIT_MPEG2: 1278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMpeg2->nPortIndex = VIDDEC_DEFAULT_MPEG2_PORTINDEX; 1279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMpeg2->nPFrames = VIDDEC_DEFAULT_MPEG2_PFRAMES; 1280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMpeg2->nBFrames = VIDDEC_DEFAULT_MPEG2_BFRAMES; 1281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMpeg2->eProfile = OMX_VIDEO_MPEG2ProfileSimple; 1282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMpeg2->eLevel = OMX_VIDEO_MPEG2LevelLL; 1283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->nPortIndex = VIDDEC_INPUT_PORT; 1285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->nIndex = VIDDEC_DEFAULT_INPUT_INDEX_MPEG2; 1286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->eCompressionFormat = OMX_VIDEO_CodingMPEG2; 1287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->eColorFormat = OMX_COLOR_FormatUnused; 1288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef KHRONOS_1_1 1289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->xFramerate = VIDDEC_INPUT_PORT_FRAMERATE; 1290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nFrameWidth = VIDDEC_DEFAULT_WIDTH; 1292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nFrameHeight = VIDDEC_DEFAULT_HEIGHT; 1293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nBitrate = VIDDEC_INPUT_PORT_BITRATE; 1294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.xFramerate = VIDDEC_INPUT_PORT_FRAMERATE; 1295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eCompressionFormat = OMX_VIDEO_CodingMPEG2; 1296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eColorFormat = OMX_COLOR_FormatUnused; 1297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->nBufferSize = pComponentPrivate->pInPortDef->format.video.nFrameWidth * 1298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nFrameHeight * 1299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_FACTORFORMAT420; 1300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pDeblockingParamType->bDeblocking = OMX_FALSE; /*TODO: Verify with algo team*/ 1301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsSparkInput = OMX_FALSE; 1302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case VIDDEC_INIT_MPEG4: 1305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMpeg4->nPortIndex = VIDDEC_DEFAULT_MPEG4_PORTINDEX; 1306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMpeg4->nPFrames = VIDDEC_DEFAULT_MPEG4_PFRAMES; 1307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMpeg4->nBFrames = VIDDEC_DEFAULT_MPEG4_BFRAMES; 1308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMpeg4->eProfile = OMX_VIDEO_MPEG4ProfileSimple; 1309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef KHRONOS_1_1 1310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMpeg4->eLevel = OMX_VIDEO_MPEG4Level1; 1311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 1312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMpeg4->eLevel = OMX_VIDEO_MPEG4Levell; 1313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->nPortIndex = VIDDEC_INPUT_PORT; 1315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->nIndex = VIDDEC_DEFAULT_INPUT_INDEX_MPEG4; 1316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->eCompressionFormat = OMX_VIDEO_CodingMPEG4; 1317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->eColorFormat = OMX_COLOR_FormatUnused; 1318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef KHRONOS_1_1 1319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->xFramerate = VIDDEC_INPUT_PORT_FRAMERATE; 1320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nFrameWidth = VIDDEC_DEFAULT_WIDTH; 1322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nFrameHeight = VIDDEC_DEFAULT_HEIGHT; 1323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nBitrate = VIDDEC_INPUT_PORT_BITRATE; 1324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.xFramerate = VIDDEC_INPUT_PORT_FRAMERATE; 1325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eCompressionFormat = OMX_VIDEO_CodingMPEG4; 1326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eColorFormat = OMX_COLOR_FormatUnused; 1327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->nBufferSize = pComponentPrivate->pInPortDef->format.video.nFrameWidth * 1328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nFrameHeight * 1329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_FACTORFORMAT420; 1330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pDeblockingParamType->bDeblocking = OMX_FALSE; 1331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsSparkInput = OMX_FALSE; 1332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case VIDDEC_INIT_WMV9: 1335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pWMV->nPortIndex = VIDDEC_DEFAULT_WMV_PORTINDEX; 1336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pWMV->eFormat = OMX_VIDEO_WMVFormat9; 1337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->nPortIndex = VIDDEC_INPUT_PORT; 1339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->nIndex = VIDDEC_DEFAULT_INPUT_INDEX_WMV9; 1340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->eCompressionFormat = OMX_VIDEO_CodingWMV; 1341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->eColorFormat = OMX_COLOR_FormatUnused; 1342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef KHRONOS_1_1 1343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortFormat->xFramerate = VIDDEC_INPUT_PORT_FRAMERATE; 1344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nFrameWidth = VIDDEC_DEFAULT_WIDTH; 1346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nFrameHeight = VIDDEC_DEFAULT_HEIGHT; 1347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nBitrate = VIDDEC_INPUT_PORT_BITRATE; 1348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.xFramerate = VIDDEC_INPUT_PORT_FRAMERATE; 1349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eCompressionFormat = OMX_VIDEO_CodingWMV; 1350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eColorFormat = OMX_COLOR_FormatUnused; 1351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->nBufferSize = pComponentPrivate->pInPortDef->format.video.nFrameWidth * 1352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nFrameHeight * 1353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_FACTORFORMAT420; 1354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nWMVFileType = VIDDEC_WMV_RCVSTREAM; /* RCVSTREAM must be the default value*/ 1356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pDeblockingParamType->bDeblocking = OMX_TRUE; /* Always enable */ 1357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsSparkInput = OMX_FALSE; 1358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case VIDDEC_INIT_PLANAR420: 1361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortFormat->nPortIndex = VIDDEC_OUTPUT_PORT; 1363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortFormat->nIndex = VIDDEC_DEFAULT_OUTPUT_INDEX_PLANAR420; 1364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortFormat->eCompressionFormat = OMX_VIDEO_CodingUnused; 1365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortFormat->eColorFormat = VIDDEC_COLORFORMAT420; 1366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef KHRONOS_1_1 1367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortFormat->xFramerate = VIDDEC_INPUT_PORT_FRAMERATE; 1368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.nFrameWidth = VIDDEC_DEFAULT_WIDTH; 1370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.nFrameHeight = VIDDEC_DEFAULT_HEIGHT; 1371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.nBitrate = VIDDEC_OUTPUT_PORT_BITRATE; 1372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.xFramerate = VIDDEC_OUTPUT_PORT_FRAMERATE; 1373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.eCompressionFormat = VIDDEC_OUTPUT_PORT_COMPRESSIONFORMAT; 1374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.eColorFormat = VIDDEC_COLORFORMAT420; 1375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->nBufferSize = pComponentPrivate->pOutPortDef->format.video.nFrameWidth * 1376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.nFrameHeight * 1377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_FACTORFORMAT420; 1378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case VIDDEC_INIT_INTERLEAVED422: 1382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortFormat->nPortIndex = VIDDEC_OUTPUT_PORT; 1383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortFormat->nIndex = VIDDEC_DEFAULT_OUTPUT_INDEX_INTERLEAVED422; 1384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortFormat->eCompressionFormat = OMX_VIDEO_CodingUnused; 1385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortFormat->eColorFormat = VIDDEC_COLORFORMAT422; 1386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef KHRONOS_1_1 1387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortFormat->xFramerate = VIDDEC_INPUT_PORT_FRAMERATE; 1388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.nFrameWidth = VIDDEC_DEFAULT_WIDTH; 1390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.nFrameHeight = VIDDEC_DEFAULT_HEIGHT; 1391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.nBitrate = VIDDEC_OUTPUT_PORT_BITRATE; 1392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.xFramerate = VIDDEC_OUTPUT_PORT_FRAMERATE; 1393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.eCompressionFormat = VIDDEC_OUTPUT_PORT_COMPRESSIONFORMAT; 1394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.eColorFormat = VIDDEC_COLORFORMAT422; 1395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->nBufferSize = pComponentPrivate->pOutPortDef->format.video.nFrameWidth * 1396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.nFrameHeight * 1397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_FACTORFORMAT422; 1398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 1404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return(eError); 1405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*----------------------------------------------------------------------------*/ 1408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * VIDDEC_Start_ComponentThread() starts the component thread and all the pipes 1410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * to achieve communication between dsp and application for commands and buffer 1411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * interchanging 1412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 1413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*----------------------------------------------------------------------------*/ 1414fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_Start_ComponentThread(OMX_HANDLETYPE hComponent) 1415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE* pComp = (OMX_COMPONENTTYPE*)hComponent; 1418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_COMPONENT_PRIVATE* pComponentPrivate = (VIDDEC_COMPONENT_PRIVATE*)pComp->pComponentPrivate; 1419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsStopping = 0; 1421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "+++ENTERING\n"); 1423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* create the pipe used to maintain free input buffers*/ 1424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = pipe(pComponentPrivate->free_inpBuf_Q); 1425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError) { 1426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 1427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* create the pipe used to maintain free input buffers*/ 1431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = pipe(pComponentPrivate->free_outBuf_Q); 1432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError) { 1433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 1434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* create the pipe used to maintain input buffers*/ 1438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = pipe(pComponentPrivate->filled_inpBuf_Q); 1439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError) { 1440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 1441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* create the pipe used to maintain dsp output/encoded buffers*/ 1445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = pipe(pComponentPrivate->filled_outBuf_Q); 1446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError) { 1447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 1448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* create the pipe used to send commands to the thread */ 1452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = pipe(pComponentPrivate->cmdPipe); 1453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError) { 1454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 1455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* create the pipe used to send commands to the thread */ 1459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = pipe(pComponentPrivate->cmdDataPipe); 1460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError) { 1461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 1462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Create the Component Thread */ 1466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = pthread_create(&(pComponentPrivate->ComponentThread), 1467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL, 1468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_VidDec_Thread, 1469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate); 1470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TRACE2(pComponentPrivate->dbg, "pthread_create 0x%lx\n",(OMX_U32) pComponentPrivate->ComponentThread); 1472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError || !pComponentPrivate->ComponentThread) { 1473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TRACE4(pComponentPrivate->dbg, "pthread_create 0x%x\n",eError); 1474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 1475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ThreadCreated(pComponentPrivate->pPERF, 1480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->ComponentThread, 1481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_FOURS("VD T")); 1482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 1485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "---EXITING(0x%x)\n",eError); 1486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 1490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @Stop_ComponentThread() This function is called by the component during 1492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* de-init to close component thread, Command pipe & data pipes. 1493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 1494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param pComponent handle for this instance of the component 1495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 1496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @pre 1497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 1498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @post 1499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 1500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @return none 1501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/ 1502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 1503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_Stop_ComponentThread(OMX_HANDLETYPE pComponent) 1504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE* pHandle = (OMX_COMPONENTTYPE*)pComponent; 1507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_COMPONENT_PRIVATE* pComponentPrivate = (VIDDEC_COMPONENT_PRIVATE*)pHandle->pComponentPrivate; 1508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE threadError = OMX_ErrorNone; 1509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE err = OMX_ErrorNone; 1510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int pthreadError = 0; 1511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Join the component thread */ 1513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "+++ENTERING\n"); 1514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TRACE2(pComponentPrivate->dbg, "pthread_join 0x%lx\n",(OMX_U32) pComponentPrivate->ComponentThread); 1515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 1517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthreadError = pthread_join(pComponentPrivate->ComponentThread, (void*)&threadError); 1518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != pthreadError) { 1519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 1520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 1522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->bLCMLOut == OMX_TRUE) { 1523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*pthreadError = pthread_cancel(pComponentPrivate->ComponentThread);*/ 1524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != pthreadError) { 1525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 1526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else{ 1529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthreadError = pthread_join(pComponentPrivate->ComponentThread, (void*)&threadError); 1530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != pthreadError) { 1531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 1532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Check for the errors */ 1537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (OMX_ErrorNone != eError) { 1538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 1541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 1542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 1543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Error while closing Component Thread\n"); 1544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* close the data pipe handles */ 1547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = close(pComponentPrivate->free_inpBuf_Q[VIDDEC_PIPE_READ]); 1548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != err) { 1549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 1550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 1553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 1554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMajor, 1555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Error while closing data pipe\n"); 1556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = close(pComponentPrivate->free_outBuf_Q[VIDDEC_PIPE_READ]); 1559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != err) { 1560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 1561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 1564fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 1565fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMajor, 1566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Error while closing data pipe\n"); 1567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = close(pComponentPrivate->filled_inpBuf_Q[VIDDEC_PIPE_READ]); 1570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != err) { 1571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 1572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 1575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 1576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMajor, 1577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Error while closing data pipe\n"); 1578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = close(pComponentPrivate->filled_outBuf_Q[VIDDEC_PIPE_READ]); 1581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != err) { 1582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 1583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 1586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 1587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMajor, 1588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Error while closing data pipe\n"); 1589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = close(pComponentPrivate->free_inpBuf_Q[VIDDEC_PIPE_WRITE]); 1592fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != err) { 1593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 1594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 1597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 1598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMajor, 1599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Error while closing data pipe\n"); 1600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1602fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = close(pComponentPrivate->free_outBuf_Q[VIDDEC_PIPE_WRITE]); 1603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != err) { 1604fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 1605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 1608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 1609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMajor, 1610fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Error while closing data pipe\n"); 1611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = close(pComponentPrivate->filled_inpBuf_Q[VIDDEC_PIPE_WRITE]); 1614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != err) { 1615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 1616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 1619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 1620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMajor, 1621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Error while closing data pipe\n"); 1622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = close(pComponentPrivate->filled_outBuf_Q[VIDDEC_PIPE_WRITE]); 1625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != err) { 1626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 1627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 1630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 1631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMajor, 1632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Error while closing data pipe\n"); 1633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Close the command pipe handles */ 1636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = close(pComponentPrivate->cmdPipe[VIDDEC_PIPE_READ]); 1637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != err) { 1638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 1639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 1642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 1643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMajor, 1644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Error while closing cmd pipe\n"); 1645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = close(pComponentPrivate->cmdPipe[VIDDEC_PIPE_WRITE]); 1648fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != err) { 1649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 1650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1651fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 1653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 1654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMajor, 1655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Error while closing cmd pipe\n"); 1656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1658fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Close the command data pipe handles */ 1659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = close (pComponentPrivate->cmdDataPipe[VIDDEC_PIPE_READ]); 1660fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != err) { 1661fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 1662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 1665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 1666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMajor, 1667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Error while closing cmd pipe\n"); 1668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1669fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1670fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = close (pComponentPrivate->cmdDataPipe[VIDDEC_PIPE_WRITE]); 1671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != err) { 1672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 1673fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1674fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 1676fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 1677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMajor, 1678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Error while closing cmd pipe\n"); 1679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "---EXITING(0x%x)\n",eError); 1681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 1685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Disable Port() 1687fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1688fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Called by component thread, handles commands sent by the app. 1689fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param 1691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_ErrorNone success, ready to roll 1693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1694fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 1695fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 1696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1697fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_DisablePort (VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, OMX_U32 nParam1) 1698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin static OMX_BOOL bFirstTimeToUnLoadCodec = OMX_TRUE; /*Needed when port disable is been call for input & output ports*/ 1701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "+++ENTERING\n"); 1702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "pComponentPrivate 0x%p nParam1 0x%lx\n",pComponentPrivate, nParam1); 1703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Protect VIDDEC_UnloadCodec() to be called twice while doing Dynamic port configuration*/ 1705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->bDynamicConfigurationInProgress && bFirstTimeToUnLoadCodec){ 1706fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "VIDDEC_UnloadCodec\n"); 1707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = VIDDEC_UnloadCodec(pComponentPrivate); 1708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin bFirstTimeToUnLoadCodec = OMX_FALSE; 1712fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1713fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = VIDDEC_HandleCommandFlush(pComponentPrivate, -1, OMX_FALSE); 1715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 1719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while(1) { 1720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nParam1 == VIDDEC_INPUT_PORT && !pComponentPrivate->pInPortDef->bPopulated) { 1721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* return cmdcomplete event if input unpopulated */ 1722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Unpopulated VIDDEC_INPUT_PORT IN 0x%x\n",pComponentPrivate->pInPortDef->bPopulated); 1723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle, 1724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 1726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortDisable, 1727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_INPUT_PORT, 1728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (nParam1 == VIDDEC_OUTPUT_PORT && !pComponentPrivate->pOutPortDef->bPopulated) { 1732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* return cmdcomplete event if output unpopulated */ 1733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Unpopulated VIDDEC_OUTPUT_PORT OUT 0x%x\n",pComponentPrivate->pOutPortDef->bPopulated); 1734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle, 1735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 1737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortDisable, 1738fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_OUTPUT_PORT, 1739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1741fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1742fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (nParam1 == VIDDEC_BOTH_PORT && !pComponentPrivate->pInPortDef->bPopulated && 1743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin !pComponentPrivate->pOutPortDef->bPopulated) { 1744fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* return cmdcomplete event if inout & output unpopulated */ 1745fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Unpopulated VIDDEC_INPUT_PORT IN 0x%x\n",pComponentPrivate->pInPortDef->bPopulated); 1746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle, 1747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 1749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortDisable, 1750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_INPUT_PORT, 1751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1752fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Unpopulated VIDDEC_OUTPUT_PORT OUT 0x%x\n",pComponentPrivate->pOutPortDef->bPopulated); 1753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle, 1754fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1755fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 1756fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortDisable, 1757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_OUTPUT_PORT, 1758fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1759fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1760fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (nParam1 == VIDDEC_BOTH_PORT && !pComponentPrivate->pInPortDef->bPopulated && 1762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pComponentPrivate->pCompPort[1]->hTunnelComponent != NULL)) { 1763fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* return cmdcomplete event if inout & output unpopulated */ 1764fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Unpopulated VIDDEC_INPUT_PORT IN 0x%x\n",pComponentPrivate->pInPortDef->bPopulated); 1765fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle, 1766fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 1768fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortDisable, 1769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_INPUT_PORT, 1770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1773fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_WAIT_CODE(); 1774fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 1776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nParam1 == VIDDEC_INPUT_PORT) { 1777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((!(pComponentPrivate->eState == OMX_StateLoaded) && pComponentPrivate->pInPortDef->bPopulated) || 1778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->sInSemaphore.bSignaled) { 1779fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_SEMAPHORE_WAIT(pComponentPrivate->sInSemaphore); 1780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Unpopulated VIDDEC_INPUT_PORT IN 0x%x\n",pComponentPrivate->pInPortDef->bPopulated); 1782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bInPortSettingsChanged = OMX_FALSE; 1783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "bInPortSettingsChanged = OMX_FALSE;\n"); 1784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle, 1785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 1787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortDisable, 1788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_INPUT_PORT, 1789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (nParam1 == VIDDEC_OUTPUT_PORT) { 1792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((!(pComponentPrivate->eState == OMX_StateLoaded) && pComponentPrivate->pOutPortDef->bPopulated) || 1793fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->sOutSemaphore.bSignaled) { 1794fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_SEMAPHORE_WAIT(pComponentPrivate->sOutSemaphore); 1795fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Unpopulated VIDDEC_OUTPUT_PORT OUT 0x%x\n",pComponentPrivate->pOutPortDef->bPopulated); 1798fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "bOutPortSettingsChanged = OMX_FALSE;\n"); 1799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bOutPortSettingsChanged = OMX_FALSE; 1800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle, 1801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 1803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortDisable, 1804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_OUTPUT_PORT, 1805fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1806fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (nParam1 == OMX_ALL) { 1808fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->pCompPort[1]->hTunnelComponent != NULL) { 1809fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((!(pComponentPrivate->eState == OMX_StateLoaded) && pComponentPrivate->pInPortDef->bPopulated) || 1810fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->sInSemaphore.bSignaled) { 1811fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_SEMAPHORE_WAIT(pComponentPrivate->sInSemaphore); 1812fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1813fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Unpopulated VIDDEC_INPUT_PORT IN 0x%x\n",pComponentPrivate->pInPortDef->bPopulated); 1814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bInPortSettingsChanged = OMX_FALSE; 1815fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle, 1816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 1818fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortDisable, 1819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_INPUT_PORT, 1820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 1823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((!(pComponentPrivate->eState == OMX_StateLoaded) && pComponentPrivate->pInPortDef->bPopulated) || 1824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->sInSemaphore.bSignaled) { 1825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_SEMAPHORE_WAIT(pComponentPrivate->sInSemaphore); 1826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Populated VIDDEC_INPUT_PORT IN 0x%x\n",pComponentPrivate->pInPortDef->bPopulated); 1828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bInPortSettingsChanged = OMX_FALSE; 1829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle, 1830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 1832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortDisable, 1833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_INPUT_PORT, 1834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((!(pComponentPrivate->eState == OMX_StateLoaded) && pComponentPrivate->pOutPortDef->bPopulated) || 1836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->sOutSemaphore.bSignaled) { 1837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_SEMAPHORE_WAIT(pComponentPrivate->sOutSemaphore); 1838fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Populated VIDDEC_OUTPUT_PORT IN 0x%x\n",pComponentPrivate->pInPortDef->bPopulated); 1840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bOutPortSettingsChanged = OMX_FALSE; 1841fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle, 1842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 1844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortDisable, 1845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_OUTPUT_PORT, 1846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1847fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1848fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1849fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1850fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Reset values to initial state*/ 1852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->bDynamicConfigurationInProgress){ 1853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->bOutPortSettingsChanged == OMX_FALSE && pComponentPrivate->bInPortSettingsChanged == OMX_FALSE){ 1854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bDynamicConfigurationInProgress = OMX_FALSE; 1855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin bFirstTimeToUnLoadCodec = OMX_TRUE; 1856fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "bDynamicConfigurationInProgress = OMX_FALSE;\n"); 1857fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1859fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1860fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 1861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "---EXITING(0x%x)\n",eError); 1862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1863fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 186575654962d82cc9054c198ce88fc2db0c56b16232James DongOMX_ERRORTYPE VIDDEC_EmptyBufferDone(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, OMX_BUFFERHEADERTYPE* pBufferHeader) 186675654962d82cc9054c198ce88fc2db0c56b16232James Dong{ 186775654962d82cc9054c198ce88fc2db0c56b16232James Dong //LOGI("VIDDEC_EmptyBufferDone: header %p buffer %p", pBufferHeader, pBufferHeader->pBuffer); 186875654962d82cc9054c198ce88fc2db0c56b16232James Dong ((VIDDEC_BUFFER_PRIVATE* )pBufferHeader->pInputPortPrivate)->eBufferOwner = VIDDEC_BUFFER_WITH_CLIENT; 186975654962d82cc9054c198ce88fc2db0c56b16232James Dong 187075654962d82cc9054c198ce88fc2db0c56b16232James Dong // No buffer flag EOS event needs to be sent for INPUT port 187175654962d82cc9054c198ce88fc2db0c56b16232James Dong 187281080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong OMX_ERRORTYPE ret = pComponentPrivate->cbInfo.EmptyBufferDone(pComponentPrivate->pHandle, 187375654962d82cc9054c198ce88fc2db0c56b16232James Dong pComponentPrivate->pHandle->pApplicationPrivate, 187475654962d82cc9054c198ce88fc2db0c56b16232James Dong pBufferHeader); 187581080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong 187681080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong VIDDEC_PTHREAD_MUTEX_LOCK(pComponentPrivate->inputFlushCompletionMutex); 187781080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong OMX_U32 nCountInputBFromDsp = 0; 187881080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong pthread_mutex_lock(&pComponentPrivate->mutexInputBFromDSP); 187981080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong nCountInputBFromDsp = pComponentPrivate->nCountInputBFromDsp; 188081080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong pthread_mutex_unlock(&pComponentPrivate->mutexInputBFromDSP); 188181080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong if (pComponentPrivate->bIsInputFlushPending && nCountInputBFromDsp == 0) { 188281080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong VIDDEC_PTHREAD_MUTEX_SIGNAL(pComponentPrivate->inputFlushCompletionMutex); 188381080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong } 188481080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->inputFlushCompletionMutex); 188581080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong 188681080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong return ret; 188775654962d82cc9054c198ce88fc2db0c56b16232James Dong} 188875654962d82cc9054c198ce88fc2db0c56b16232James Dong 188975654962d82cc9054c198ce88fc2db0c56b16232James DongOMX_ERRORTYPE VIDDEC_FillBufferDone(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, OMX_BUFFERHEADERTYPE* pBufferHeader) 189075654962d82cc9054c198ce88fc2db0c56b16232James Dong{ 189175654962d82cc9054c198ce88fc2db0c56b16232James Dong //LOGI("VIDDEC_FillBufferDone: header %p buffer %p", pBufferHeader, pBufferHeader->pBuffer); 189275654962d82cc9054c198ce88fc2db0c56b16232James Dong ((VIDDEC_BUFFER_PRIVATE* )pBufferHeader->pOutputPortPrivate)->eBufferOwner = VIDDEC_BUFFER_WITH_CLIENT; 189375654962d82cc9054c198ce88fc2db0c56b16232James Dong 189475654962d82cc9054c198ce88fc2db0c56b16232James Dong // OpenMAX-IL standard specifies that a component generates the OMX_EventBufferFlag event when an OUTPUT port 189575654962d82cc9054c198ce88fc2db0c56b16232James Dong // emits a buffer with the OMX_BUFFERFLAG_EOS flag set in the nFlags field 189675654962d82cc9054c198ce88fc2db0c56b16232James Dong if (pBufferHeader->nFlags & OMX_BUFFERFLAG_EOS) { 189775654962d82cc9054c198ce88fc2db0c56b16232James Dong pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 189875654962d82cc9054c198ce88fc2db0c56b16232James Dong pComponentPrivate->pHandle->pApplicationPrivate, 189975654962d82cc9054c198ce88fc2db0c56b16232James Dong OMX_EventBufferFlag, 190075654962d82cc9054c198ce88fc2db0c56b16232James Dong VIDDEC_OUTPUT_PORT, 190175654962d82cc9054c198ce88fc2db0c56b16232James Dong pBufferHeader->nFlags, 190275654962d82cc9054c198ce88fc2db0c56b16232James Dong NULL); 190375654962d82cc9054c198ce88fc2db0c56b16232James Dong } 190475654962d82cc9054c198ce88fc2db0c56b16232James Dong 190581080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong OMX_ERRORTYPE ret = pComponentPrivate->cbInfo.FillBufferDone(pComponentPrivate->pHandle, 190675654962d82cc9054c198ce88fc2db0c56b16232James Dong pComponentPrivate->pHandle->pApplicationPrivate, 190775654962d82cc9054c198ce88fc2db0c56b16232James Dong pBufferHeader); 190881080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong 190981080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong VIDDEC_PTHREAD_MUTEX_LOCK(pComponentPrivate->outputFlushCompletionMutex); 191081080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong OMX_U32 nCountOutputBFromDsp = 0; 191181080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong pthread_mutex_lock(&pComponentPrivate->mutexOutputBFromDSP); 191281080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong nCountOutputBFromDsp = pComponentPrivate->nCountOutputBFromDsp; 191381080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong pthread_mutex_unlock(&pComponentPrivate->mutexOutputBFromDSP); 191481080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong if (pComponentPrivate->bIsOutputFlushPending && nCountOutputBFromDsp == 0) { 191581080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong VIDDEC_PTHREAD_MUTEX_SIGNAL(pComponentPrivate->outputFlushCompletionMutex); 191681080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong } 191781080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->outputFlushCompletionMutex); 191881080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong 191981080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong return ret; 192075654962d82cc9054c198ce88fc2db0c56b16232James Dong} 1921fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 1922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1923fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Return Buffers() 1924fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1925fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Called by Disable and Enable Buffers, return the buffers to their respective source. 1926fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1927fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param 1928fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1929fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_ErrorNone success, ready to roll 1930fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1931fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 1932fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 1933fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_ReturnBuffers (VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, OMX_U32 nParam1, OMX_BOOL bRetDSP) 1934fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1935fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8 i = 0; 1936fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1937fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE *pBuffHead; 1938fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1939fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "+++ENTERING\n"); 1940fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "pComponentPrivate 0x%p nParam1 0x%lx bRetDSP 0x%x\n",pComponentPrivate,nParam1,bRetDSP); 1941fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_VidDec_Return(pComponentPrivate); 1942fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_VidDec_Return(pComponentPrivate); 1943fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nParam1 == pComponentPrivate->pInPortFormat->nPortIndex || nParam1 == OMX_ALL) { 1944fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i = 0; i < pComponentPrivate->pInPortDef->nBufferCountActual; i++) { 1945fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((pComponentPrivate->pCompPort[VIDDEC_INPUT_PORT]->pBufferPrivate[i]->eBufferOwner == VIDDEC_BUFFER_WITH_DSP) && bRetDSP){ 1946b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER1(pComponentPrivate->dbg, "inBuffer 0x%p eBufferOwner 0x%x\n",pComponentPrivate->pCompPort[VIDDEC_INPUT_PORT]->pBufferPrivate[i]->pBufferHdr, 1947b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pCompPort[VIDDEC_INPUT_PORT]->pBufferPrivate[i]->eBufferOwner); 1948b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pCompPort[VIDDEC_INPUT_PORT]->pBufferPrivate[i]->eBufferOwner = VIDDEC_BUFFER_WITH_CLIENT; 1949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pCompPort[VIDDEC_INPUT_PORT]->pBufferPrivate[i]->pBufferHdr->nFilledLen = 0; 1950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1951fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1952fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 1953fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pCompPort[VIDDEC_INPUT_PORT]->pBufferPrivate[i]->pBufferHdr->pBuffer, 1954fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pCompPort[VIDDEC_INPUT_PORT]->pBufferPrivate[i]->pBufferHdr->nFilledLen, 1955fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleHLMM); 1956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1957fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 195875654962d82cc9054c198ce88fc2db0c56b16232James Dong eError = VIDDEC_EmptyBufferDone(pComponentPrivate, pComponentPrivate->pCompPort[VIDDEC_INPUT_PORT]->pBufferPrivate[i]->pBufferHdr); 1959fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1960fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nParam1 == pComponentPrivate->pOutPortFormat->nPortIndex || nParam1 == OMX_ALL) { 1963fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pCompPort[VIDDEC_OUTPUT_PORT]->hTunnelComponent != NULL) { 1964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i = 0; i < pComponentPrivate->pOutPortDef->nBufferCountActual; i++) { 1965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "tunnelVideoDecBuffer[%x]=%x-%lx\n",i, 1966fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pCompPort[VIDDEC_OUTPUT_PORT]->pBufferPrivate[i]->eBufferOwner,pComponentPrivate->pOutPortDef->nBufferCountActual); 1967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "enter return %lx\n",pComponentPrivate->pOutPortDef->nBufferCountActual); 1968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((pComponentPrivate->pCompPort[VIDDEC_OUTPUT_PORT]->pBufferPrivate[i]->eBufferOwner == VIDDEC_BUFFER_WITH_DSP) && bRetDSP){ 1969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pCompPort[VIDDEC_OUTPUT_PORT]->pBufferPrivate[i]->eBufferOwner = VIDDEC_BUFFER_WITH_TUNNELEDCOMP; 1970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "Buffer 0x%x eBufferOwner 0x%x\n",(int)pComponentPrivate->pCompPort[VIDDEC_OUTPUT_PORT]->pBufferPrivate[i]->pBufferHdr 1971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ,pComponentPrivate->pCompPort[VIDDEC_OUTPUT_PORT]->pBufferPrivate[i]->eBufferOwner); 1972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pCompPort[VIDDEC_OUTPUT_PORT]->pBufferPrivate[i]->pBufferHdr->nFilledLen = 0; 1973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1975fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 1976fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pCompPort[VIDDEC_OUTPUT_PORT]->pBufferPrivate[i]->pBufferHdr->pBuffer, 1977fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pCompPort[VIDDEC_OUTPUT_PORT]->pBufferPrivate[i]->pBufferHdr->nFilledLen, 1978fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleLLMM); 1979fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "VideDec->PostProc EmptyThisBuffer\n"); 1982fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "wait to return buffer\n"); 1983fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead = (OMX_BUFFERHEADERTYPE*)pComponentPrivate->pCompPort[VIDDEC_OUTPUT_PORT]->pBufferPrivate[i]->pBufferHdr; 1984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_Propagate_Mark(pComponentPrivate, pBuffHead); 1985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_EmptyThisBuffer(pComponentPrivate->pCompPort[VIDDEC_OUTPUT_PORT]->hTunnelComponent, pBuffHead); 1986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 1990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "non tunneling\n"); 1991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i = 0; i < pComponentPrivate->pOutPortDef->nBufferCountActual; i++) { 1992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((pComponentPrivate->pCompPort[VIDDEC_OUTPUT_PORT]->pBufferPrivate[i]->eBufferOwner == VIDDEC_BUFFER_WITH_DSP) && bRetDSP){ 1993b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER1(pComponentPrivate->dbg, "xBuffer 0x%p eBufferOwner 0x%x\n",pComponentPrivate->pCompPort[VIDDEC_OUTPUT_PORT]->pBufferPrivate[i]->pBufferHdr, 1994b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pCompPort[VIDDEC_OUTPUT_PORT]->pBufferPrivate[i]->eBufferOwner); 1995b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pCompPort[VIDDEC_OUTPUT_PORT]->pBufferPrivate[i]->eBufferOwner = VIDDEC_BUFFER_WITH_CLIENT; 1996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pCompPort[VIDDEC_OUTPUT_PORT]->pBufferPrivate[i]->pBufferHdr->nFilledLen = 0; 1997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1999fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 2000fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pCompPort[VIDDEC_OUTPUT_PORT]->pBufferPrivate[i]->pBufferHdr->pBuffer, 2001fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pCompPort[VIDDEC_OUTPUT_PORT]->pBufferPrivate[i]->pBufferHdr->nFilledLen, 2002fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleHLMM); 2003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2004b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 2005fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead = (OMX_BUFFERHEADERTYPE*)pComponentPrivate->pCompPort[VIDDEC_OUTPUT_PORT]->pBufferPrivate[i]->pBufferHdr; 2006fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_Propagate_Mark(pComponentPrivate, pBuffHead); 200775654962d82cc9054c198ce88fc2db0c56b16232James Dong eError = VIDDEC_FillBufferDone(pComponentPrivate, pBuffHead); 2008fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2009fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2010fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2011fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2012fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "---EXITING(0x%x)\n",eError); 2013fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 2014fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 2015fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2016fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2017fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 2018fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 2019fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Enable Port() 2020fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 2021fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Called by component thread, handles commands sent by the app. 2022fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 2023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param 2024fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 2025fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_ErrorNone success, ready to roll 2026fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 2027fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 2028fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 2029fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_EnablePort (VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, OMX_U32 nParam1) 2030fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 2031fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 2032fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "+++ENTERING\n"); 2033fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "pComponentPrivate 0x%p nParam1 0x%lx\n",pComponentPrivate, nParam1); 2034fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2035fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 2036fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while(1) { 2037fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nParam1 == VIDDEC_INPUT_PORT && (pComponentPrivate->eState == OMX_StateLoaded || pComponentPrivate->pInPortDef->bPopulated)) { 2038fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* return cmdcomplete event if input unpopulated */ 2039fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Populated VIDDEC_INPUT_PORT 0x%x\n",pComponentPrivate->pInPortDef->bEnabled); 2040fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle, 2041fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2042fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 2043fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortEnable, 2044fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_INPUT_PORT, 2045fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2046fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2047fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2048fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (nParam1 == VIDDEC_OUTPUT_PORT && (pComponentPrivate->eState == OMX_StateLoaded || 2049fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->bPopulated)) { 2050fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* return cmdcomplete event if output unpopulated */ 2051fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Populated VIDDEC_OUTPUT_PORT 0x%x\n",pComponentPrivate->pOutPortDef->bEnabled); 2052fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle, 2053fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2054fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 2055fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortEnable, 2056fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_OUTPUT_PORT, 2057fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2058fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2059fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2060fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (nParam1 == VIDDEC_BOTH_PORT && (pComponentPrivate->eState == OMX_StateLoaded || 2061fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pComponentPrivate->pInPortDef->bPopulated && 2062fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->bPopulated))) { 2063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* return cmdcomplete event if inout & output unpopulated */ 2064fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Enabling VIDDEC_OUTPUT_PORT 0x%x\n",pComponentPrivate->pOutPortDef->bEnabled); 2065fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Populated VIDDEC_INPUT_PORT 0x%x\n",pComponentPrivate->pOutPortDef->bEnabled); 2066fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle, 2067fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2068fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 2069fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortEnable, 2070fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_INPUT_PORT, 2071fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2072fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Populated VIDDEC_OUTPUT_PORT 0x%x\n",pComponentPrivate->pOutPortDef->bEnabled); 2073fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle, 2074fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2075fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 2076fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortEnable, 2077fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_OUTPUT_PORT, 2078fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2079fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2080fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2081fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (nParam1 == OMX_ALL && && (pComponentPrivate->eState == OMX_StateLoaded || 2082fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->bPopulated) && 2083fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pComponentPrivate->pCompPort[1]->hTunnelComponent != NULL)) { 2084fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* return cmdcomplete event if inout & output unpopulated */ 2085fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Enabling VIDDEC_OUTPUT_PORT 0x%x\n",pComponentPrivate->pOutPortDef->bEnabled); 2086fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Populated VIDDEC_INPUT_PORT 0x%x\n",pComponentPrivate->pOutPortDef->bEnabled); 2087fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle, 2088fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2089fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 2090fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortEnable, 2091fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_INPUT_PORT, 2092fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2093fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2094fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2095fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_WAIT_CODE(); 2096fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2097fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 2098fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nParam1 == VIDDEC_INPUT_PORT) { 2099fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Populated VIDDEC_INPUT_PORT IN 0x%x\n",pComponentPrivate->pInPortDef->bPopulated); 2100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((!(pComponentPrivate->eState == OMX_StateLoaded) && !pComponentPrivate->pInPortDef->bPopulated) || 2101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->sInSemaphore.bSignaled) { 2102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_SEMAPHORE_WAIT(pComponentPrivate->sInSemaphore); 2103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eLCMLState == VidDec_LCML_State_Unload && 2107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bDynamicConfigurationInProgress == OMX_FALSE && 2108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->bEnabled == OMX_TRUE && 2109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->bEnabled == OMX_TRUE){ 2110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "BSC VIDDEC_INPUT_PORT\n"); 2111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = VIDDEC_LoadCodec(pComponentPrivate); 2112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone){ 2113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle, 2117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 2119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortEnable, 2120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_INPUT_PORT, 2121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (nParam1 == VIDDEC_OUTPUT_PORT) { 2124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Populated VIDDEC_OUTPUT_PORT OUT 0x%x\n",pComponentPrivate->pOutPortDef->bPopulated); 2126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((!(pComponentPrivate->eState == OMX_StateLoaded) && !pComponentPrivate->pOutPortDef->bPopulated) || 2127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->sOutSemaphore.bSignaled) { 2128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_SEMAPHORE_WAIT(pComponentPrivate->sOutSemaphore); 2129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eLCMLState == VidDec_LCML_State_Unload && 2132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bDynamicConfigurationInProgress == OMX_FALSE && 2133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->bEnabled == OMX_TRUE && 2134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->bEnabled == OMX_TRUE){ 2135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "BSC VIDDEC_OUTPUT_PORT\n"); 2136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = VIDDEC_LoadCodec(pComponentPrivate); 2137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone){ 2138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle, 2142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 2144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortEnable, 2145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_OUTPUT_PORT, 2146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (nParam1 == OMX_ALL) { 2149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->pCompPort[1]->hTunnelComponent != NULL) { 2150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Populated VIDDEC_INPUT_PORT IN 0x%x\n",pComponentPrivate->pInPortDef->bPopulated); 2151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((!(pComponentPrivate->eState == OMX_StateLoaded) && !pComponentPrivate->pInPortDef->bPopulated) || 2152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->sInSemaphore.bSignaled) { 2153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_SEMAPHORE_WAIT(pComponentPrivate->sInSemaphore); 2154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eLCMLState == VidDec_LCML_State_Unload){ 2157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = VIDDEC_LoadCodec(pComponentPrivate); 2158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone){ 2159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle, 2163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 2165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortEnable, 2166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_INPUT_PORT, 2167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 2170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((!(pComponentPrivate->eState == OMX_StateLoaded) && !pComponentPrivate->pInPortDef->bPopulated) || 2171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->sInSemaphore.bSignaled) { 2172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_SEMAPHORE_WAIT(pComponentPrivate->sInSemaphore); 2173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eLCMLState == VidDec_LCML_State_Unload){ 2175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "BSC OMX_ALL\n"); 2176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = VIDDEC_LoadCodec(pComponentPrivate); 2177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone){ 2178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Populated VIDDEC_INPUT_PORT IN 0x%x\n",pComponentPrivate->pInPortDef->bPopulated); 2182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle, 2183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 2185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortEnable, 2186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_INPUT_PORT, 2187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((!(pComponentPrivate->eState == OMX_StateLoaded) && !pComponentPrivate->pOutPortDef->bPopulated) || 2189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->sOutSemaphore.bSignaled) { 2190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_SEMAPHORE_WAIT(pComponentPrivate->sOutSemaphore); 2191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Populated VIDDEC_INPUT_PORT IN 0x%x\n",pComponentPrivate->pInPortDef->bPopulated); 2193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle, 2194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 2196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortEnable, 2197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_OUTPUT_PORT, 2198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 2203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "---EXITING(0x%x)\n",eError); 2204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 2205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 2206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 2208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 2209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * HandleCommandFlush() 2210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 2211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Called by component thread, handles the flush command from thread. 2212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 2213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param 2214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 2215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_ErrorNone success, ready to roll 2216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 2217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 2218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 2219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_HandleCommandFlush(VIDDEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U32 nParam1, OMX_BOOL bPass) 2221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 2222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 2223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 aParam[4]; 2224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE *pLcmlHandle = NULL; 2225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "+++ENTERING\n"); 2227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "pComponentPrivate 0x%p nParam1 0x%lx\n",pComponentPrivate, nParam1); 2228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ( nParam1 == VIDDEC_INPUT_PORT || nParam1 == OMX_ALL){ 2230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(bPass) { 2231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_VidDec_Return(pComponentPrivate); 2232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_VidDec_Return(pComponentPrivate); 2233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_VidDec_Return(pComponentPrivate); 2234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eLCMLState != VidDec_LCML_State_Unload && 2237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState != VidDec_LCML_State_Destroy && 2238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML != NULL && pComponentPrivate->bLCMLHalted != OMX_TRUE){ 2239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin aParam[0] = USN_STRMCMD_FLUSH; 2240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin aParam[1] = VIDDEC_INPUT_PORT; 2241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin aParam[2] = 0; 2242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_LOCK(pComponentPrivate->sMutex); 2243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLCML; 2244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,EMMCodecControlStrmCtrl, (void*)aParam); 2245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 2246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 2247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 2248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_WAIT(pComponentPrivate->sMutex); 2251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 2252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_CircBuf_Flush(pComponentPrivate, VIDDEC_CBUFFER_TIMESTAMP, VIDDEC_INPUT_PORT); 2255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_VidDec_Return(pComponentPrivate); 2256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_VidDec_Return(pComponentPrivate); 2257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(bPass) { 225881080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong VIDDEC_PTHREAD_MUTEX_LOCK(pComponentPrivate->inputFlushCompletionMutex); 225981080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong pComponentPrivate->bIsInputFlushPending = OMX_TRUE; 226081080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong OMX_U32 nCountInputBFromDsp = 0; 226181080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong pthread_mutex_lock(&pComponentPrivate->mutexInputBFromDSP); 226281080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong nCountInputBFromDsp = pComponentPrivate->nCountInputBFromDsp; 226381080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong pthread_mutex_unlock(&pComponentPrivate->mutexInputBFromDSP); 226481080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong if (nCountInputBFromDsp > 0) { 226581080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong VIDDEC_PTHREAD_MUTEX_WAIT(pComponentPrivate->inputFlushCompletionMutex); 226681080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong } 226781080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong pComponentPrivate->bIsInputFlushPending = OMX_FALSE; 226881080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->inputFlushCompletionMutex); 2269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 2270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 2272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandFlush, 2273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_INPUT_PORT, 2274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ( nParam1 == VIDDEC_OUTPUT_PORT || nParam1 == OMX_ALL){ 2279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(bPass){ 2280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_VidDec_Return(pComponentPrivate); 2281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_VidDec_Return(pComponentPrivate); 2282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_VidDec_Return(pComponentPrivate); 2283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eLCMLState != VidDec_LCML_State_Unload && 2285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState != VidDec_LCML_State_Destroy && 2286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML != NULL && pComponentPrivate->bLCMLHalted != OMX_TRUE){ 2287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin aParam[0] = USN_STRMCMD_FLUSH; 2288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin aParam[1] = VIDDEC_OUTPUT_PORT; 2289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin aParam[2] = 0; 2290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_LOCK(pComponentPrivate->sMutex); 2291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLCML; 2292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,EMMCodecControlStrmCtrl, (void*)aParam); 2293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 2294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 2295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 2296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_WAIT(pComponentPrivate->sMutex); 2299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 2300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_VidDec_Return(pComponentPrivate); 2302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_VidDec_Return(pComponentPrivate); 2303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(bPass) { 230481080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong VIDDEC_PTHREAD_MUTEX_LOCK(pComponentPrivate->outputFlushCompletionMutex); 230581080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong pComponentPrivate->bIsOutputFlushPending = OMX_TRUE; 230681080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong OMX_U32 nCountOutputBFromDsp = 0; 230781080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong pthread_mutex_lock(&pComponentPrivate->mutexOutputBFromDSP); 230881080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong nCountOutputBFromDsp = pComponentPrivate->nCountOutputBFromDsp; 230981080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong pthread_mutex_unlock(&pComponentPrivate->mutexOutputBFromDSP); 231081080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong if (nCountOutputBFromDsp > 0) { 231181080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong VIDDEC_PTHREAD_MUTEX_WAIT(pComponentPrivate->outputFlushCompletionMutex); 231281080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong } 231381080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong pComponentPrivate->bIsOutputFlushPending = OMX_FALSE; 231481080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->outputFlushCompletionMutex); 2315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 2316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 2318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandFlush, 2319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_OUTPUT_PORT, 2320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 2325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "---EXITING(0x%x)\n",eError); 2326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 2327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 2329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 2331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 2332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * HandleCommandMarkBuffer() 2333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 2334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Called by component thread, handles the Mark Buffer command from thread. 2335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 2336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param 2337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 2338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_ErrorNone success, ready to roll 2339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 2340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 2341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 2342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_HandleCommandMarkBuffer(VIDDEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U32 nParam1, OMX_PTR pCmdData) 2344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 2345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 2346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "+++ENTERING\n"); 2347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "pComponentPrivate 0x%p nParam1 0x%lx pCmdData 0x%p\n",pComponentPrivate, nParam1, pCmdData); 2348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "---EXITING(0x%x)\n",eError); 2349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 2350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 2352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 2353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 2354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_HandleCommand() state machine in charge of interpretation of every 2355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * command received from application, depending on which state the component 2356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * is. 2357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 2358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 2359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_HandleCommand (OMX_HANDLETYPE phandle, OMX_U32 nParam1) 2361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 2362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 message[4]; 2363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 iCount = 0; 2364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_COMPONENT_PRIVATE* pComponentPrivate = (VIDDEC_COMPONENT_PRIVATE*)phandle; 2365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE *pLcmlHandle = NULL; 2366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARAM_PORTDEFINITIONTYPE* pPortDefIn = pComponentPrivate->pInPortDef; 2367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARAM_PORTDEFINITIONTYPE* pPortDefOut = pComponentPrivate->pOutPortDef; 2368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 2369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin unsigned int cmd_rcv = 0; 2370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_HANDLETYPE hLCML = NULL; 2371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin void* p = NULL; 2372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 2374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin typedef OMX_ERRORTYPE (*LPFNDLLFUNC1)(OMX_HANDLETYPE); 2375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin HINSTANCE hDLL; 2376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LPFNDLLFUNC1 fpGetHandle1; 2377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 2378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin void* pMyLCML; 2379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_fpo fpGetHandle; 2380b65f253fdc60f6208a54911bee793d225f23cdf8James Dong char* error; 2381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "+++ENTERING\n"); 2384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "pComponentPrivate 0x%p phandle 0x%lx\n",pComponentPrivate, nParam1); 2385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->frameCounter = 0; 2386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin message[0] = 0x400; 2388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin message[1] = 100; 2389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin message[2] = 0; 2390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin p = (void*)&message; 2391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmd_rcv = (unsigned int)nParam1; 2392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin switch (nParam1) { 2394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_StateIdle: 2395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "Transitioning to OMX_StateIdle C 0x%x N 0x%lx\n",pComponentPrivate->eState, nParam1); 2396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->eState == OMX_StateIdle) { 2397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorSameState; 2398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE4(pComponentPrivate->dbg, "Same State 0x%x\n", eError); 2399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 2400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 2402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorSameState, 2403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 2404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Same state"); 2405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (( pComponentPrivate->eState == OMX_StateLoaded) || pComponentPrivate->eState == OMX_StateWaitForResources ) { 2408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp, 2410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_BoundaryStart | PERF_BoundarySetup); 2411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((pPortDefIn->bEnabled == OMX_TRUE && pPortDefOut->bEnabled == OMX_TRUE) || 2414fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pPortDefIn->bEnabled == OMX_TRUE && pComponentPrivate->pCompPort[1]->hTunnelComponent != NULL)) { 2415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "Before pPortDefIn->bEnabled 0x%x pPortDefOut->bEnabled 0x%x\n",pPortDefIn->bEnabled, pPortDefOut->bEnabled); 2416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 2417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while (1) { 2418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pPortDefIn->bPopulated && pComponentPrivate->pCompPort[1]->hTunnelComponent != NULL) { 2419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "tunneling pPortDefIn->bEnabled 0x%x pPortDefOut->bEnabled 0x%x\n", 2420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDefIn->bEnabled, pPortDefOut->bEnabled); 2421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pPortDefIn->bPopulated && pPortDefOut->bPopulated) { 2424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Standalone pPortDefIn->bEnabled 0x%x pPortDefOut->bEnabled 0x%x\n", 2425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDefIn->bEnabled, pPortDefOut->bEnabled); 2426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Sleep for a while, so the application thread can allocate buffers */ 2429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_WAIT_CODE(); 2430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 2432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->pCompPort[1]->hTunnelComponent != NULL) { 2433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((!pComponentPrivate->pInPortDef->bPopulated) || pComponentPrivate->sInSemaphore.bSignaled) { 2434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_SEMAPHORE_WAIT(pComponentPrivate->sInSemaphore); 2435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "tunneling pPortDefIn->bEnabled 0x%x pPortDefOut->bEnabled 0x%x\n", 2436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDefIn->bEnabled, pPortDefOut->bEnabled); 2437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 2440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((!pComponentPrivate->pOutPortDef->bPopulated) || pComponentPrivate->sOutSemaphore.bSignaled) { 2441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_SEMAPHORE_WAIT(pComponentPrivate->sInSemaphore); 2442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_SEMAPHORE_WAIT(pComponentPrivate->sOutSemaphore); 2443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "Standalone pPortDefIn->bEnabled 0x%x pPortDefOut->bEnabled 0x%x\n", 2444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDefIn->bEnabled, pPortDefOut->bEnabled); 2445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "After pPortDefIn->bEnabled 0x%x pPortDefOut->bEnabled 0x%x\n",pPortDefIn->bEnabled, pPortDefOut->bEnabled); 2449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 2451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 2452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->pCompPort[1]->hTunnelComponent != NULL) { 2453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->sInSemaphore.bSignaled){ 2454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_SEMAPHORE_WAIT(pComponentPrivate->sInSemaphore); 2455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 2458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->sInSemaphore.bSignaled){ 2459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_SEMAPHORE_WAIT(pComponentPrivate->sInSemaphore); 2460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->sOutSemaphore.bSignaled){ 2462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_SEMAPHORE_WAIT(pComponentPrivate->sOutSemaphore); 2463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#if 1 2469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 2470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pMyLCML = dlopen("libLCML.so", RTLD_LAZY); 2471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!pMyLCML) { 2472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "OMX_ErrorBadParameter\n"); 2473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fputs(dlerror(), stderr); 2474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 2475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fpGetHandle = dlsym(pMyLCML, "GetHandle"); 2478b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if ((error = dlerror()) != NULL) { 2479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "OMX_ErrorBadParameter\n"); 2480b65f253fdc60f6208a54911bee793d225f23cdf8James Dong fputs(error, stderr); 2481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dlclose(pMyLCML); 2482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pMyLCML = NULL; 2483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 2484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = (*fpGetHandle)(&hLCML); 2487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 2488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "OMX_ErrorBadParameter\n"); 2489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dlclose(pMyLCML); 2490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pMyLCML = NULL; 2491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 2492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pModLCML = pMyLCML; 2495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 2496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDLL = LoadLibraryEx(TEXT("OAF_BML.dll"), NULL, 0); 2497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (hDLL == NULL) { 2498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "BML Load Failed!!!\n"); 2499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 2500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fpGetHandle1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,TEXT("GetHandle")); 2503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!fpGetHandle1) { 2504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* handle the error */ 2505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "OMX_ErrorBadParameter\n"); 2506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin FreeLibrary(hDLL); 2507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDLL = NULL; 2508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 2509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* call the function */ 2512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = fpGetHandle1(&hLCML); 2513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 2514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "OMX_ErrorBadParameter\n"); 2515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin FreeLibrary(hDLL); 2516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDLL = NULL; 2517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 2518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pModLCML = hDLL; 2521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState = VidDec_LCML_State_Load; 2524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "LCML Handler 0x%p\n",hLCML); 2525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*(LCML_DSP_INTERFACE*)pComponentPrivate->pLCML = (LCML_DSP_INTERFACE*)hLCML;*/ 2526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML = (LCML_DSP_INTERFACE*)hLCML; 2527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML->pComponentPrivate = pComponentPrivate; 2528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->lcml_nCntOpReceived = 0; 2532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 2534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 2535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLCMLOut = OMX_TRUE; 2536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingAVC) { 2538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = VIDDEC_InitDSP_H264Dec(pComponentPrivate); 2539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG4 || 2541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingH263) { 2542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = VIDDEC_InitDSP_Mpeg4Dec(pComponentPrivate); 2543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG2) { 2545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = VIDDEC_InitDSP_Mpeg2Dec(pComponentPrivate); 2546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingWMV) { 2548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = VIDDEC_InitDSP_WMVDec(pComponentPrivate); 2549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_SPARK_CODE 2551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (VIDDEC_SPARKCHECK) { 2552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = VIDDEC_InitDSP_SparkDec(pComponentPrivate); 2553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 2556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "OMX_ErrorUnsupportedSetting\n"); 2557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUnsupportedSetting; 2558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 2559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 2561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorUnsupportedSetting, 2562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 2563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "DSP Initialization"); 2564fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2565fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /************************************************************************/ 2567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /************************************************************************/ 2568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /************************************************************************/ 2569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone){ 2570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eLCMLState != VidDec_LCML_State_Unload && 2571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pModLCML != NULL){ 2572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 2573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->pModLCML != NULL){ 2574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dlclose(pComponentPrivate->pModLCML); 2575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pModLCML = NULL; 2576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML = NULL; 2577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState = VidDec_LCML_State_Unload; 2578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 2580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->pModLCML != NULL){ 2581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin FreeLibrary(pComponentPrivate->pModLCML); 2582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pModLCML = NULL; 2583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML = NULL; 2584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState = VidDec_LCML_State_Unload; 2585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLCMLHalted = OMX_TRUE; 2589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "LCML Error %x\n", pComponentPrivate->eState); 2591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 2592fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 2594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 2595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 2596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "DSP Initialization"); 2597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 2601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLCMLOut = OMX_FALSE; 2602fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLCMLHalted = OMX_FALSE; 2604fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLCML; 2605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!pLcmlHandle) { 2606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "OMX_ErrorBadParameter\n"); 2607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 2608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 2609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2610fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 2611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorHardware, 2612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 2613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Lcml Handle NULL"); 2614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState = VidDec_LCML_State_Init; 2617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "OUTPUT width=%lu height=%lu\n", pComponentPrivate->pOutPortDef->format.video.nFrameWidth, pComponentPrivate->pOutPortDef->format.video.nFrameHeight); 2618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "INPUT width=%lu height=%lu\n", pComponentPrivate->pInPortDef->format.video.nFrameWidth, pComponentPrivate->pInPortDef->format.video.nFrameHeight); 2619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#if 1 2622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 2623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->rmproxyCallback.RMPROXY_Callback = (void *) VIDDEC_ResourceManagerCallback; 2624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eRMProxyState != VidDec_RMPROXY_State_Unload){ 2625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRMGR2(pComponentPrivate->dbg, "memory usage 1 %u : %u bytes\n",(unsigned int)pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel0],(unsigned int)VIDDEC_MEMUSAGE); 2626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingAVC) { 2627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pComponentPrivate->pHandle, RMProxy_RequestResource, OMX_H264_Decode_COMPONENT, VIDDEC_GetRMFrecuency(pComponentPrivate), VIDDEC_MEMUSAGE, &(pComponentPrivate->rmproxyCallback)); 2628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG4) { 2630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pComponentPrivate->pHandle, RMProxy_RequestResource, OMX_MPEG4_Decode_COMPONENT, VIDDEC_GetRMFrecuency(pComponentPrivate), VIDDEC_MEMUSAGE, &(pComponentPrivate->rmproxyCallback)); 2631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingH263) { 2633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pComponentPrivate->pHandle, RMProxy_RequestResource, OMX_H263_Decode_COMPONENT, VIDDEC_GetRMFrecuency(pComponentPrivate), VIDDEC_MEMUSAGE, &(pComponentPrivate->rmproxyCallback)); 2634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG2) { 2636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pComponentPrivate->pHandle, RMProxy_RequestResource, OMX_MPEG2_Decode_COMPONENT, VIDDEC_GetRMFrecuency(pComponentPrivate), VIDDEC_MEMUSAGE, &(pComponentPrivate->rmproxyCallback)); 2637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingWMV) { 2639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pComponentPrivate->pHandle, RMProxy_RequestResource, OMX_WMV_Decode_COMPONENT, VIDDEC_GetRMFrecuency(pComponentPrivate), VIDDEC_MEMUSAGE, &(pComponentPrivate->rmproxyCallback)); 2640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_SPARK_CODE 2642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (VIDDEC_SPARKCHECK) { 2643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pComponentPrivate->pHandle, RMProxy_RequestResource, OMX_MPEG4_Decode_COMPONENT, VIDDEC_GetRMFrecuency(pComponentPrivate), VIDDEC_MEMUSAGE, &(pComponentPrivate->rmproxyCallback)); 2644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 2647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUnsupportedSetting; 2648fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 2649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 2651fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorUnsupportedSetting, 2652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMajor, 2653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "RM SendCommand OMX_ErrorUnsupportedSetting Error"); 2654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRMGR4(pComponentPrivate->dbg, "OMX_ErrorUnsupportedSetting 0x%x\n",eError); 2655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 2658fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState = OMX_StateLoaded; 2659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 2660fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2661fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 2662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorInsufficientResources, 2663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMajor, 2664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "RM SendCommand Error"); 2665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRMGR4(pComponentPrivate->dbg, "OMX_ErrorUnsupportedSetting 0x%x\n",eError); 2666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eRMProxyState = VidDec_RMPROXY_State_Registered; 2669fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2670fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Send command to USN to do the propagation of the EOS flag */ 2673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->eLCMLState != VidDec_LCML_State_Unload && 2674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->eLCMLState != VidDec_LCML_State_Destroy && 2675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pLCML != NULL && 2676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bLCMLHalted != OMX_TRUE){ 2677b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "LCML_ControlCodec called EMMCodecControlUsnEos 0x%p\n",pLcmlHandle); 2678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,EMMCodecControlUsnEos, NULL); 2679b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 2680b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "error in EMMCodecControlUsnEos %x\n",eError); 2681b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 2682b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 2683b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2684b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 2685b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorHardware, 2686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_TI_ErrorSevere, 2687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin "LCML_ControlCodec EMMCodecControlUsnEos function"); 2688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "OMX_ErrorHardware 0x%x\n",eError); 2689b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 2690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat != OMX_VIDEO_CodingWMV) { 2693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eLCMLState != VidDec_LCML_State_Unload && 2694fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState != VidDec_LCML_State_Destroy && 2695fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML != NULL && 2696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLCMLHalted != OMX_TRUE){ 2697fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingAVC) { 2698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin message[1] = 4; 2699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 2701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin message[1] = 100; 2702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin message[0] = 0x400; 2704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin message[2] = 0; 2705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin p = (void*)&message; 2706fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_LOCK(pComponentPrivate->sMutex); 2707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "LCML_ControlCodec called EMMCodecControlSendDspMessage 0x%p\n",pLcmlHandle); 2708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,EMMCodecControlSendDspMessage, (void *)p); 2709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 2710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "error in EMMCodecControlSendDspMessage %x\n",eError); 2711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 2712fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 2713fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 2715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorHardware, 2716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 2717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "LCML_ControlCodec function"); 2718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "OMX_ErrorHardware 0x%x\n",eError); 2719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 2720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_WAIT(pComponentPrivate->sMutex); 2723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 2724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState = OMX_StateIdle; 2728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsPaused = 0; 27291348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong 2730b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* Decrement reference count with signal enabled */ 2731b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(RemoveStateTransition(pComponentPrivate, OMX_TRUE) != OMX_ErrorNone) { 2732b65f253fdc60f6208a54911bee793d225f23cdf8James Dong return OMX_ErrorUndefined; 2733b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 27341348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong 2735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 2736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 2738fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandStateSet, 2739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState, 2740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2741fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "Transition to OMX_StateIdle\n"); 2742fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2744fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->eState == OMX_StateExecuting || pComponentPrivate->eState == OMX_StatePause) { 2745fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Set the bIsStopping bit*/ 27464e501478686a1b42da255e58d95494710f9d5c9cBenny Wong if (pComponentPrivate->bDynamicConfigurationInProgress == OMX_TRUE) { 2747b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->bDynamicConfigurationInProgress = OMX_FALSE; 27484e501478686a1b42da255e58d95494710f9d5c9cBenny Wong OMX_PRSTATE1(pComponentPrivate->dbg, "We were doing DynamicConfiguration, canceling it. %d \n",pComponentPrivate->bDynamicConfigurationInProgress); 27494e501478686a1b42da255e58d95494710f9d5c9cBenny Wong } 2750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsStopping = 1; 2751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE1(pComponentPrivate->dbg, "bIsStopping 0x%lx\n",pComponentPrivate->bIsStopping); 2752fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE1(pComponentPrivate->dbg, "eExecuteToIdle 0x%x\n",pComponentPrivate->eExecuteToIdle); 2753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_VidDec_Return(pComponentPrivate); 2754fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_VidDec_Return(pComponentPrivate); 2755fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2756fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp, 2758fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_BoundaryComplete | PERF_BoundarySteadyState); 2759fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2760fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsPaused = 0; 2761b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->iEndofInputSent = 0; 2762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/********************************************************************************************************************/ 2763fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->bIsStopping == OMX_TRUE) { 2764fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsPaused = OMX_FALSE; 2765fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eLCMLState != VidDec_LCML_State_Unload && 2766fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState != VidDec_LCML_State_Destroy && 2767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML != NULL && 2768fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLCMLHalted != OMX_TRUE){ 2769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_LOCK(pComponentPrivate->sMutex); 2770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE *)pComponentPrivate->pLCML; 2771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, MMCodecControlStop, NULL); 2772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 2773fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 2774fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Error Occurred in Codec Stop...\n"); 2775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 2776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState = VidDec_LCML_State_Stop; 2779fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_WAIT(pComponentPrivate->sMutex); 2780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 2781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_HandleCommandFlush(pComponentPrivate, -1, OMX_FALSE); 2783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#if 1 2785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 2786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eRMProxyState != VidDec_RMPROXY_State_Unload){ 2787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRMGR2(pComponentPrivate->dbg, "memory usage 2 %d : %d bytes\n",(unsigned int)pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel0],(unsigned int)VIDDEC_MEMUSAGE); 2788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingAVC) { 2789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pComponentPrivate->pHandle, RMProxy_StateSet, OMX_H264_Decode_COMPONENT, OMX_StateIdle, VIDDEC_MEMUSAGE, NULL); 2790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG4) { 2792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pComponentPrivate->pHandle, RMProxy_StateSet, OMX_MPEG4_Decode_COMPONENT, OMX_StateIdle, VIDDEC_MEMUSAGE, NULL); 2793fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2794fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingH263) { 2795fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pComponentPrivate->pHandle, RMProxy_StateSet, OMX_H263_Decode_COMPONENT, OMX_StateIdle, VIDDEC_MEMUSAGE, NULL); 2796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG2) { 2798fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pComponentPrivate->pHandle, RMProxy_StateSet, OMX_MPEG2_Decode_COMPONENT, OMX_StateIdle, VIDDEC_MEMUSAGE, NULL); 2799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingWMV) { 2801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pComponentPrivate->pHandle, RMProxy_StateSet, OMX_WMV_Decode_COMPONENT, OMX_StateIdle, VIDDEC_MEMUSAGE, NULL); 2802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_SPARK_CODE 2804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (VIDDEC_SPARKCHECK) { 2805fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pComponentPrivate->pHandle, RMProxy_StateSet, OMX_MPEG4_Decode_COMPONENT, OMX_StateIdle, VIDDEC_MEMUSAGE, NULL); 2806fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2808fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2809fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2810fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2811d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato OMX_MEMFREE_STRUCT_DSPALIGN(pComponentPrivate->pUalgParams,OMX_PTR); 2812fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2813fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsStopping = OMX_FALSE; 2814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState = OMX_StateIdle; 2815b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* Decrement reference count with signal enabled */ 2816b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(RemoveStateTransition(pComponentPrivate, OMX_TRUE) != OMX_ErrorNone) { 2817b65f253fdc60f6208a54911bee793d225f23cdf8James Dong return OMX_ErrorUndefined; 2818b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 2819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 2820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 2822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandStateSet, 2823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState, 2824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 2826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bTransPause = 0; 2827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsPaused = 0; 2828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eExecuteToIdle = OMX_StateInvalid; 2829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/********************************************************************************************************************/ 2831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 2834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorIncorrectStateTransition; 2835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 2836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 2838fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorIncorrectStateTransition, 2839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 2840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2841fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "OMX_ErrorHardware 0x%x\n",eError); 2842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eExecuteToIdle = OMX_StateInvalid; 2844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE1(pComponentPrivate->dbg, "Passing bIsStopping 0x%lx\n",pComponentPrivate->bIsStopping); 2845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE1(pComponentPrivate->dbg, "Passing eExecuteToIdle 0x%x\n",pComponentPrivate->eExecuteToIdle); 2846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2847fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2848fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_StateExecuting: 2849fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2850fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->lcml_nCntOpReceived = 0; 2851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "Transitioning to OMX_StateExecuting C 0x%x N 0x%lx\n",pComponentPrivate->eState, nParam1); 2853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->eState == OMX_StateExecuting) { 2854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorSameState; 2855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle, 2856fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2857fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 2858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorSameState, 2859fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 2860fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Invalid State"); 2861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE4(pComponentPrivate->dbg, "OMX_ErrorSameState 0x%x\n",eError); 2862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2863fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->eState == OMX_StateIdle || pComponentPrivate->eState == OMX_StatePause) { 2864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLCML; 2865fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsPaused = 0; 2866fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFirstBuffer = 1; 2867fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eLCMLState != VidDec_LCML_State_Unload && 2868fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState != VidDec_LCML_State_Destroy && 2869fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML != NULL && 2870fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLCMLHalted != OMX_TRUE){ 2871fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "LCML_ControlCodec called EMMCodecControlStart 0x%p\n",pLcmlHandle); 2872fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,EMMCodecControlStart,NULL); 2873fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 2874fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 2875fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 2876fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2877fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 2878fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorHardware, 2879fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 2880fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "LCML_ControlCodec Start"); 2881fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2882fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Occurred in Codec Start... 0x%x\n",eError); 2883fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2885fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState = VidDec_LCML_State_Start; 2886fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingAVC && 2887fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState == OMX_StateIdle) { 2888fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin H264_Iualg_Cmd_SetStatus* pDynParams = NULL; 2889fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char* pTmp = NULL; 2890fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 cmdValues[3] = {0, 0, 0}; 2891fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_Load_Defaults(pComponentPrivate, VIDDEC_INIT_IDLEEXECUTING); 2893fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "Initializing DSP for h264 eCompressionFormat 0x%x\n", 2894fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eCompressionFormat); 2895fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_MALLOC_STRUCT_SIZED(pDynParams, H264_Iualg_Cmd_SetStatus, sizeof(H264_Iualg_Cmd_SetStatus) + VIDDEC_PADDING_FULL,pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel4]); 2896fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pDynParams == NULL) { 2897fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TRACE4(pComponentPrivate->dbg, "Error: Malloc failed\n"); 2898fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 2899fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2900fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2901fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memset(pDynParams, 0, sizeof(H264_Iualg_Cmd_SetStatus) + VIDDEC_PADDING_FULL); 2902fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTmp = (char*)pDynParams; 2903fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTmp += VIDDEC_PADDING_HALF; 2904fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams = (H264_Iualg_Cmd_SetStatus*)pTmp; 2905fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_SN_R8_14 2906fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->size = sizeof(H264_Iualg_Cmd_SetStatus); 2907fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2908fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulDecodeHeader = 1; 2909fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulDisplayWidth = 0; 2910fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulFrameSkipMode = 0; 2911fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulPPType = 0; 2912fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2913fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmdValues[0] = IUALG_CMD_SETSTATUS; 2914fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmdValues[1] = (OMX_U32)(pDynParams); 2915fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmdValues[2] = sizeof(H264_Iualg_Cmd_SetStatus); 2916fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2917fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin p = (void*)&cmdValues; 2918fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eLCMLState != VidDec_LCML_State_Unload && 2919fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState != VidDec_LCML_State_Destroy && 2920fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML != NULL && 2921fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLCMLHalted != OMX_TRUE){ 2922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_LOCK(pComponentPrivate->sMutex); 2923fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 2924fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EMMCodecControlAlgCtrl, 2925fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void*)p); 2926fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 2927fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 2928fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 2929d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato OMX_MEMFREE_STRUCT_DSPALIGN(pDynParams,H264_Iualg_Cmd_SetStatus); 2930fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2931fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2932fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_WAIT(pComponentPrivate->sMutex); 2933fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 2934fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2935d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato 2936d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato OMX_MEMFREE_STRUCT_DSPALIGN(pDynParams,H264_Iualg_Cmd_SetStatus); 2937fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2938fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 2939fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Codec AlgCtrl 0x%x\n",eError); 2940fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2941fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2942fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2943fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG2 && 2944fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState == OMX_StateIdle) { 2945fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin MP2VDEC_UALGDynamicParams* pDynParams = NULL; 2946fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char* pTmp = NULL; 2947fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 cmdValues[3] = {0, 0, 0}; 2948fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_Load_Defaults(pComponentPrivate, VIDDEC_INIT_IDLEEXECUTING); 2950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "Initializing DSP for wmv9 eCompressionFormat 0x%x\n", 2951fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eCompressionFormat); 2952fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_MALLOC_STRUCT_SIZED(pDynParams, MP2VDEC_UALGDynamicParams, sizeof(MP2VDEC_UALGDynamicParams) + VIDDEC_PADDING_FULL,pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel4]); 2953fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memset(pDynParams, 0, sizeof(MP2VDEC_UALGDynamicParams) + VIDDEC_PADDING_FULL); 2954fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTmp = (char*)pDynParams; 2955fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTmp += VIDDEC_PADDING_HALF; 2956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams = (MP2VDEC_UALGDynamicParams*)pTmp; 2957fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2958fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_SN_R8_14 2959fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->size = sizeof(MP2VDEC_UALGDynamicParams); 2960fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nDisplayWidth > 0) { 2962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pInPortDef->format.video.nFrameWidth > pComponentPrivate->nDisplayWidth) { 2963fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nDisplayWidth = pComponentPrivate->pInPortDef->format.video.nFrameWidth; 2964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulDisplayWidth = (((pComponentPrivate->nDisplayWidth + 15) >> 4) << 4); 2966fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nDisplayWidth != pDynParams->ulDisplayWidth ) { 2967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nDisplayWidth = pDynParams->ulDisplayWidth; 2968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "warning Display Width adjusted to %lu\n",pDynParams->ulDisplayWidth); 2969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pCompPort[1]->hTunnelComponent != NULL){ 2972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pInPortDef->format.video.nFrameWidth > pComponentPrivate->nDisplayWidth) { 2973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nDisplayWidth = pComponentPrivate->pInPortDef->format.video.nFrameWidth; 2974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2975fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulDisplayWidth = (((pComponentPrivate->nDisplayWidth + 15) >> 4) << 4); 2976fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nDisplayWidth != pDynParams->ulDisplayWidth ) { 2977fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nDisplayWidth = pDynParams->ulDisplayWidth; 2978fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "warning Display Width adjusted to %lu\n",pDynParams->ulDisplayWidth); 2979fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 2982fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulDisplayWidth = 0; 2983fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulDecodeHeader = 0; 2985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulFrameSkipMode = 0; 2986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulPPType = 0; 2987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulPpNone = 0; 2988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pOutPortDef->format.video.eColorFormat == VIDDEC_COLORFORMAT422) { 2989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulDyna_chroma_format = MP2VIDDEC_YUVFORMAT_INTERLEAVED422; 2990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 2992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulDyna_chroma_format = MP2VIDDEC_YUVFORMAT_PLANAR420; 2993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2994fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2995fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmdValues[0] = IUALG_CMD_SETSTATUS; 2996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmdValues[1] = (OMX_U32)(pDynParams); 2997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmdValues[2] = sizeof(MP2VDEC_UALGDynamicParams); 2998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2999fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bTransPause = 0; 3000fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin p = (void*)&cmdValues; 3001fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eLCMLState != VidDec_LCML_State_Unload && 3002fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState != VidDec_LCML_State_Destroy && 3003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML != NULL && 3004fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLCMLHalted != OMX_TRUE){ 3005fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 3006fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EMMCodecControlAlgCtrl, 3007fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void*)p); 3008fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone){ 3009fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 3010fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3011fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 3012fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 3013fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 3014fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0x0, 3015fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "LCML_ControlCodec function"); 3016d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato OMX_MEMFREE_STRUCT_DSPALIGN(pDynParams,MP2VDEC_UALGDynamicParams); 3017fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3018fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3019fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while(1) { 3020fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->bTransPause != 0) { 3021fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bTransPause = 0; 3022fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 3023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3024fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_WAIT_CODE(); 3025fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3026fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3027fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3028d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato OMX_MEMFREE_STRUCT_DSPALIGN(pDynParams,MP2VDEC_UALGDynamicParams); 3029fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3030fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 3031fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Codec AlgCtrl 0x%x\n",eError); 3032fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3033fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3034fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3035fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_SPARK_CODE 3036fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (VIDDEC_SPARKCHECK) { 3037fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eState == OMX_StateIdle) { 3038fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin SPARKVDEC_UALGDynamicParams* pDynParams = NULL; 3039fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char* pTmp = NULL; 3040fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 cmdValues[3] = {0, 0, 0}; 3041fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3042fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_Load_Defaults(pComponentPrivate, VIDDEC_INIT_IDLEEXECUTING); 3043fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "Initializing DSP for mpeg4 and h263 eCompressionFormat 0x%x\n", 3044fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eCompressionFormat); 3045fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_MALLOC_STRUCT_SIZED(pDynParams, SPARKVDEC_UALGDynamicParams, sizeof(SPARKVDEC_UALGDynamicParams) + VIDDEC_PADDING_FULL,pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel4]); 3046fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pDynParams == NULL) { 3047fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TRACE4(pComponentPrivate->dbg, "Error: Malloc failed\n"); 3048fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 3049fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3050fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3051fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memset(pDynParams, 0, sizeof(SPARKVDEC_UALGDynamicParams) + VIDDEC_PADDING_FULL); 3052fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTmp = (char*)pDynParams; 3053fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTmp += VIDDEC_PADDING_HALF; 3054fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams = (SPARKVDEC_UALGDynamicParams*)pTmp; 3055fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #ifdef VIDDEC_SN_R8_14 3056fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->size = sizeof(SPARKVDEC_UALGDynamicParams); 3057fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #endif 3058fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulDecodeHeader = 0; 3059fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulDisplayWidth = 0; 3060fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulFrameSkipMode = 0; 3061fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulPPType = 0; 3062fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmdValues[0] = IUALG_CMD_SETSTATUS; 3064fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmdValues[1] = (OMX_U32)(pDynParams); 3065fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmdValues[2] = sizeof(SPARKVDEC_UALGDynamicParams); 3066fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3067fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*pComponentPrivate->bTransPause = 0;*//*flag to wait for the generated event*/ 3068fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_LOCK(pComponentPrivate->sMutex); 3069fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin p = (void*)&cmdValues; 3070fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eLCMLState != VidDec_LCML_State_Unload && 3071fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState != VidDec_LCML_State_Destroy && 3072fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML != NULL && 3073fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLCMLHalted != OMX_TRUE){ 3074fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 3075fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EMMCodecControlAlgCtrl, 3076fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void*)p); 3077fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 3078fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 3079d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato OMX_MEMFREE_STRUCT_DSPALIGN(pDynParams,SPARKVDEC_UALGDynamicParams); 3080fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3081fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3082fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_WAIT(pComponentPrivate->sMutex); 3083fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 3084fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3085fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3086d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato OMX_MEMFREE_STRUCT_DSPALIGN(pDynParams,SPARKVDEC_UALGDynamicParams); 3087fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3088fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 3089fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Codec AlgCtrl 0x%x\n",eError); 3090fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3091fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3092fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3093fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3094fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 3095fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 3096fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eState == OMX_StateIdle) { 3097b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = VIDDEC_SetMpeg4_Parameters(pComponentPrivate); 3098fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone){ 3099fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Start existing code */ 3105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#if 1 3106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 3107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eRMProxyState != VidDec_RMPROXY_State_Unload){ 3108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRMGR2(pComponentPrivate->dbg, "memory usage 3 %d : %d bytes\n",(unsigned int)pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel0],(unsigned int)VIDDEC_MEMUSAGE); 3109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingAVC) { 3110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pComponentPrivate->pHandle, RMProxy_StateSet, OMX_H264_Decode_COMPONENT, OMX_StateExecuting, VIDDEC_MEMUSAGE, NULL); 3111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG4) { 3113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pComponentPrivate->pHandle, RMProxy_StateSet, OMX_MPEG4_Decode_COMPONENT, OMX_StateExecuting, VIDDEC_MEMUSAGE, NULL); 3114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingH263) { 3116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pComponentPrivate->pHandle, RMProxy_StateSet, OMX_H263_Decode_COMPONENT, OMX_StateExecuting, VIDDEC_MEMUSAGE, NULL); 3117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG2) { 3119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pComponentPrivate->pHandle, RMProxy_StateSet, OMX_MPEG2_Decode_COMPONENT, OMX_StateExecuting, VIDDEC_MEMUSAGE, NULL); 3120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingWMV) { 3122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pComponentPrivate->pHandle, RMProxy_StateSet, OMX_WMV_Decode_COMPONENT, OMX_StateExecuting, VIDDEC_MEMUSAGE, NULL); 3123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_SPARK_CODE 3125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (VIDDEC_SPARKCHECK) { 3126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pComponentPrivate->pHandle, RMProxy_StateSet, OMX_MPEG4_Decode_COMPONENT, OMX_StateExecuting, VIDDEC_MEMUSAGE, NULL); 3127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 3129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 3130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUnsupportedSetting; 3131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 3133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 3134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorUnsupportedSetting, 3135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 3136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "RM SendCommand OMX_ErrorUnsupportedSetting Error"); 3137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "OMX_ErrorUnsupportedSetting 0x%x\n",eError); 3138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 3141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState = OMX_StateLoaded; 3142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 3144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 3145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorInsufficientResources, 3146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMajor, 3147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "RM SendCommand Error"); 3148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRMGR4(pComponentPrivate->dbg, "OMX_ErrorUnsupportedSetting 0x%x\n",eError); 3149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 3150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 3153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 3154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 3156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsPaused = 0; 3157b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->iEndofInputSent = 0; 3158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState = OMX_StateExecuting; 3159b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* Decrement reference count with signal enabled */ 3160b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(RemoveStateTransition(pComponentPrivate, OMX_TRUE) != OMX_ErrorNone) { 3161b65f253fdc60f6208a54911bee793d225f23cdf8James Dong return OMX_ErrorUndefined; 3162b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 3163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 3165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 3166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandStateSet, 3167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState, 3168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 3169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "Transition to OMX_StateExecuting\n"); 3170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 3172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorIncorrectStateTransition; 3173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 3175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 3176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorIncorrectStateTransition, 3177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 3178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Incorrect State Transition"); 3179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE4(pComponentPrivate->dbg, "OMX_ErrorIncorrectStateTransition 0x%x\n",eError); 3180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 3182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_StateLoaded: 3183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "Transitioning to OMX_StateLoaded C 0x%x N 0x%lx\n",pComponentPrivate->eState, nParam1); 3184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->eState == OMX_StateLoaded) { 3185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorSameState; 3186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 3188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 3189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorSameState, 3190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 3191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Same State"); 3192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE4(pComponentPrivate->dbg, "OMX_ErrorSameState 0x%x\n",eError); 3193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->eState == OMX_StateIdle) { 3195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 3196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp, 3197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_BoundaryStart | PERF_BoundaryCleanup); 3198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 3199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_VidDec_Return(pComponentPrivate); 3200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_VidDec_Return(pComponentPrivate); 3201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eIdleToLoad = OMX_StateLoaded; 3202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eFirstBuffer.pFirstBufferSaved){ 3203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin free(pComponentPrivate->eFirstBuffer.pFirstBufferSaved); 3204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eFirstBuffer.pFirstBufferSaved = NULL; 3205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eFirstBuffer.bSaveFirstBuffer = OMX_FALSE; 3206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eFirstBuffer.nFilledLen = 0; 3207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 3209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eRMProxyState == VidDec_RMPROXY_State_Registered){ 3210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRMGR2(pComponentPrivate->dbg, "memory usage 4 %d : %d bytes\n",(unsigned int)pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel0],(unsigned int)VIDDEC_MEMUSAGE); 3211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingAVC) { 3212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pComponentPrivate->pHandle, RMProxy_FreeResource, OMX_H264_Decode_COMPONENT, 0, VIDDEC_MEMUSAGE, NULL); 3213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 3214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRMGR4(pComponentPrivate->dbg, "Error returned from destroy ResourceManagerProxy thread\n"); 3215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingWMV) { 3218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pComponentPrivate->pHandle, RMProxy_FreeResource, OMX_WMV_Decode_COMPONENT, 0, VIDDEC_MEMUSAGE, NULL); 3219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 3220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRMGR4(pComponentPrivate->dbg, "Error returned from destroy ResourceManagerProxy thread\n"); 3221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG4) { 3224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pComponentPrivate->pHandle, RMProxy_FreeResource, OMX_MPEG4_Decode_COMPONENT, 0, VIDDEC_MEMUSAGE, NULL); 3225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 3226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRMGR4(pComponentPrivate->dbg, "Error returned from destroy ResourceManagerProxy thread\n"); 3227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingH263) { 3230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pComponentPrivate->pHandle, RMProxy_FreeResource, OMX_H263_Decode_COMPONENT, 0, VIDDEC_MEMUSAGE, NULL); 3231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 3232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRMGR4(pComponentPrivate->dbg, "Error returned from destroy ResourceManagerProxy thread\n"); 3233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG2) { 3236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pComponentPrivate->pHandle, RMProxy_FreeResource, OMX_MPEG2_Decode_COMPONENT, 0, VIDDEC_MEMUSAGE, NULL); 3237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 3238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRMGR4(pComponentPrivate->dbg, "Error returned from destroy ResourceManagerProxy thread\n"); 3239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_SPARK_CODE 3242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (VIDDEC_SPARKCHECK) { 3243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pComponentPrivate->pHandle, RMProxy_FreeResource, OMX_MPEG4_Decode_COMPONENT, 0, VIDDEC_MEMUSAGE, NULL); 3244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 3245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRMGR4(pComponentPrivate->dbg, "Error returned from destroy ResourceManagerProxy thread\n"); 3246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 3249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 3250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUnsupportedSetting; 3251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eRMProxyState = VidDec_RMPROXY_State_Load; 3254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 3256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eLCMLState != VidDec_LCML_State_Unload && 3257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML != NULL){ 3258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "LCML_ControlCodec called EMMCodecControlDestroy 0x%p\n",pLcmlHandle); 3259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLCML; 3260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, EMMCodecControlDestroy, NULL); 3261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 3262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 3264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 3265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorHardware, 3266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 3267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 3268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "OMX_ErrorHardware 0x%x\n",eError); 3269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 3270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState = VidDec_LCML_State_Destroy; 3272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "LCML_ControlCodec called EMMCodecControlDestroy 0x%p\n",pLcmlHandle); 3273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "Closing LCML lib 0x%p\n",pComponentPrivate->pModLCML); 3276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 3278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->pModLCML != NULL){ 3279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dlclose(pComponentPrivate->pModLCML); 3280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pModLCML = NULL; 3281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML = NULL; 3282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 3284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->pModLCML != NULL){ 3285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin FreeLibrary(pComponentPrivate->pModLCML); 3286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pModLCML = NULL; 3287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML = NULL; 3288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 3290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState = VidDec_LCML_State_Unload; 3291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "Closed LCML lib 0x%p\n",pComponentPrivate->pModLCML); 3293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Waiting for unpopulate ports IN 0x%x OUT 0x%x\n",pPortDefIn->bEnabled,pPortDefOut->bEnabled); 3294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "Tunneling 0x%p\n",(pComponentPrivate->pCompPort[1]->hTunnelComponent)); 3295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((pPortDefIn->bEnabled == OMX_TRUE && pPortDefOut->bEnabled == OMX_TRUE) || 3296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pPortDefIn->bEnabled == OMX_TRUE && pComponentPrivate->pCompPort[1]->hTunnelComponent != NULL)) { 3297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 3298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while(1) { 3299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(!pPortDefIn->bPopulated && !pPortDefOut->bPopulated) { 3300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Standalone unpopulated ports IN 0x%x OUT 0x%x\n",pPortDefIn->bEnabled,pPortDefOut->bEnabled); 3301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 3302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsPaused = 0; 3303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState = OMX_StateLoaded; 3304b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* Decrement reference count with signal enabled */ 3305b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(RemoveStateTransition(pComponentPrivate, OMX_TRUE) != OMX_ErrorNone) { 3306b65f253fdc60f6208a54911bee793d225f23cdf8James Dong return OMX_ErrorUndefined; 3307b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 3308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 3310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 3311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandStateSet, 3312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState, 3313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 3314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "Transition to OMX_StateLoaded\n"); 3315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_Load_Defaults(pComponentPrivate, VIDDEC_INIT_VARS); 3316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eIdleToLoad = OMX_StateInvalid; 3317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 3318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(!pPortDefIn->bPopulated && (pComponentPrivate->pCompPort[1]->hTunnelComponent != NULL)) { 3320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Tunneling unpopulated ports IN 0x%x TUNNEL 0x%x\n", 3321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDefIn->bEnabled,pComponentPrivate->pCompPort[1]->hTunnelComponent); 3322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 3323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsPaused = 0; 3324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState = OMX_StateLoaded; 3325b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* Decrement reference count with signal enabled */ 3326b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(RemoveStateTransition(pComponentPrivate, OMX_TRUE) != OMX_ErrorNone) { 3327b65f253fdc60f6208a54911bee793d225f23cdf8James Dong return OMX_ErrorUndefined; 3328b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 3329b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 3331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 3332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandStateSet, 3333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState, 3334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 3335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "Transition to OMX_StateLoaded\n"); 3336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_Load_Defaults(pComponentPrivate, VIDDEC_INIT_VARS); 3337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eIdleToLoad = OMX_StateInvalid; 3338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 3339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_WAIT_CODE(); 3341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 3343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->pCompPort[1]->hTunnelComponent != NULL) { 3344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((!(pComponentPrivate->eState == OMX_StateLoaded) && pComponentPrivate->pInPortDef->bPopulated) || 3345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->sInSemaphore.bSignaled) { 3346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_SEMAPHORE_WAIT(pComponentPrivate->sInSemaphore); 3347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Tunneling unpopulated ports IN 0x%x TUNNEL 0x%p\n", 3349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDefIn->bEnabled,pComponentPrivate->pCompPort[1]->hTunnelComponent); 3350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 3351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsPaused = 0; 3352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState = OMX_StateLoaded; 33531348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong /* Decrement reference count with signal enabled */ 33541348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong if(RemoveStateTransition(pComponentPrivate, OMX_TRUE) != OMX_ErrorNone) { 3355b65f253fdc60f6208a54911bee793d225f23cdf8James Dong return OMX_ErrorUndefined; 33561348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong } 3357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 3359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 3360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandStateSet, 3361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState, 3362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 3363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "Transition to OMX_StateLoaded\n"); 3364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_Load_Defaults(pComponentPrivate, VIDDEC_INIT_VARS); 3365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eIdleToLoad = OMX_StateInvalid; 3366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 3368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((!(pComponentPrivate->eState == OMX_StateLoaded) && pComponentPrivate->pInPortDef->bPopulated) || 3369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->sInSemaphore.bSignaled) { 3370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_SEMAPHORE_WAIT(pComponentPrivate->sInSemaphore); 3371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((!(pComponentPrivate->eState == OMX_StateLoaded) && pComponentPrivate->pOutPortDef->bPopulated) || 3373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->sOutSemaphore.bSignaled) { 3374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_SEMAPHORE_WAIT(pComponentPrivate->sOutSemaphore); 3375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Standalone unpopulated ports IN 0x%x OUT 0x%x\n",pPortDefIn->bEnabled,pPortDefOut->bEnabled); 3377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 3378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsPaused = 0; 3379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState = OMX_StateLoaded; 33801348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong /* Decrement reference count with signal enabled */ 33811348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong if(RemoveStateTransition(pComponentPrivate, OMX_TRUE) != OMX_ErrorNone) { 3382b65f253fdc60f6208a54911bee793d225f23cdf8James Dong return OMX_ErrorUndefined; 33831348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong } 3384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 3386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 3387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandStateSet, 3388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState, 3389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 3390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "Transition to OMX_StateLoaded\n"); 3391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_Load_Defaults(pComponentPrivate, VIDDEC_INIT_VARS); 3392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eIdleToLoad = OMX_StateInvalid; 3393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 3398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 3399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp, 3400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_BoundaryComplete | PERF_BoundaryCleanup); 3401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 3402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 3405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 3406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->pCompPort[1]->hTunnelComponent != NULL) { 3407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->sInSemaphore.bSignaled){ 3408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_SEMAPHORE_WAIT(pComponentPrivate->sInSemaphore); 3409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 3412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->sInSemaphore.bSignaled){ 3413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_SEMAPHORE_WAIT(pComponentPrivate->sInSemaphore); 3414fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->sOutSemaphore.bSignaled){ 3416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_SEMAPHORE_WAIT(pComponentPrivate->sOutSemaphore); 3417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState = OMX_StateLoaded; 3420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsPaused = 0; 34211348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong /* Decrement reference count with signal enabled */ 34221348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong if(RemoveStateTransition(pComponentPrivate, OMX_TRUE) != OMX_ErrorNone) { 3423b65f253fdc60f6208a54911bee793d225f23cdf8James Dong return OMX_ErrorUndefined; 34241348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong } 3425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 3427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 3428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandStateSet, 3429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState, 3430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 3431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eIdleToLoad = OMX_StateInvalid; 3432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_Load_Defaults(pComponentPrivate, VIDDEC_INIT_VARS); 3433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "Transition to OMX_StateLoaded\n"); 3434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 3435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 3437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->eState == OMX_StateWaitForResources) { 3439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState = OMX_StateLoaded; 3440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsPaused = 0; 34411348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong /* Decrement reference count with signal enabled */ 34421348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong if(RemoveStateTransition(pComponentPrivate, OMX_TRUE) != OMX_ErrorNone) { 3443b65f253fdc60f6208a54911bee793d225f23cdf8James Dong return OMX_ErrorUndefined; 34441348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong } 3445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 3447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 3448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandStateSet, 3449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState, 3450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 3451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "Transition to OMX_StateLoaded\n"); 3452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 3453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 3455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorIncorrectStateTransition; 3456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 3458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 3459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorIncorrectStateTransition, 3460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 3461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 3462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "Incorrect State Transition 0x%x\n",eError); 3463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 3465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_StatePause: 3466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_VidDec_Return(pComponentPrivate); 3467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_VidDec_Return(pComponentPrivate); 3468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "Transitioning to OMX_StatePause C 0x%x N 0x%lx\n",pComponentPrivate->eState, nParam1); 3470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->eState == OMX_StatePause) { 3471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorSameState; 3472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 3474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 3475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorSameState, 3476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 3477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 3478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE4(pComponentPrivate->dbg, "Same State 0x%x\n",eError); 3479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 3480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->eState == OMX_StateExecuting) { 3482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 3483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->lcml_nCntOpReceived = 0; 3484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp, 3485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_BoundaryComplete | PERF_BoundarySteadyState); 3486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 3487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_LOCK(pComponentPrivate->sMutex); 3489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsPaused = 1; 3490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_VidDec_Return(pComponentPrivate); 3491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_VidDec_Return(pComponentPrivate); 3492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eLCMLState != VidDec_LCML_State_Unload && 3493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState != VidDec_LCML_State_Destroy && 3494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML != NULL && 3495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLCMLHalted != OMX_TRUE){ 3496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLCML; 3497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "LCML_ControlCodec called EMMCodecControlPause 0x%p\n",pLcmlHandle); 3498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, EMMCodecControlPause, NULL); 3499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 3500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 3501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Error during EMMCodecControlPause...\n"); 3502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 3504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 3505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 3506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 3507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 3508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 3509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 3510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 3512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_WAIT(pComponentPrivate->sMutex); 3513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 3514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState = VidDec_LCML_State_Pause; 3516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_VidDec_Return(pComponentPrivate); 3517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_VidDec_Return(pComponentPrivate); 3518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState = VidDec_LCML_State_Pause; 3519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 3520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsPaused = 1; 3521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState = OMX_StatePause; 35221348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong /* Decrement reference count with signal enabled */ 35231348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong if(RemoveStateTransition(pComponentPrivate, OMX_TRUE) != OMX_ErrorNone) { 35241348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong return OMX_ErrorUndefined; 35251348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong } 3526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 3528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 3529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandStateSet, 3530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState, 3531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 3532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 3534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->eState == OMX_StateIdle) { 3536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsPaused = 1; 3537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eLCMLState != VidDec_LCML_State_Unload && 3538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState != VidDec_LCML_State_Destroy && 3539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML != NULL && 3540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLCMLHalted != OMX_TRUE){ 3541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_LOCK(pComponentPrivate->sMutex); 3542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLCML; 3543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "LCML_ControlCodec called EMMCodecControlPause 0x%p\n",pLcmlHandle); 3544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, EMMCodecControlPause, NULL); 3545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 3546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "During EMMCodecControlPause...\n"); 3547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 3548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 3550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 3551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 3552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 3553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 3554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 3555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 3556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 3558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_WAIT(pComponentPrivate->sMutex); 3559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 3560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState = VidDec_LCML_State_Pause; 3562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 3563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsPaused = 1; 3564fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState = OMX_StatePause; 35651348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong /* Decrement reference count with signal enabled */ 35661348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong if(RemoveStateTransition(pComponentPrivate, OMX_TRUE) != OMX_ErrorNone) { 35671348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong return OMX_ErrorUndefined; 35681348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong } 3569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 3571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 3572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandStateSet, 3573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState, 3574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 3575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "Transition to OMX_StatePause\n"); 3576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 3578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorIncorrectStateTransition; 3579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 3581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 3582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorIncorrectStateTransition, 3583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 3584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Incorrect State Transition"); 3585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE4(pComponentPrivate->dbg, "Incorrect State Transition\n"); 3586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 3588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_StateInvalid: 3589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Transitioning to OMX_StateInvalid C 0x%x N 0x%lx\n",pComponentPrivate->eState, nParam1); 3590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->eState == OMX_StateInvalid) { 3591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorSameState; 3592fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 3594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 3595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorSameState, 3596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorCritical, 3597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Same State"); 3598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE4(pComponentPrivate->dbg, "Same State...\n"); 3599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 3600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->eState == OMX_StateIdle || pComponentPrivate->eState == OMX_StateExecuting) { 3602fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLCML; 3603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->eState == OMX_StateExecuting) { 3604fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eLCMLState != VidDec_LCML_State_Unload && 3605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState != VidDec_LCML_State_Destroy && 3606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML != NULL && 3607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLCMLHalted != OMX_TRUE) { 3608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_LOCK(pComponentPrivate->sMutex); 3609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "LCML_ControlCodec called MMCodecControlStop 0x%x\n",eError); 3610fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, MMCodecControlStop, NULL); 3611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 3612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Occurred in Codec Stop...\n"); 3613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 3614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 3616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 3617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 3618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorCritical, 3619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 3620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 3621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 3622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_WAIT(pComponentPrivate->sMutex); 3624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 3625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState = VidDec_LCML_State_Stop; 3628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eLCMLState != VidDec_LCML_State_Unload && 3630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML != NULL){ 3631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, EMMCodecControlDestroy, NULL); 3632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "LCML_ControlCodec called EMMCodecControlDestroy 0x%p\n",pLcmlHandle); 3633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 3634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Occurred in Codec Destroy...\n"); 3635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 3636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 3638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 3639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 3640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorCritical, 3641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 3642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE4(pComponentPrivate->dbg, "Incorrect State Transition 0x%x\n", eError); 3643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 3644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState = VidDec_LCML_State_Destroy; 3648fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eLCMLState != VidDec_LCML_State_Unload) { 3649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 3650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->pModLCML != NULL){ 3651fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dlclose(pComponentPrivate->pModLCML); 3652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pModLCML = NULL; 3653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML = NULL; 3654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState = VidDec_LCML_State_Unload; 3655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 3657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->pModLCML != NULL){ 3658fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin FreeLibrary(pComponentPrivate->pModLCML); 3659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pModLCML = NULL; 3660fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML = NULL; 3661fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState = VidDec_LCML_State_Unload; 3662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 3664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (iCount = 0; iCount < MAX_PRIVATE_BUFFERS; iCount++) { 3666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->pCompPort[VIDDEC_INPUT_PORT]->pBufferPrivate[iCount]->bAllocByComponent == OMX_TRUE){ 3667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->pCompPort[VIDDEC_INPUT_PORT]->pBufferPrivate[iCount]->pBufferHdr != NULL) { 3668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE* pBuffHead = NULL; 3669fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead = pComponentPrivate->pCompPort[VIDDEC_INPUT_PORT]->pBufferPrivate[iCount]->pBufferHdr; 3670d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato OMX_MEMFREE_STRUCT_DSPALIGN(pBuffHead->pBuffer,OMX_U8); 3671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3673fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3674fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (iCount = 0; iCount < MAX_PRIVATE_BUFFERS; iCount++) { 3676fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->pCompPort[VIDDEC_OUTPUT_PORT]->pBufferPrivate[iCount]->bAllocByComponent == OMX_TRUE){ 3677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->pCompPort[VIDDEC_OUTPUT_PORT]->pBufferPrivate[iCount]->pBufferHdr != NULL) { 3678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE* pBuffHead = NULL; 3679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead = pComponentPrivate->pCompPort[VIDDEC_OUTPUT_PORT]->pBufferPrivate[iCount]->pBufferHdr; 3680d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato OMX_MEMFREE_STRUCT_DSPALIGN(pBuffHead->pBuffer,OMX_U8); 3681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 3685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eRMProxyState == VidDec_RMPROXY_State_Registered){ 3686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRMGR2(pComponentPrivate->dbg, "memory usage 4 %d : %d bytes\n",(unsigned int)pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel0],(unsigned int)VIDDEC_MEMUSAGE); 3687fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingAVC) { 3688fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pComponentPrivate->pHandle, RMProxy_FreeResource, OMX_H264_Decode_COMPONENT, 0, VIDDEC_MEMUSAGE, NULL); 3689fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 3690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRMGR4(pComponentPrivate->dbg, "Error returned from destroy ResourceManagerProxy thread\n"); 3691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingWMV) { 3694fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pComponentPrivate->pHandle, RMProxy_FreeResource, OMX_WMV_Decode_COMPONENT, 0, VIDDEC_MEMUSAGE, NULL); 3695fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 3696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRMGR4(pComponentPrivate->dbg, "Error returned from destroy ResourceManagerProxy thread\n"); 3697fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG4) { 3700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pComponentPrivate->pHandle, RMProxy_FreeResource, OMX_MPEG4_Decode_COMPONENT, 0, VIDDEC_MEMUSAGE, NULL); 3701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 3702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRMGR4(pComponentPrivate->dbg, "Error returned from destroy ResourceManagerProxy thread\n"); 3703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingH263) { 3706fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pComponentPrivate->pHandle, RMProxy_FreeResource, OMX_H263_Decode_COMPONENT, 0, VIDDEC_MEMUSAGE, NULL); 3707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 3708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRMGR4(pComponentPrivate->dbg, "Error returned from destroy ResourceManagerProxy thread\n"); 3709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG2) { 3712fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pComponentPrivate->pHandle, RMProxy_FreeResource, OMX_MPEG2_Decode_COMPONENT, 0, VIDDEC_MEMUSAGE, NULL); 3713fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 3714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRMGR4(pComponentPrivate->dbg, "Error returned from destroy ResourceManagerProxy thread\n"); 3715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_SPARK_CODE 3718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (VIDDEC_SPARKCHECK) { 3719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pComponentPrivate->pHandle, RMProxy_FreeResource, OMX_MPEG4_Decode_COMPONENT, 0, VIDDEC_MEMUSAGE, NULL); 3720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 3721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRMGR4(pComponentPrivate->dbg, "Error returned from destroy ResourceManagerProxy thread\n"); 3722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 3725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 3726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUnsupportedSetting; 3727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eRMProxyState = VidDec_RMPROXY_State_Load; 3730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eRMProxyState != VidDec_RMPROXY_State_Unload){ 3732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_DeinitalizeEx(OMX_COMPONENTTYPE_VIDEO); 3733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 3734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRMGR4(pComponentPrivate->dbg, "Error returned from destroy ResourceManagerProxy thread\n"); 3735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eRMProxyState = VidDec_RMPROXY_State_Unload; 3737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3738fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 3739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInvalidState; 3740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState = OMX_StateInvalid; 3741fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3742fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 3743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 3744fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorInvalidState, 3745fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorCritical, 3746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Invalid State"); 3747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE4(pComponentPrivate->dbg, "Incorrect State Transition 0x%x\n", eError); 3748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 3749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else{ 3751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorIncorrectStateTransition; 3752fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState = OMX_StateInvalid; 3753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3754fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 3755fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 3756fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorInvalidState, 3757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorCritical, 3758fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Incorrect State Transition"); 3759fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE4(pComponentPrivate->dbg, "Incorrect State Transition 0x%x\n", eError); 3760fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 3762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 3763fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandStateSet, 3764fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState, 3765fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 3766fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3768fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 3769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_StateWaitForResources: 3770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "Transitioning to OMX_StateWaitForResources C 0x%x N 0x%lx\n",pComponentPrivate->eState, nParam1); 3771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->eState == OMX_StateWaitForResources) { 3772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorSameState; 3773fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3774fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 3775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 3776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorSameState, 3777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 3778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 3779fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE4(pComponentPrivate->dbg, "Same State 0x%x\n", eError); 3780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->eState == OMX_StateLoaded) { 3782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*add code to wait for resources*/ 3783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 3784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsPaused = 0; 3785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState = OMX_StateWaitForResources; 3786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 3788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 3789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandStateSet, 3790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState, 3791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 3792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3793fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 3794fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorIncorrectStateTransition; 3795fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 3797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 3798fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorIncorrectStateTransition, 3799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 3800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 3801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE4(pComponentPrivate->dbg, "Incorrect State Transition 0x%x\n", eError); 3802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 3805fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3806fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_StateMax: 3807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "Transitioning to OMX_StateMax C 0x%x N 0x%lx\n",pComponentPrivate->eState, nParam1); 3808fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorIncorrectStateTransition; 3809fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3810fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 3811fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 3812fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorIncorrectStateTransition, 3813fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 3814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 3815fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE4(pComponentPrivate->dbg, "Incorrect State Transition 0x%x\n", eError); 3816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 3817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin default: 3818fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "Transitioning to default C 0x%x N 0x%lx\n",pComponentPrivate->eState, nParam1); 3819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorIncorrectStateTransition; 3820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 3822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 3823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorIncorrectStateTransition, 3824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 3825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 3826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE4(pComponentPrivate->dbg, "Incorrect State Transition 0x%x\n", eError); 3827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 3828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } /* End of Switch */ 3829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 3833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "---EXITING(0x%x)\n",eError); 3834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 3835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 3836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/******************************************************************************/ 3838fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 3839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Sets free output buffers 3840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 3841fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/******************************************************************************/ 3842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_HandleFreeOutputBufferFromApp(VIDDEC_COMPONENT_PRIVATE *pComponentPrivate) 3844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 3845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 3846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE* pBuffHead; 3847fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 size_out_buf; 3848fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int ret; 3849fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE* pLcmlHandle; 3850fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_BUFFER_PRIVATE* pBufferPrivate = NULL; 3851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "+++ENTERING\n"); 3852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "pComponentPrivate 0x%p\n", pComponentPrivate); 3853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin size_out_buf = (OMX_U32)pComponentPrivate->pOutPortDef->nBufferSize; 3854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE*)(pComponentPrivate->pLCML); 3855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ret = read(pComponentPrivate->free_outBuf_Q[0], &pBuffHead, sizeof(pBuffHead)); 3856fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3857fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (ret == -1) { 3859fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM4(pComponentPrivate->dbg, "Error while reading from the pipe\n"); 3860fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 3861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 386381080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong 3864b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = DecrementCount (&(pComponentPrivate->nCountOutputBFromApp), &(pComponentPrivate->mutexOutputBFromApp)); 3865b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (eError != OMX_ErrorNone) { 3866b65f253fdc60f6208a54911bee793d225f23cdf8James Dong return eError; 3867b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 3868fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "pBuffHead 0x%p eExecuteToIdle 0x%x\n", pBuffHead, pComponentPrivate->eExecuteToIdle); 3869fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBuffHead->pOutputPortPrivate != NULL) { 3870fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferPrivate = (VIDDEC_BUFFER_PRIVATE* )pBuffHead->pOutputPortPrivate; 3871b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->eLCMLState != VidDec_LCML_State_Unload && 3872b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->eLCMLState != VidDec_LCML_State_Destroy && 3873b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pLCML != NULL) { 3874fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef KHRONOS_1_1 3875b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG4 || 3876b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingH263) { 3877b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin MP4VD_GPP_SN_UALGOutputParams* pUalgOutParams = NULL; 3878b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pUalgOutParams = (MP4VD_GPP_SN_UALGOutputParams *)pBufferPrivate->pUalgParam; 3879b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->eMBErrorReport.bEnabled) { 3880b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pUalgOutParams->lMbErrorBufFlag = 1; 3881fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3882fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 3883b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pUalgOutParams->lMbErrorBufFlag = 0; 3884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3885fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3886b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingAVC) { 3887b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin H264VDEC_UALGOutputParam* pUalgOutParams = NULL; 3888b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pUalgOutParams = (H264VDEC_UALGOutputParam *)pBufferPrivate->pUalgParam; 3889b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->eMBErrorReport.bEnabled) { 3890b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pUalgOutParams->lMBErrStatFlag = 1; 3891fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 3893b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pUalgOutParams->lMBErrStatFlag = 0; 3894fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3895b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 3896fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 3897b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufferPrivate->eBufferOwner = VIDDEC_BUFFER_WITH_DSP; 3898b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "eBufferOwner 0x%x\n", pBufferPrivate->eBufferOwner); 3899fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3900fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 3901fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 3902fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pBuffer, 3903fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen, 3904b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin PERF_ModuleCommonLayer); 3905b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 3906b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 3907b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "LCML_QueueBuffer(OUTPUT)\n"); 3908b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_QueueBuffer(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 3909b65f253fdc60f6208a54911bee793d225f23cdf8James Dong EMMCodecOutputBufferMapBufLen, 3910fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pBuffer, 3911b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBuffHead->nAllocLen, 3912fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen, 3913b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U8*)(pBufferPrivate->pUalgParam), 3914b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_S32)pBufferPrivate->nUalgParamSize, 3915b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U8*)pBuffHead); 3916b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone){ 3917b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "LCML_QueueBuffer 0x%x\n", eError); 3918b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 3919b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 3920fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3921fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3922b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 3923b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 3924b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 3925b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 3926fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3927fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 3928fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "null element *************n\n"); 3929fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3930fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3931fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 3932fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "---EXITING(0x%x)\n",eError); 3933fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 3934fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 3935fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3936fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_ACTIVATEPARSER 3937fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_S32 GET_NUM_BIT_REQ(OMX_U32 num) 3938fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 3939fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_S32 i; 3940fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for ( i = 31; i >= 0; i--) 3941fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3942fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (num & (0x1 << i) ) break; 3943fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3944fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return (i+1); 3945fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 3946fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 3947fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3948fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_ACTIVATEPARSER 3949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ==========================================================================*/ 3950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* func VIDDEC_ParseVideo_MPEG2 */ 3951fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* */ 3952fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* desc */ 3953fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ==========================================================================*/ 3954fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_ParseVideo_MPEG2( OMX_S32* nWidth, OMX_S32* nHeight, OMX_BUFFERHEADERTYPE *pBuffHead) 3955fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 3956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorUndefined; 3957fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nTempValue = 0; 3958fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*OMX_U8* pTempValue = 0;*/ 3959fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*OMX_U8* pTempSize = 0;*/ 3960fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*OMX_U32 nProfile = 0;*/ 3961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*OMX_U32 nLevel = 0;*/ 3962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nBitPosition = 0; 3963fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8* pHeaderStream = (OMX_U8*)pBuffHead->pBuffer; 3964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BOOL nStartFlag = OMX_FALSE; 3965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nInBytePosition = 0; 3966fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nTotalInBytes = 0; 3967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nNalUnitType = 0; 3968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nTotalInBytes = pBuffHead->nFilledLen; 3970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin do{ 3972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (; (!nStartFlag) && (nInBytePosition < nTotalInBytes - 3); ) { 3973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (VIDDEC_GetBits(&nBitPosition, 24, pHeaderStream, OMX_FALSE) != 0x000001) { 3974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nBitPosition += 8; 3975fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nInBytePosition++; 3976fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3977fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 3978fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nStartFlag = OMX_TRUE; 3979fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nBitPosition += 24; 3980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nInBytePosition += 3; 3981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3982fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3983fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!nStartFlag) { 3984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorStreamCorrupt; 3985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nNalUnitType = VIDDEC_GetBits(&nBitPosition, 8, pHeaderStream, OMX_TRUE); 3988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nInBytePosition++; 3989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nNalUnitType != 0xB3) { 3990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nStartFlag = OMX_FALSE; 3991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin }while (nNalUnitType != 0xB3); 3993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3994fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nNalUnitType == 0xB3) { 3995fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nTempValue = VIDDEC_GetBits(&nBitPosition, 12, pHeaderStream, OMX_TRUE); 3996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nWidth) = (nTempValue); 3997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nTempValue = VIDDEC_GetBits(&nBitPosition, 12, pHeaderStream, OMX_TRUE); 3998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nHeight) = (nTempValue); 3999fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 4000fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4001fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4002fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 4003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 4004fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 4005fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 4006fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4007fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_ACTIVATEPARSER 4008fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ==========================================================================*/ 4009fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* func VIDDEC_ParseVideo_WMV9_VC1 */ 4010fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* */ 4011fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* desc */ 4012fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ==========================================================================*/ 4013fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_ParseVideo_WMV9_VC1( OMX_S32* nWidth, OMX_S32* nHeight, OMX_BUFFERHEADERTYPE *pBuffHead) 4014fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 4015fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorUndefined; 4016fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nTempValue = 0; 4017fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*OMX_U8* pTempValue = 0;*/ 4018fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*OMX_U8* pTempSize = 0;*/ 4019fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nProfile = 0; 4020fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nLevel = 0; 4021fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nBitPosition = 0; 4022fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8* pHeaderStream = (OMX_U8*)pBuffHead->pBuffer; 4023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BOOL nStartFlag = OMX_FALSE; 4024fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nInBytePosition = 0; 4025fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nTotalInBytes = 0; 4026fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nNalUnitType = 0; 4027fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4028fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nTotalInBytes = pBuffHead->nFilledLen; 4029fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4030fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin do{ 4031fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (; (!nStartFlag) && (nInBytePosition < nTotalInBytes - 3); ) { 4032fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (VIDDEC_GetBits(&nBitPosition, 24, pHeaderStream, OMX_FALSE) != 0x000001) { 4033fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nBitPosition += 8; 4034fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nInBytePosition++; 4035fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4036fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 4037fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nStartFlag = OMX_TRUE; 4038fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nBitPosition += 24; 4039fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nInBytePosition += 3; 4040fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4041fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4042fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!nStartFlag) { 4043fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorStreamCorrupt; 4044fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 4045fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4046fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nNalUnitType = VIDDEC_GetBits(&nBitPosition, 8, pHeaderStream, OMX_TRUE); 4047fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nInBytePosition++; 4048fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nNalUnitType != 0x0f && nNalUnitType != 0x0e) { 4049fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nStartFlag = OMX_FALSE; 4050fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4051fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin }while (nNalUnitType != 0x0f && nNalUnitType != 0x0e); 4052fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4053fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nNalUnitType == 0x0f || nNalUnitType == 0x0e) { 4054fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nProfile = VIDDEC_GetBits(&nBitPosition, 2, pHeaderStream, OMX_TRUE); 4055fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nLevel = VIDDEC_GetBits(&nBitPosition, 3, pHeaderStream, OMX_TRUE); 4056fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nTempValue = VIDDEC_GetBits(&nBitPosition, 11, pHeaderStream, OMX_TRUE); 4057fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nTempValue = VIDDEC_GetBits(&nBitPosition, 12, pHeaderStream, OMX_TRUE); 4058fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nWidth) = (nTempValue * 2) + 2; 4059fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nTempValue = VIDDEC_GetBits(&nBitPosition, 12, pHeaderStream, OMX_TRUE); 4060fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nHeight) = (nTempValue * 2) + 2; 4061fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 4062fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4064fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 4065fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 4066fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 4067fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 4068fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4069fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_ACTIVATEPARSER 4070fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ==========================================================================*/ 4071fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* func VIDDEC_ParseVideo_WMV9_RCV */ 4072fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* */ 4073fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* desc */ 4074fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ==========================================================================*/ 4075fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_ParseVideo_WMV9_RCV( OMX_S32* nWidth, OMX_S32* nHeight, OMX_BUFFERHEADERTYPE *pBuffHead) 4076fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 4077fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorUndefined; 4078fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nTempValue = 0; 4079fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8* pTempValue = 0; 4080fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*OMX_U8* pTempSize = 0;*/ 4081fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 Profile = 0; 4082fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*OMX_U32 i = 0;*/ 4083fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nBitPosition = 0; 4084fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8* pHeaderStream = (OMX_U8*)pBuffHead->pBuffer; 4085fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4086fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffHead->nFilledLen >= 20) { 4087fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nTempValue = VIDDEC_GetBits(&nBitPosition, 32, pHeaderStream, OMX_TRUE); 4088fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nTempValue = VIDDEC_GetBits(&nBitPosition, 32, pHeaderStream, OMX_TRUE); 4089fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin Profile = VIDDEC_GetBits(&nBitPosition, 4, pHeaderStream, OMX_TRUE); 4090fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nTempValue = VIDDEC_GetBits(&nBitPosition, 28, pHeaderStream, OMX_TRUE); 4091fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4092fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempValue = (OMX_U8*)&nTempValue; 4093fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempValue[0] = VIDDEC_GetBits(&nBitPosition, 8, pHeaderStream, OMX_TRUE); 4094fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempValue[1] = VIDDEC_GetBits(&nBitPosition, 8, pHeaderStream, OMX_TRUE); 4095fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempValue[2] = VIDDEC_GetBits(&nBitPosition, 8, pHeaderStream, OMX_TRUE); 4096fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempValue[3] = VIDDEC_GetBits(&nBitPosition, 8, pHeaderStream, OMX_TRUE); 4097fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nHeight) = nTempValue; 4098fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4099fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempValue[0] = VIDDEC_GetBits(&nBitPosition, 8, pHeaderStream, OMX_TRUE); 4100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempValue[1] = VIDDEC_GetBits(&nBitPosition, 8, pHeaderStream, OMX_TRUE); 4101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempValue[2] = VIDDEC_GetBits(&nBitPosition, 8, pHeaderStream, OMX_TRUE); 4102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempValue[3] = VIDDEC_GetBits(&nBitPosition, 8, pHeaderStream, OMX_TRUE); 4103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nWidth) = nTempValue; 4104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 4105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 4107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nWidth) = 0; 4108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nHeight) = 0; 4109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUndefined; 4110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 4113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 4114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 4115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_ACTIVATEPARSER 4117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ==========================================================================*/ 4118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* func VIDDEC_ParseVideo_MPEG4 */ 4119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* */ 4120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* desc */ 4121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ==========================================================================*/ 4122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_ParseVideo_MPEG4( OMX_S32* nWidth, OMX_S32* nHeight, OMX_BUFFERHEADERTYPE *pBuffHead) 4123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 4124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorUndefined; 4125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nSartCode = 0; 4126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nBitPosition = 0; 4127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BOOL bHeaderParseCompleted = OMX_FALSE; 4128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BOOL bFillHeaderInfo = OMX_FALSE; 4129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8* pHeaderStream = (OMX_U8*)pBuffHead->pBuffer; 4130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*OMX_U32 nTotalInBytes = pBuffHead->nFilledLen;*/ 4132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_MPEG4_ParserParam MPEG4_Param; 4133b65f253fdc60f6208a54911bee793d225f23cdf8James Dong VIDDEC_MPEG4UncompressedVideoFormat iOutputFormat = {0}; 4134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_MPEG4_ParserParam* sMPEG4_Param = &MPEG4_Param; 4135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_VideoPictureHeader sPictHeaderDummy; 4136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_MPEG4VisualVOLHeader sVolHeaderDummy; 4137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_VideoPictureHeader* pPictHeaderPtr = &sPictHeaderDummy; 4138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_MPEG4VisualVOLHeader* sVolHeaderPtr = &sVolHeaderDummy; 4139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPictHeaderPtr->cnOptional = (OMX_U8*)malloc( sizeof(VIDDEC_MPEG4VisualVOLHeader)); 4141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while (!bHeaderParseCompleted) 4142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nSartCode = VIDDEC_GetBits(&nBitPosition, 32, pHeaderStream, OMX_TRUE); 4144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nSartCode == 0x1B0) 4145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 4); 4147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPictHeaderPtr->nProfile = VIDDEC_GetBits(&nBitPosition, 4, pHeaderStream, OMX_TRUE); 4148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 4); 4149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPictHeaderPtr->nLevel = VIDDEC_GetBits(&nBitPosition, 4, pHeaderStream, OMX_TRUE); 4150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (nSartCode == 0x1B5) 4152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nIsVisualObjectIdentifier = VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); 4155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (sMPEG4_Param->nIsVisualObjectIdentifier) 4156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 7); 4158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void)VIDDEC_GetBits(&nBitPosition, 7, pHeaderStream, OMX_TRUE); /* DISCARD THIS INFO (7 bits)*/ 4159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 4); 4161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nVisualObjectType = VIDDEC_GetBits(&nBitPosition, 4, pHeaderStream, OMX_TRUE); 4162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (sMPEG4_Param->nVisualObjectType== 1|| sMPEG4_Param->nVisualObjectType== 2) 4163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nVideoSignalType = VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); 4166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (sMPEG4_Param->nVideoSignalType) 4167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 3); 4169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nVideoFormat = VIDDEC_GetBits(&nBitPosition, 3, pHeaderStream, OMX_TRUE); 4170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nVideoRange = VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); 4172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nColorDescription = VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); 4174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (sMPEG4_Param->nColorDescription) 4175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Discard this info*/ 4177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 24); 4178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void)VIDDEC_GetBits(&nBitPosition, 24, pHeaderStream, OMX_TRUE); 4179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->NBitZero = VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); 4184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while ((nBitPosition%8)!= 0) { 4185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void)VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE);/*discard align bits*/ 4187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if ((nSartCode >= 0x100)&&(nSartCode <= 0x11F)) 4190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Do nothing*/ 4192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 8); 4193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void)VIDDEC_GetBits(&nBitPosition, 8, pHeaderStream, OMX_TRUE);*/ 4194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (nSartCode == 0x1B3) /*GOV*/ 4196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 20); 4198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void)VIDDEC_GetBits(&nBitPosition, 20, pHeaderStream, OMX_TRUE); 4199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->NBitZero = VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); 4201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while ((nBitPosition%8)!= 0){ 4202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void)VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE);/*discard align bits*/ 4204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (nSartCode == 0x1B2) /*user data*/ 4207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 24); 4209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while (VIDDEC_GetBits(&nBitPosition, 24, pHeaderStream, OMX_TRUE)!= 0x1) 4210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nBitPosition-=16; /*discard only 8 bits and try againg until*/ 4211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*the next start code is found*/ 4212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nBitPosition -=24; /* prepare to read the entire start code*/ 4213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->NBitZero = VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); 4215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PRINT("sMPEG4_Param->NBitZero = %d", sMPEG4_Param->NBitZero); 4216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while ((nBitPosition%8)!= 0) { 4217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void)VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE);*//*discard align bits*/ 4219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*}*/ 4220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if ((nSartCode >= 0x120)&&(nSartCode <= 0x12F)) 4222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sVolHeaderPtr->nVideoObjectLayerId = nSartCode&0x0000000f; 4224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sVolHeaderPtr->bShortVideoHeader = 0; 4225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPictHeaderPtr->bIsRandomAccessible = VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); /*1 bit*/ 4227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sVolHeaderPtr->bRandomAccessibleVOL = pPictHeaderPtr->bIsRandomAccessible; 4228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pPictHeaderPtr->bIsRandomAccessible) 4229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* it seems this never happens*/ 4231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 8); 4233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nVideoObjectTypeIndication = VIDDEC_GetBits(&nBitPosition, 8, pHeaderStream, OMX_TRUE); /* 8 bits*/ 4234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sVolHeaderPtr->nVideoObjectTypeIndication = sMPEG4_Param->nVideoObjectTypeIndication; 4235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nIsVisualObjectLayerIdentifier = VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE);/*1 bit*/ 4237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sVolHeaderPtr->nVideoObjectLayerId = sMPEG4_Param->nIsVisualObjectLayerIdentifier; 4238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nLayerVerId = 0; 4239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (sMPEG4_Param->nIsVisualObjectLayerIdentifier) 4240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 4); 4242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nLayerVerId = VIDDEC_GetBits(&nBitPosition, 4, pHeaderStream, OMX_TRUE); /*4 bits*/ 4243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sVolHeaderPtr->nVideoObjectLayerVerId = sMPEG4_Param->nLayerVerId; 4244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 3); 4245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nLayerPriority = VIDDEC_GetBits(&nBitPosition, 3, pHeaderStream, OMX_TRUE); /*3 bits*/ 4246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sVolHeaderPtr->nVideoObjectLayerPriority = sMPEG4_Param->nLayerPriority; 4247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 4); 4250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nAspectRadio = VIDDEC_GetBits(&nBitPosition, 4, pHeaderStream, OMX_TRUE); /*4 bits*/ 4251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (sMPEG4_Param->nAspectRadio == 0xf) 4252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 8); 4254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nParWidth = VIDDEC_GetBits(&nBitPosition, 8, pHeaderStream, OMX_TRUE); /*8 bits*/ 4255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sVolHeaderPtr->nAspectRatioNum = sMPEG4_Param->nParWidth; 4256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 8); 4257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nParHeight = VIDDEC_GetBits(&nBitPosition, 8, pHeaderStream, OMX_TRUE); /*8 bits*/ 4258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sVolHeaderPtr->nAspectRatioDenom = sMPEG4_Param->nParHeight; 4259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nControlParameters = VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); /*1 bit*/ 4262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ( sMPEG4_Param->nControlParameters ) 4263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 2); 4265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nChromaFormat = VIDDEC_GetBits(&nBitPosition, 2, pHeaderStream, OMX_TRUE); /*2 bits*/ 4266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nLowDelay = VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); /*1 bit*/ 4268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nVbvParameters = VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); /*1 bit*/ 4270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (sMPEG4_Param->nVbvParameters) 4271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 15); 4273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nBitRate = VIDDEC_GetBits(&nBitPosition, 15, pHeaderStream, OMX_TRUE)<<15; /*15 bit*/ 4274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void)VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); /*1 bit*/ 4276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 15); 4277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nBitRate |= VIDDEC_GetBits(&nBitPosition, 15, pHeaderStream, OMX_TRUE); /*15 bit*/ 4278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sVolHeaderPtr->sVbvParams.nBitRate = sMPEG4_Param->nBitRate; 4279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void)VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); 4281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 15); 4282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nFirstHalfVbvBufferSize = VIDDEC_GetBits(&nBitPosition, 15, pHeaderStream, OMX_TRUE); 4283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void)VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); 4285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 3); 4286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nLatterHalfVbvBufferSize = VIDDEC_GetBits(&nBitPosition, 3, pHeaderStream, OMX_TRUE); 4287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sVolHeaderPtr->sVbvParams.nVbvBufferSize = 4288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (((sMPEG4_Param->nFirstHalfVbvBufferSize) << 3) + sMPEG4_Param->nLatterHalfVbvBufferSize) * 2048; 4289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 11); 4290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nFirstHalfVbvOccupancy = VIDDEC_GetBits(&nBitPosition, 11, pHeaderStream, OMX_TRUE); 4291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void)VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); 4293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 15); 4294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nLatterHalfVbvOccupancy = VIDDEC_GetBits(&nBitPosition, 15, pHeaderStream, OMX_TRUE); 4295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sVolHeaderPtr->sVbvParams.nVbvOccupancy = 4296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (((sMPEG4_Param->nFirstHalfVbvOccupancy) << 15) + sMPEG4_Param->nLatterHalfVbvOccupancy) * 2048; 4297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void)VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); 4299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 48); 4301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void)VIDDEC_GetBits(&nBitPosition, 48, pHeaderStream, OMX_TRUE);*/ 4302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 4304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nBitRate = 0; 4306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 2); 4309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nLayerShape = VIDDEC_GetBits(&nBitPosition, 2, pHeaderStream, OMX_TRUE); /*2 bits*/ 4310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*skip one marker_bit*/ 4311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void)VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); /*1 bit*/ 4313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 16); 4314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nTimeIncrementResolution = VIDDEC_GetBits(&nBitPosition, 16, pHeaderStream, OMX_TRUE); /*16 bits*/ 4315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sVolHeaderPtr->nVOPTimeIncrementResolution = sMPEG4_Param->nTimeIncrementResolution; 4316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*skip one market bit*/ 4317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void)VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); /*1 bit*/ 4319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nFnXedVopRate = VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); /*1 bit*/ 4321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sVolHeaderPtr->bnFnXedVopRate = sMPEG4_Param->nFnXedVopRate; 4322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (sMPEG4_Param->nFnXedVopRate) 4323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nNum_bits = GET_NUM_BIT_REQ (sMPEG4_Param->nTimeIncrementResolution); 4325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, sMPEG4_Param->nNum_bits); 4326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sVolHeaderPtr->nFnXedVOPTimeIncrement = VIDDEC_GetBits (&nBitPosition, sMPEG4_Param->nNum_bits, pHeaderStream, OMX_TRUE); 4327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*skip one market bit*/ 4329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void)VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); /*1 bit*/ 4331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 13); 4332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nWidth) = VIDDEC_GetBits(&nBitPosition, 13, pHeaderStream, OMX_TRUE); /*13 bits*/ 4333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*skip one market bit*/ 4334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void)VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); /*1 bit*/ 4336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 13); 4337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nHeight) = VIDDEC_GetBits(&nBitPosition, 13, pHeaderStream, OMX_TRUE); /*13 bits*/ 4338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*skip one market bit*/ 4340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void)VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); /*1 bit*/ 4342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nInterlaced = VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); /*1 bit*/ 4344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nObmc = VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); /*1 bit*/ 4346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (sMPEG4_Param->nLayerVerId) 4347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->NSpriteNotSupported = VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); /*1 bit*/ 4350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (sMPEG4_Param->NSpriteNotSupported) 4351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 4355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 2); 4357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->NSpriteNotSupported = VIDDEC_GetBits(&nBitPosition, 2, pHeaderStream, OMX_TRUE); /*2 bits*/ 4358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (sMPEG4_Param->NSpriteNotSupported) 4359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nNot8Bit = VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); /*1 bits*/ 4364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nQuantPrecision = 5; 4365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nBitsPerPnXel = 8; 4366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (sMPEG4_Param->nNot8Bit) 4367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 4); 4369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nQuantPrecision = VIDDEC_GetBits(&nBitPosition,4, pHeaderStream, OMX_TRUE); /* 4 bits*/ 4370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 4); 4371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nBitsPerPnXel = VIDDEC_GetBits(&nBitPosition,4, pHeaderStream, OMX_TRUE); /* 4 bits*/ 4372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nIsInverseQuantMethodFirst = VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); /*1 bits*/ 4375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (sMPEG4_Param->nLayerVerId !=1) 4376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*does not support quater sample*/ 4378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*kip one market bit*/ 4379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void)VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); /*1 bit*/ 4381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nComplexityEstimationDisable = VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); /*1 bit*/ 4384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nIsResyncMarkerDisabled = VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); /*1 bit*/ 4386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nIsDataPartitioned = VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); /*1 bit*/ 4388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sVolHeaderPtr->bDataPartitioning = sMPEG4_Param->nIsDataPartitioned; 4389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (sMPEG4_Param->nIsDataPartitioned) 4390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nRvlc = VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); /*1 bit*/ 4393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sVolHeaderPtr->bReversibleVLC = sMPEG4_Param->nRvlc; 4394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (sMPEG4_Param->nRvlc) 4395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (sMPEG4_Param->nLayerVerId !=1) 4399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 2); 4401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void)VIDDEC_GetBits(&nBitPosition, 2, pHeaderStream, OMX_TRUE); /*2 bit*/ 4402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 1); 4404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nScalability = VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); /*1 bit*/ 4405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*pPictHeaderPtr->sSizeInMemory.nWidth = (*nWidth); 4406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPictHeaderPtr->sSizeInMemory.nHeight = (*nHeight); 4407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPictHeaderPtr->sDisplayedRect = TRect(TSize((*nWidth),(*nHeight)));*/ 4408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (iOutputFormat.iYuvFormat.iPattern == 0x00000001) 4409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPictHeaderPtr->nPostDecoderBufferSize = (*nHeight) * (*nWidth) * 3 / 2; /*YUV 420 Planar*/ 4410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (iOutputFormat.iYuvFormat.iPattern == 0x00000008) 4411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPictHeaderPtr->nPostDecoderBufferSize = (*nHeight) * (*nWidth) * 2; /*YUV 422 Interleaved*/ 4412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPictHeaderPtr->nOptions |= 0x00000008; 4413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(bFillHeaderInfo) 4414fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ; 4416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin bHeaderParseCompleted = OMX_TRUE; 4418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 4419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if ( (nSartCode&0xfffffc00) == 0x00008000 ) 4421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sVolHeaderPtr->bShortVideoHeader = 1; 4423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* discard 3 bits for split_screen_indicator, document_camera_indicator*/ 4424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* and full_picture_freeze_release*/ 4425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 3); 4426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void)VIDDEC_GetBits(&nBitPosition, 3, pHeaderStream, OMX_TRUE); 4427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARSER_CHECKLIMIT(nTotalInBytes, nBitPosition, 3); 4428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nSourceFormat = VIDDEC_GetBits(&nBitPosition, 3, pHeaderStream, OMX_TRUE); 4429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (sMPEG4_Param->nSourceFormat == 0x1) 4430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nWidth) = 128; 4432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nHeight) = 96; 4433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (sMPEG4_Param->nSourceFormat == 0x2) 4435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nWidth) = 176; 4437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nHeight) = 144; 4438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (sMPEG4_Param->nSourceFormat == 0x3) 4440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nWidth) = 352; 4442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nHeight) = 288; 4443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (sMPEG4_Param->nSourceFormat == 0x4) 4445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nWidth) = 704; 4447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nHeight) = 576; 4448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (sMPEG4_Param->nSourceFormat == 0x5) 4450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nWidth) = 1408; 4452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nHeight) = 1152; 4453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (sMPEG4_Param->nSourceFormat == 0x7) 4455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nUFEP = VIDDEC_GetBits(&nBitPosition, 3, pHeaderStream, OMX_TRUE); 4457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(sMPEG4_Param->nUFEP == 1) { 4458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nSourceFormat = VIDDEC_GetBits(&nBitPosition, 3, pHeaderStream, OMX_TRUE); 4459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (sMPEG4_Param->nSourceFormat == 0x1) 4460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nWidth) = 128; 4462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nHeight) = 96; 4463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (sMPEG4_Param->nSourceFormat == 0x2) 4465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nWidth) = 176; 4467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nHeight) = 144; 4468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (sMPEG4_Param->nSourceFormat == 0x3) 4470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nWidth) = 352; 4472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nHeight) = 288; 4473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (sMPEG4_Param->nSourceFormat == 0x4) 4475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nWidth) = 704; 4478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nHeight) = 576; 4479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (sMPEG4_Param->nSourceFormat == 0x5) 4481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nWidth) = 1408; 4483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nHeight) = 1152; 4484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (sMPEG4_Param->nSourceFormat == 0x6) 4486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void)VIDDEC_GetBits(&nBitPosition, 24, pHeaderStream, OMX_TRUE); 4488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nCPM = VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); 4489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(sMPEG4_Param->nCPM) 4490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (void)VIDDEC_GetBits(&nBitPosition, 2, pHeaderStream, OMX_TRUE); 4491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 4492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void)VIDDEC_GetBits(&nBitPosition, 4, pHeaderStream, OMX_TRUE); 4493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 4494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nPWI = VIDDEC_GetBits(&nBitPosition, 9, pHeaderStream, OMX_TRUE); 4495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nWidth) = (sMPEG4_Param->nPWI + 1)*4; 4496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 4497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void)VIDDEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); 4498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 4499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nPHI = VIDDEC_GetBits(&nBitPosition, 9, pHeaderStream, OMX_TRUE); 4500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nHeight) = sMPEG4_Param->nPHI*4; 4501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4502b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 4503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (sMPEG4_Param->nSourceFormat == 0x7) 4504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sMPEG4_Param->nSourceFormat = VIDDEC_GetBits(&nBitPosition, 3, pHeaderStream, OMX_TRUE); 4506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nWidth) = 1408; 4507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nHeight) = 1152; 4508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 4510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUnsupportedSetting; 4512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 4513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 4517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUnsupportedSetting; 4519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 4520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin bHeaderParseCompleted = OMX_TRUE; 4522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 4523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 4525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUnsupportedSetting; 4527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 4528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 4531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pPictHeaderPtr->cnOptional != NULL) 4532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin free( pPictHeaderPtr->cnOptional); 4534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPictHeaderPtr->cnOptional = NULL; 4535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 4537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 4538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 4539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_ACTIVATEPARSER 4541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ==========================================================================*/ 4542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* func VIDDEC_ScanConfigBufferAVC */ 4543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* */ 4544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* desc Use to scan buffer for certain patter. Used to know if ConfigBuffers are together */ 4545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ==========================================================================*/ 4546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_U32 VIDDEC_ScanConfigBufferAVC(OMX_BUFFERHEADERTYPE* pBuffHead, OMX_U32 pattern){ 4547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nBitPosition = 0; 4548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nInBytePosition = 0; 4549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nPatternCounter = 0; 4550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nTotalInBytes = pBuffHead->nFilledLen; 4551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8* nBitStream = (OMX_U8*)pBuffHead->pBuffer; 4552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while (nInBytePosition < nTotalInBytes - 3){ 4554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (VIDDEC_GetBits(&nBitPosition, 24, nBitStream, OMX_FALSE) != pattern) { 4555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nBitPosition += 8; 4556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nInBytePosition++; 4557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 4559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Pattern found; add count*/ 4560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nPatternCounter++; 4561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nBitPosition += 24; 4562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nInBytePosition += 3; 4563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4564fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4565fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return nPatternCounter; 4566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 4567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ==========================================================================*/ 4569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* func VIDDEC_ParseVideo_H264 */ 4570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* */ 4571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* desc */ 4572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ==========================================================================*/ 4573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_ParseVideo_H264(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, 4574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE* pBuffHead,OMX_S32* nWidth, 4575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_S32* nHeight, OMX_S32* nCropWidth, 4576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_S32* nCropHeight, OMX_U32 nType) 4577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 4578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorBadParameter; 4579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_S32 i = 0; 4580b65f253fdc60f6208a54911bee793d225f23cdf8James Dong VIDDEC_AVC_ParserParam* sParserParam = NULL; 4581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*OMX_S32 nRetVal = 0;*/ 4582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BOOL nStartFlag = OMX_FALSE; 4583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nBitPosition = 0; 4584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nRbspPosition = 0; 4585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nTotalInBytes = 0; 4586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nInBytePosition = 0; 4587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nInPositionTemp = 0; 4588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nNumOfBytesInRbsp = 0; 4589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_S32 nNumBytesInNALunit = 0; 4590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8* nBitStream = 0; 4591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nNalUnitType = 0; 4592fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8* nRbspByte = NULL; 4593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8 *pDataBuf; 4595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 4596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* counter used for fragmentation of Config Buffer Code */ 4597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin static OMX_U32 nConfigBufferCounter; 4598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nTotalInBytes = pBuffHead->nFilledLen; 4600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nBitStream = (OMX_U8*)pBuffHead->pBuffer;/* + (OMX_U8*)pBuffHead->nOffset;*/ 4601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nRbspByte = (OMX_U8*)malloc(nTotalInBytes); 4602b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (!nRbspByte) { 4603b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = OMX_ErrorInsufficientResources; 4604d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato goto EXIT; 4605d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato } 4606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memset(nRbspByte, 0x0, nTotalInBytes); 4607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam = (VIDDEC_AVC_ParserParam *)malloc(sizeof(VIDDEC_AVC_ParserParam)); 4608b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (!sParserParam) { 4609b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = OMX_ErrorInsufficientResources; 4610d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato goto EXIT; 4611d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato } 4612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nType == 0) { 4614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Start of Handle fragmentation of Config Buffer Code*/ 4615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Scan for 2 "0x000001", requiered on buffer to parser properly*/ 4616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nConfigBufferCounter += VIDDEC_ScanConfigBufferAVC(pBuffHead, 0x000001); 4617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(nConfigBufferCounter < 2){ /*If less of 2 we need to store the data internally to later assembly the complete ConfigBuffer*/ 4618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Set flag to False, the Config Buffer is not complete */ 4619b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "Setting bConfigBufferCompleteAVC = OMX_FALSE"); 4620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bConfigBufferCompleteAVC = OMX_FALSE; 4621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Malloc Buffer if is not created yet, use Port buffer size*/ 4622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->pInternalConfigBufferAVC == NULL){ 4623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInternalConfigBufferAVC = malloc(pComponentPrivate->pInPortDef->nBufferSize); 4624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->pInternalConfigBufferAVC == NULL){ 4625b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 4626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 4627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Check if memcpy is safe*/ 4630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->pInPortDef->nBufferSize >= pComponentPrivate->nInternalConfigBufferFilledAVC + pBuffHead->nFilledLen){ 4631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Append current buffer data to Internal Config Buffer */ 4632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(memcpy((OMX_U8*)(pComponentPrivate->pInternalConfigBufferAVC + pComponentPrivate->nInternalConfigBufferFilledAVC), 4633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pBuffer, 4634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen) == NULL) { 4635b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 4636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 4637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else{ 4640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError =OMX_ErrorInsufficientResources; 4641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 4642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Update Filled length of Internal Buffer*/ 4644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nInternalConfigBufferFilledAVC += pBuffHead->nFilledLen; 4645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Exit with out error*/ 4646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 4647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 4648fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else{ /* We have all the requiered data*/ 4650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "Setting bConfigBufferCompleteAVC = OMX_TRUE"); 4651fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bConfigBufferCompleteAVC = OMX_TRUE; 4652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* If we have already Config data of previous buffer, we assembly the final ConfigBuffer*/ 4653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->pInternalConfigBufferAVC != NULL){ 4654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Check if memcpy is safe*/ 4655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->pInPortDef->nBufferSize >= 4656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nInternalConfigBufferFilledAVC + pBuffHead->nFilledLen){ 4657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*The current data of the Buffer has to be placed at the end of buffer*/ 4658fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(memcpy((OMX_U8*)(pBuffHead->pBuffer + pComponentPrivate->nInternalConfigBufferFilledAVC), 4659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pBuffer, 4660fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen) == NULL){ 4661fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 4662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 4663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*The data internally stored has to be put at the begining of the buffer*/ 4665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(memcpy(pBuffHead->pBuffer, 4666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInternalConfigBufferAVC, 4667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nInternalConfigBufferFilledAVC) == NULL){ 4668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 4669fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 4670fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else{ 4673fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 4674fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 4675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 4677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Update filled length of current buffer */ 4678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen = pComponentPrivate->nInternalConfigBufferFilledAVC + pBuffHead->nFilledLen; 4679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Free Internal Buffer used to temporarly hold the data*/ 4680d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato if (pComponentPrivate->pInternalConfigBufferAVC != NULL) 4681d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato free(pComponentPrivate->pInternalConfigBufferAVC); 4682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Reset Internal Variables*/ 4683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInternalConfigBufferAVC = NULL; 4684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nInternalConfigBufferFilledAVC = 0; 4685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nConfigBufferCounter = 0; 4686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Update Buffer Variables before parsing */ 4687fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nTotalInBytes = pBuffHead->nFilledLen; 4688d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato if ( nRbspByte != NULL ) 4689d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato free(nRbspByte); 4690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nRbspByte = (OMX_U8*)malloc(nTotalInBytes); 4691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(nRbspByte == NULL){ 4692b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 4693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 4694fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4695fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memset(nRbspByte, 0x0, nTotalInBytes); 4696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Buffer ready to be parse =) */ 4697fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* End of Handle fragmentation Config Buffer Code*/ 4700b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 4701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin do{ 4702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (; (!nStartFlag) && (nInBytePosition < nTotalInBytes - 3); ) 4703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (VIDDEC_GetBits(&nBitPosition, 24, nBitStream, OMX_FALSE) != 0x000001) 4705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4706fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nBitPosition += 8; 4707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nInBytePosition++; 4708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 4710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Start Code found*/ 4712fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nStartFlag = OMX_TRUE; 4713fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nBitPosition += 24; 4714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nInBytePosition += 3; 4715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nStartFlag = OMX_FALSE; 4718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* offset to NumBytesInNALunit*/ 4719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nNumBytesInNALunit = nInBytePosition; 4720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nBitPosTemp = nBitPosition; 4721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (;(!nStartFlag)&&(nNumBytesInNALunit < nTotalInBytes-3); ) 4722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (VIDDEC_GetBits(&sParserParam->nBitPosTemp, 24, nBitStream, OMX_FALSE) != 0x000001) 4724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*find start code*/ 4725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nBitPosTemp += 8; 4727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nNumBytesInNALunit++; 4728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 4730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Start Code found*/ 4732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nStartFlag = OMX_TRUE; 4733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nBitPosTemp += 24; 4734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nNumBytesInNALunit += 3; 4735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4738fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!nStartFlag) 4739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorStreamCorrupt; 4741fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 4742fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* forbidden_zero_bit */ 4744fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nForbiddenZeroBit = VIDDEC_GetBits(&nBitPosition, 1, nBitStream, OMX_TRUE); 4745fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* nal_ref_idc */ 4746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nNalRefIdc = VIDDEC_GetBits(&nBitPosition, 2, nBitStream, OMX_TRUE); 4747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* nal_unit_type */ 4748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nNalUnitType = VIDDEC_GetBits(&nBitPosition, 5, nBitStream, OMX_TRUE); 4749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nInBytePosition++; 4750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* This code is to ensure we will get parameter info */ 4752fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nNalUnitType != 7) 4753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4754fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "nal_unit_type does not specify parameter information need to look for next startcode\n"); 4755fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nStartFlag = OMX_FALSE; 4756fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin }while (nNalUnitType != 7); 4758fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4759fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 4760fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDataBuf = (OMX_U8*)nBitStream; 4761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin do { 4762b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* iOMXComponentUsesNALStartCodes is set to OMX_FALSE on opencore */ 4763b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef ANDROID 4764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->H264BitStreamFormat == 1) { 4765fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->bIsNALBigEndian) { 4766fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nNumBytesInNALunit = (OMX_U32)pDataBuf[nInBytePosition]; 4767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4768fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 4769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nNumBytesInNALunit = (OMX_U32)pDataBuf[nInBytePosition]; 4770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4771b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 4772b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (pComponentPrivate->H264BitStreamFormat == 2) { 4773b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate>bIsNALBigEndian) { 4774fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nNumBytesInNALunit = (OMX_U32)pDataBuf[nInBytePosition] << 8 | pDataBuf[nInBytePosition+1]; 4775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 4777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nNumBytesInNALunit = (OMX_U32)pDataBuf[nInBytePosition] << 0 | pDataBuf[nInBytePosition+1] << 8 ; 4778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4779b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 4780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->H264BitStreamFormat == 4){ 4781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->bIsNALBigEndian) { 4782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nNumBytesInNALunit = (OMX_U32)pDataBuf[nInBytePosition]<<24 | pDataBuf[nInBytePosition+1] << 16 | pDataBuf[nInBytePosition+2] << 8 | pDataBuf[nInBytePosition+3]; 4783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 4785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nNumBytesInNALunit = (OMX_U32)pDataBuf[nInBytePosition]<<0 | pDataBuf[nInBytePosition+1] << 8 | pDataBuf[nInBytePosition+2] << 16 | pDataBuf[nInBytePosition+3]<<24; 4786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 4789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 4790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 4791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4792b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 4793fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nBitPosition = (nInPositionTemp + nType) * 8; 4794fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nInBytePosition = nInPositionTemp + nType; 4795fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nInPositionTemp += nNumBytesInNALunit + nType; 4796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nInBytePosition > nTotalInBytes) { 4797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 4798fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 4799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* forbidden_zero_bit */ 4801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nForbiddenZeroBit = VIDDEC_GetBits(&nBitPosition, 1, nBitStream, OMX_TRUE); 4802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* nal_ref_idc */ 4803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nNalRefIdc = VIDDEC_GetBits(&nBitPosition, 2, nBitStream, OMX_TRUE); 4804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* nal_unit_type */ 4805fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nNalUnitType = VIDDEC_GetBits(&nBitPosition, 5, nBitStream, OMX_TRUE); 4806fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nInBytePosition++; 4807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* This code is to ensure we will get parameter info */ 4808fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nNalUnitType != 7) { 4809fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*nBitPosition += (nNumBytesInNALunit - 1) * 8; 4810fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nInBytePosition += (nNumBytesInNALunit - 1);*/ 4811fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nBitPosition = (nInPositionTemp) * 8; 4812fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nInBytePosition = (nInPositionTemp); 4813fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4815fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } while (nNalUnitType != 7); 4816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nNumBytesInNALunit += 8 + nInBytePosition;/*sum to keep the code flow*/ 4817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*the buffer must had enough space to enter this number*/ 4818fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; nInBytePosition < nNumBytesInNALunit - 3; ) 4820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (((nInBytePosition + 2) < nNumBytesInNALunit - 3)&& 4823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (VIDDEC_GetBits(&nBitPosition, 24, nBitStream, OMX_FALSE) == 0x000003)) 4824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "discard emulation prev byte\n"); 4826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nRbspByte[i++] = nBitStream[nInBytePosition++]; 4827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nRbspByte[i++] = nBitStream[nInBytePosition++]; 4828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nNumOfBytesInRbsp += 2; 4829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* discard emulation prev byte */ 4830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nInBytePosition++; 4831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nBitPosition += 24; 4832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 4834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nRbspByte[i++] = nBitStream[nInBytePosition++]; 4836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nNumOfBytesInRbsp++; 4837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nBitPosition += 8; 4838fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4841fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Parse RBSP sequence*/ 4843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*///////////////////*/ 4844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* profile_idc u(8) */ 4845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nProfileIdc = VIDDEC_GetBits(&nRbspPosition, 8, nRbspByte, OMX_TRUE); 4846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* constraint_set0_flag u(1)*/ 4847fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nConstraintSet0Flag = VIDDEC_GetBits(&nRbspPosition, 1, nRbspByte, OMX_TRUE); 4848fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* constraint_set1_flag u(1)*/ 4849fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nConstraintSet1Flag = VIDDEC_GetBits(&nRbspPosition, 1, nRbspByte, OMX_TRUE); 4850fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* constraint_set2_flag u(1)*/ 4851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nConstraintSet2Flag = VIDDEC_GetBits(&nRbspPosition, 1, nRbspByte, OMX_TRUE); 4852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* reserved_zero_5bits u(5)*/ 4853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nReservedZero5bits = VIDDEC_GetBits(&nRbspPosition, 5, nRbspByte, OMX_TRUE); 4854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* level_idc*/ 4855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nLevelIdc = VIDDEC_GetBits(&nRbspPosition, 8, nRbspByte, OMX_TRUE); 4856fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nSeqParameterSetId = VIDDEC_UVLC_dec(&nRbspPosition, nRbspByte); 4857fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nLog2MaxFrameNumMinus4 = VIDDEC_UVLC_dec(&nRbspPosition, nRbspByte); 4858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nPicOrderCntType = VIDDEC_UVLC_dec(&nRbspPosition, nRbspByte); 4859fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4860fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ( sParserParam->nPicOrderCntType == 0 ) 4861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nLog2MaxPicOrderCntLsbMinus4 = VIDDEC_UVLC_dec(&nRbspPosition, nRbspByte); 4863fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if( sParserParam->nPicOrderCntType == 1 ) 4865fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4866fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* delta_pic_order_always_zero_flag*/ 4867fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_GetBits(&nRbspPosition, 1, nRbspByte, OMX_TRUE); 4868fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nOffsetForNonRefPic = VIDDEC_UVLC_dec(&nRbspPosition, nRbspByte); 4869fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (sParserParam->nOffsetForNonRefPic > 1) 4870fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nOffsetForNonRefPic = sParserParam->nOffsetForNonRefPic & 0x1 ? 4871fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nOffsetForNonRefPic >> 1 : 4872fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin -(sParserParam->nOffsetForNonRefPic >> 1); 4873fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nOffsetForTopToBottomField = VIDDEC_UVLC_dec(&nRbspPosition, nRbspByte); 4874fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nNumRefFramesInPicOrderCntCycle = VIDDEC_UVLC_dec(&nRbspPosition, nRbspByte); 4875fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for(i = 0; i < sParserParam->nNumRefFramesInPicOrderCntCycle; i++ ) 4876fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_UVLC_dec(&nRbspPosition, nRbspByte); /*offset_for_ref_frame[i]*/ 4877fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4878fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4879fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nNumRefFrames = VIDDEC_UVLC_dec(&nRbspPosition, nRbspByte); 4880fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nGapsInFrameNumValueAllowedFlag = VIDDEC_GetBits(&nRbspPosition, 1, nRbspByte, OMX_TRUE); 4881fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nPicWidthInMbsMinus1 = VIDDEC_UVLC_dec(&nRbspPosition, nRbspByte); 4882fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nWidth) = (sParserParam->nPicWidthInMbsMinus1 + 1) * 16; 4883fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nPicHeightInMapUnitsMinus1 = VIDDEC_UVLC_dec(&nRbspPosition, nRbspByte); 4884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nHeight) = (sParserParam->nPicHeightInMapUnitsMinus1 + 1) * 16; 4885fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Checking for cropping in picture saze */ 4886fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* getting frame_mbs_only_flag */ 4887fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nFrameMbsOnlyFlag = VIDDEC_GetBits(&nRbspPosition, 1, nRbspByte, OMX_TRUE); 4888fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!sParserParam->nFrameMbsOnlyFlag) 4889fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4890fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nMBAdaptiveFrameFieldFlag = VIDDEC_GetBits(&nRbspPosition, 1, nRbspByte, OMX_TRUE); 4891fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*getting direct_8x8_inference_flag and frame_cropping_flag*/ 4893fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nDirect8x8InferenceFlag = VIDDEC_GetBits(&nRbspPosition, 1, nRbspByte, OMX_TRUE); 4894fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nFrameCroppingFlag = VIDDEC_GetBits(&nRbspPosition, 1, nRbspByte, OMX_TRUE); 4895fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*getting the crop values if exist*/ 4896fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (sParserParam->nFrameCroppingFlag) 4897fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4898fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nFrameCropLeftOffset = VIDDEC_UVLC_dec(&nRbspPosition, nRbspByte); 4899fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nFrameCropRightOffset = VIDDEC_UVLC_dec(&nRbspPosition, nRbspByte); 4900fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nFrameCropTopOffset = VIDDEC_UVLC_dec(&nRbspPosition, nRbspByte); 4901fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sParserParam->nFrameCropBottomOffset = VIDDEC_UVLC_dec(&nRbspPosition, nRbspByte); 4902fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Update framesize taking into account the cropping values */ 4903fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nCropWidth) = (2 * sParserParam->nFrameCropLeftOffset + 2 * sParserParam->nFrameCropRightOffset); 4904fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nCropHeight) = (2 * sParserParam->nFrameCropTopOffset + 2 * sParserParam->nFrameCropBottomOffset); 4905fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4906fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 4907fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4908fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 4909b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (nRbspByte) 4910d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato free( nRbspByte); 4911b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (sParserParam) 4912d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato free( sParserParam); 4913fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 4914fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 4915fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 4916fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4917fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_ACTIVATEPARSER 4918fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* =========================================================================*/ 4919fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* func GetBits */ 4920fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* */ 4921fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* desc Gets aBits number of bits from position aPosition of one buffer */ 4922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* and returns the value in a TUint value. */ 4923fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* =========================================================================*/ 4924fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_U32 VIDDEC_GetBits(OMX_U32* nPosition, OMX_U8 nBits, OMX_U8* pBuffer, OMX_BOOL bIcreasePosition) 4925fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 4926fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nOutput; 4927fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nNumBitsRead = 0; 4928fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nBytePosition = 0; 4929fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8 nBitPosition = 0; 4930fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nBytePosition = *nPosition / 8; 4931fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nBitPosition = *nPosition % 8; 4932fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4933fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (bIcreasePosition) 4934fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *nPosition += nBits; 4935fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nOutput = ((OMX_U32)pBuffer[nBytePosition] << (24+nBitPosition) ); 4936fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nNumBitsRead = nNumBitsRead + (8 - nBitPosition); 4937fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nNumBitsRead < nBits) 4938fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4939fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nOutput = nOutput | ( pBuffer[nBytePosition + 1] << (16+nBitPosition)); 4940fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nNumBitsRead = nNumBitsRead + 8; 4941fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4942fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nNumBitsRead < nBits) 4943fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4944fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nOutput = nOutput | ( pBuffer[nBytePosition + 2] << (8+nBitPosition)); 4945fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nNumBitsRead = nNumBitsRead + 8; 4946fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4947fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nNumBitsRead < nBits) 4948fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nOutput = nOutput | ( pBuffer[nBytePosition + 3] << (nBitPosition)); 4950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nNumBitsRead = nNumBitsRead + 8; 4951fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4952fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nOutput = nOutput >> (32 - nBits) ; 4953fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return nOutput; 4954fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 4955fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4957fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_S32 VIDDEC_UVLC_dec(OMX_U32 *nPosition, OMX_U8* pBuffer) 4958fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 4959fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4960fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nBytePosition = (*nPosition) / 8; 4961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8 cBitPosition = (*nPosition) % 8; 4962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nLen = 1; 4963fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nCtrBit = 0; 4964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nVal = 1; 4965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_S32 nInfoBit=0; 4966fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nCtrBit = pBuffer[nBytePosition] & (0x1 << (7-cBitPosition)); 4968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while (nCtrBit==0) 4969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nLen++; 4971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cBitPosition++; 4972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nPosition)++; 4973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!(cBitPosition%8)) 4974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4975fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cBitPosition=0; 4976fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nBytePosition++; 4977fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4978fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nCtrBit = pBuffer[nBytePosition] & (0x1<<(7-cBitPosition)); 4979fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for(nInfoBit=0; (nInfoBit<(nLen-1)); nInfoBit++) 4981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4982fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cBitPosition++; 4983fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nPosition)++; 4984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 4985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!(cBitPosition%8)) 4986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 4987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cBitPosition=0; 4988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nBytePosition++; 4989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nVal=(nVal << 1); 4991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBuffer[nBytePosition] & (0x01 << (7 - cBitPosition))) 4992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nVal |= 1; 4993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 4994fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*nPosition)++; 4995fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nVal -= 1; 4996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return nVal; 4997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 4998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 4999fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5000fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_ACTIVATEPARSER 5001fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 5002fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 5003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Parse the input buffer to get the correct width and height 5004fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 5005fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 5006fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_ParseHeader(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, OMX_BUFFERHEADERTYPE *pBuffHead) 5007fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 5008b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 5009fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_S32 nWidth = 0; 5010fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_S32 nHeight = 0; 5011b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_S32 nPadWidth = 0; 5012b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_S32 nPadHeight = 0; 5013fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_S32 nCropWidth = 0; 5014fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_S32 nCropHeight = 0; 5015b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_S32 nCroppedWidth = 0; 5016b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_S32 nCroppedHeight = 0; 5017fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5018fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nOutMinBufferSize = 0; 5019fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BOOL bInPortSettingsChanged = OMX_FALSE; 5020fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BOOL bOutPortSettingsChanged = OMX_FALSE; 5021fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nOutPortActualAllocLen = 0; 5022fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "IN\n"); 5024fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(!pComponentPrivate) { 5025fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 5026fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5027fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5028fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin bInPortSettingsChanged = pComponentPrivate->bInPortSettingsChanged; 5029fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin bOutPortSettingsChanged = pComponentPrivate->bOutPortSettingsChanged; 5030fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Get output port allocated buffer size*/ 5031fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nOutPortActualAllocLen = pComponentPrivate->pCompPort[VIDDEC_OUTPUT_PORT]->pBufferPrivate[0]->pBufferHdr->nAllocLen; 5032fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5033b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "pBuffHead %x, Original resolution IN %dx%d : OUT %dx%d\n", 5034b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (unsigned int)pBuffHead, 5035b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (unsigned int)pComponentPrivate->pInPortDef->format.video.nFrameWidth, 5036b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (unsigned int)pComponentPrivate->pInPortDef->format.video.nFrameHeight, 5037b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (unsigned int)pComponentPrivate->pOutPortDef->format.video.nFrameWidth, 5038b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (unsigned int)pComponentPrivate->pOutPortDef->format.video.nFrameHeight); 5039b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 5040fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5041fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if( pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingAVC) { 5042fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = VIDDEC_ParseVideo_H264( pComponentPrivate, pBuffHead, &nWidth, &nHeight, 5043fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin &nCropWidth, &nCropHeight, pComponentPrivate->H264BitStreamFormat); 5044b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 5045fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Start Code to handle fragmentation of ConfigBuffer for AVC*/ 5046fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->bConfigBufferCompleteAVC == OMX_FALSE && 5047fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->ProcessMode == 0 && pComponentPrivate->H264BitStreamFormat == 0){ 5048fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* We have received some part of the config Buffer. 5049fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Send EmptyThisBuffer of the buffer we have just received to Client 5050fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 505175654962d82cc9054c198ce88fc2db0c56b16232James Dong VIDDEC_EmptyBufferDone(pComponentPrivate, pBuffHead); 5052fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Exit with out error to avoid sending again EmptyBufferDone in upper function*/ 5053fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 5054fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 5055fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5056fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*End Code to handle fragmentation of ConfigBuffer for AVC*/ 5057fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5058fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if( pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG4 || 5059b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingH263) { 5060b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin VIDDEC_ParseVideo_MPEG4( &nWidth, &nHeight, pBuffHead); 5061b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* Work around force reconfiguration */ 5062b65f253fdc60f6208a54911bee793d225f23cdf8James Dong bOutPortSettingsChanged = OMX_TRUE; 5063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5064fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if( pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG2) { 5065fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_ParseVideo_MPEG2( &nWidth, &nHeight, pBuffHead); 5066fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5067fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if( pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingWMV) { 5068fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nWMVFileType == VIDDEC_WMV_ELEMSTREAM) { 5069fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = VIDDEC_ParseVideo_WMV9_VC1( &nWidth, &nHeight, pBuffHead); 5070fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5071fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 5072fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = VIDDEC_ParseVideo_WMV9_RCV( &nWidth, &nHeight, pBuffHead); 5073fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5074fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5075fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5076b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nPadWidth = nWidth; 5077b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nPadHeight = nHeight; 5078b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if((nPadWidth%16) != 0){ 5079b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nPadWidth += 16-(nPadWidth%16); 5080fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5081b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if((nPadHeight%16) != 0){ 5082b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nPadHeight += 16-(nPadHeight%16); 5083fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5084fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5085b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*TODO: Test Croped MPEG4*/ 5086b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 5087b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG4 || 5088b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingH263){ 5089b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(nPadWidth == 864){ 5090b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nPadWidth = 854; 5091b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5092b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(nPadHeight == 864){ 5093b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nPadHeight = 864; 5094b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5095fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5096fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5097fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*TODO: Get minimum INPUT buffer size & verify if the actual size is enough*/ 5098b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*Verify correct values in the initial setup*/ 5099fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Verify if actual width & height parameters are correct*/ 5101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pInPortDef->format.video.nFrameWidth != nWidth || 5102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nFrameHeight != nHeight) { 5103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((nWidth >= 1500) || (nHeight >= 1500)){ 5104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nFrameHeight = 576; 5105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nFrameWidth = 720; 5106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 5107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 5108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(((nWidth < 16) || (nHeight < 16))){ 5110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nFrameHeight = 576; 5111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nFrameWidth = 720; 5112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 5113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 5114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nFrameWidth = nPadWidth; 5116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.nFrameHeight = nPadHeight; 5117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef ANDROID 5118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*Force reload the component to configure create face args (SN)*/ 5119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin bOutPortSettingsChanged = OMX_TRUE; 5120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Input port setting change, Force reload component !!!!!!\n"); 5121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else 5122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*OpenCORE doesn't support dynamic input port configuration*/ 5123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin bInPortSettingsChanged = OMX_TRUE; 5124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 5125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->pInPortDef->format.video.eCompressionFormat != OMX_VIDEO_CodingAVC && 5128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eCompressionFormat != OMX_VIDEO_CodingMPEG4 && 5129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eCompressionFormat != OMX_VIDEO_CodingH263){ 5130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->pOutPortDef->format.video.nFrameWidth != nWidth || 5131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.nFrameHeight != nHeight) { 5132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 5133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.nFrameWidth = nPadWidth; 5134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.nFrameHeight = nPadHeight; 5135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin bOutPortSettingsChanged = OMX_TRUE; 5136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Resolution: default new: %dx%d\n", nPadWidth, nPadHeight); 5137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if(pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG4 || 5140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingH263){ 5141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->pOutPortDef->format.video.nFrameWidth != nWidth || 5142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.nFrameHeight != nHeight) { 5143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 5144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.nFrameWidth = nWidth; 5145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.nFrameHeight = nHeight; 5146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin bOutPortSettingsChanged = OMX_TRUE; 5147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Resolution: new MPEG4: %dx%d\n", nWidth, nHeight); 5148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else{ /*OMX_VIDEO_CodingAVC*/ 5151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* nCroppedWidth & nCroppedHeight indicate the resultant o/p resolution */ 5152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if((nWidth%16) != 0){ 5153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nWidth += 16-(nWidth%16); 5154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if((nHeight%16) != 0){ 5156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nHeight += 16-(nHeight%16); 5157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nCroppedWidth = nWidth - nCropWidth; 5159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nCroppedHeight = nHeight - nCropHeight; 5160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->pOutPortDef->format.video.nFrameWidth != nCroppedWidth || 5161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.nFrameHeight != nCroppedHeight) { 5162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 5163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.nFrameWidth = nCroppedWidth; 5164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.nFrameHeight = nCroppedHeight; 5165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin bOutPortSettingsChanged = OMX_TRUE; 5166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Resolution: AVC new: %dx%d \n", nCroppedWidth, nCroppedHeight); 5167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 5170b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /*Get minimum OUTPUT buffer size, 5171b65f253fdc60f6208a54911bee793d225f23cdf8James Dong * verify if the actual allocated size is the same as require by display driver*/ 5172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nOutMinBufferSize = pComponentPrivate->pOutPortDef->format.video.nFrameWidth * 5173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.nFrameHeight * 5174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((pComponentPrivate->pOutPortFormat->eColorFormat == VIDDEC_COLORFORMAT420) ? VIDDEC_FACTORFORMAT420 : VIDDEC_FACTORFORMAT422); 5175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 5176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(nOutPortActualAllocLen != nOutMinBufferSize){ 5177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutPortDef->nBufferSize = nOutMinBufferSize; 5178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin bOutPortSettingsChanged = OMX_TRUE; 5179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "NEW output BUFFSIZE:0x%x \n", nOutMinBufferSize); 5180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 5183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "pBuffHead %x, Resolution after parser: IN %dx%d : OUT %dx%d\n", 5184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (unsigned int)pBuffHead, 5185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (unsigned int)pComponentPrivate->pInPortDef->format.video.nFrameWidth, 5186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (unsigned int)pComponentPrivate->pInPortDef->format.video.nFrameHeight, 5187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (unsigned int)pComponentPrivate->pOutPortDef->format.video.nFrameWidth, 5188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (unsigned int)pComponentPrivate->pOutPortDef->format.video.nFrameHeight); 5189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 5190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bInPortSettingsChanged |= bInPortSettingsChanged; 5191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bOutPortSettingsChanged |= bOutPortSettingsChanged; 5192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(bOutPortSettingsChanged || bInPortSettingsChanged){ 5194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "bDynamicConfigurationInProgress = OMX_TRUE\n"); 5195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bDynamicConfigurationInProgress = OMX_TRUE; 5196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(bOutPortSettingsChanged && bInPortSettingsChanged){ 5198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "sending OMX_EventPortSettingsChanged to both ports\n"); 5199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef ANDROID 5202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*We must send first INPUT port callback*/ 5203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_LOCK(pComponentPrivate->sDynConfigMutex); 5204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 5205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 5207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 5208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventPortSettingsChanged, 5209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_INPUT_PORT, 5210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0, 5211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 5212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_WAIT_CODE(); 5213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 5214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 5215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventPortSettingsChanged, 5216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_OUTPUT_PORT, 5217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0, 5218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 5219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef ANDROID 5221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_WAIT(pComponentPrivate->sDynConfigMutex); 5222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 5223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 5224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 5225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 5227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "sending OMX_EventPortSettingsChanged SINGLE port\n"); 5228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 5229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 5230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventPortSettingsChanged, 5231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin bOutPortSettingsChanged ? VIDDEC_OUTPUT_PORT : VIDDEC_INPUT_PORT, 5232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0, 5233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 5234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 5235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 5236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 5239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 5240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 5242b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (pComponentPrivate) 5243b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1(pComponentPrivate->dbg, "OUT\n"); 5244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 5245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 5246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 5247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 5249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 5250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Handle Data Buff function from application 5251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 5252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 5253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_HandleDataBuf_FromApp(VIDDEC_COMPONENT_PRIVATE *pComponentPrivate) 5255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 5256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 5257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE* pBuffHead = NULL; 5258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_BUFFER_PRIVATE* pBufferPrivate = NULL; 5259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 inpBufSize; 5260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int ret = 0; 5261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 size_dsp; 5262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8* pCSD = NULL; 5263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8* pData = NULL; 5264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nValue = 0; 5265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nWidth = 0; 5266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nHeight = 0; 5267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nActualCompression = 0; 5268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nSize_CSD = 0; 5269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin void* pUalgInpParams = NULL; 5271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE* pLcmlHandle; 5272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "+++ENTERING\n"); 5273b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER1(pComponentPrivate->dbg, "pComponentPrivate 0x%p iEndofInputSent 0x%x\n", pComponentPrivate, pComponentPrivate->iEndofInputSent); 5274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin inpBufSize = pComponentPrivate->pInPortDef->nBufferSize; 5275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLCML; 5276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ret = read(pComponentPrivate->filled_inpBuf_Q[0], &(pBuffHead), sizeof(pBuffHead)); 5277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (ret == -1) { 5278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM4(pComponentPrivate->dbg, "Error while reading from the pipe\n"); 5279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 5280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 5281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5282b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = DecrementCount (&(pComponentPrivate->nCountInputBFromApp), &(pComponentPrivate->mutexInputBFromApp)); 5283b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (eError != OMX_ErrorNone) { 5284b65f253fdc60f6208a54911bee793d225f23cdf8James Dong return eError; 5285b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 5286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if( pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingWMV && 5287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->ProcessMode == 0 && 5288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen != 0) { 5289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 5290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->bFirstHeader == OMX_FALSE) { 5291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffHead->nFlags & OMX_BUFFERFLAG_CODECCONFIG) { 5292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_HANDLE_FULL_STRM_PROP_OBJ 5293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pData = pBuffHead->pBuffer + 15; /*Position to Width & Height*/ 5294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_LoadDWORD(nValue, pData); 5296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nWidth = nValue; 5297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_LoadDWORD(nValue, pData); 5298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nHeight = nValue; 5299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((nWidth != (OMX_U32)pComponentPrivate->pOutPortDef->format.video.nFrameWidth) || 5301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (nHeight != (OMX_U32)pComponentPrivate->pOutPortDef->format.video.nFrameHeight)){ 5302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.nFrameWidth = nWidth; 5303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.nFrameHeight = nHeight; 5304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bOutPortSettingsChanged = OMX_TRUE; 5305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pData += 4; /*Position to compression type*/ 5308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_LoadDWORD(nValue, pData); 5309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nActualCompression = nValue; 5310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*If incorrect re-load SN with the proper nWMVFileType*/ 5312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "Compressions: WMV1=%lu, WMV2=%lu, WMV3=%lu, WVC1=%lu. Actual=%lu\n", 5313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin FOURCC_WMV1, FOURCC_WMV2, FOURCC_WMV3, FOURCC_WVC1, nActualCompression); 5314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->nWMVFileType == VIDDEC_WMV_RCVSTREAM && nActualCompression == FOURCC_WVC1){ 5315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nWMVFileType = VIDDEC_WMV_ELEMSTREAM; 5316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = VIDDEC_Set_SN_StreamType(pComponentPrivate); 5319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone){ 5320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 5321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 5323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Seting pCSD to proper position*/ 5324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCSD = pBuffHead->pBuffer; 5325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCSD += CSD_POSITION; 5326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nSize_CSD = pBuffHead->nFilledLen - CSD_POSITION; 5327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 5328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCSD = pBuffHead->pBuffer; 5329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nSize_CSD = pBuffHead->nFilledLen; 5330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 5331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nWMVFileType == VIDDEC_WMV_RCVSTREAM) { 5333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->pUalgParams == NULL) { 5334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U8* pTemp = NULL; 5335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_MALLOC_STRUCT_SIZED(pComponentPrivate->pUalgParams, WMV9DEC_UALGInputParam, 5336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sizeof(WMV9DEC_UALGInputParam) + VIDDEC_PADDING_FULL, 5337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel1]); 5338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp = (OMX_U8*)(pComponentPrivate->pUalgParams); 5339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp += VIDDEC_PADDING_HALF; 5340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pUalgParams = (OMX_PTR*)pTemp; 5341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags &= ~(OMX_BUFFERFLAG_CODECCONFIG); 5343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->bIsNALBigEndian) { 5344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pBufferRCV.sStructRCV.nStructData = (OMX_U32)pCSD[0] << 24 | 5345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCSD[1] << 16 | 5346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCSD[2] << 8 | 5347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCSD[3]; 5348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 5350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pBufferRCV.sStructRCV.nStructData = (OMX_U32)pCSD[0] << 0 | 5351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCSD[1] << 8 | 5352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCSD[2] << 16 | 5353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCSD[3] << 24; 5354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin size_dsp = sizeof(WMV9DEC_UALGInputParam); 5356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((WMV9DEC_UALGInputParam*)pComponentPrivate->pUalgParams)->lBuffCount = ++pComponentPrivate->frameCounter; 5357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pUalgInpParams = pComponentPrivate->pUalgParams; 5358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Only WMV need to send EMMCodecInputBufferMapBufLen buffers */ 5359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_QueueBuffer(((LCML_DSP_INTERFACE*) 5360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle)->pCodecinterfacehandle, 5361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecInputBufferMapBufLen, 5362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_U8*)&pComponentPrivate->pBufferRCV.pBuffer, 5363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sizeof(VIDDEC_WMV_RCV_struct), 5364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sizeof(VIDDEC_WMV_RCV_struct), 5365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_U8 *)pUalgInpParams, 5366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin size_dsp, 5367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_U8*)&pComponentPrivate->pBufferTemp); 5368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "Returning First Input Buffer to test application\n"); 5369b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufferPrivate = (VIDDEC_BUFFER_PRIVATE* )pBuffHead->pInputPortPrivate; 5370b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufferPrivate->eBufferOwner = VIDDEC_BUFFER_WITH_CLIENT; 5371b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER1(pComponentPrivate->dbg, "eBufferOwner 0x%x\n", pBufferPrivate->eBufferOwner); 5372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #ifdef __PERF_INSTRUMENTATION__ 5373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 5374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pBuffer, 5375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen, 5376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleHLMM); 5377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #endif 537875654962d82cc9054c198ce88fc2db0c56b16232James Dong VIDDEC_EmptyBufferDone(pComponentPrivate, pBuffHead); 5379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFirstHeader = OMX_TRUE; 5380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 5381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { /* VC1 Advance profile */ 5383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_WMVPOINTERFIXED 5384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pCodecData == NULL || 5385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin !(pBuffHead->pBuffer[0] == 0 && 5386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pBuffer[1] == 0 && 5387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pBuffer[2] == 1)) { 5388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 5389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffHead->nOffset != 0) { 5390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 5391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffHead->nFlags & OMX_BUFFERFLAG_CODECCONFIG) { 5392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags &= ~(OMX_BUFFERFLAG_CODECCONFIG); 5393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pCodecData != NULL) { 5394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin free(pComponentPrivate->pCodecData); 5395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pCodecData = NULL; 5396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Save Codec Specific Data */ 5398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pCodecData = malloc (pBuffHead->nFilledLen); 5399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_WMVPOINTERFIXED 5400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy (pComponentPrivate->pCodecData, pBuffHead->pBuffer, pBuffHead->nFilledLen); 5401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 5402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy (pComponentPrivate->pCodecData, pBuffHead->pBuffer + pBuffHead->nOffset, pBuffHead->nFilledLen); 5403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 5404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nCodecDataSize = pBuffHead->nFilledLen; 5405e074e61deca17dd3ffc4e431f30464943d225fe0Benny Wong if(pComponentPrivate->nCodecDataSize > VIDDEC_WMV_BUFFER_OFFSET){ 5406e074e61deca17dd3ffc4e431f30464943d225fe0Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "Insufficient space in buffer pbuffer %p - nCodecDataSize %u\n", 5407e074e61deca17dd3ffc4e431f30464943d225fe0Benny Wong (void *)pBuffHead->pBuffer,pComponentPrivate->nCodecDataSize); 5408e074e61deca17dd3ffc4e431f30464943d225fe0Benny Wong eError = OMX_ErrorStreamCorrupt; 5409e074e61deca17dd3ffc4e431f30464943d225fe0Benny Wong goto EXIT; 5410e074e61deca17dd3ffc4e431f30464943d225fe0Benny Wong } 5411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_ACTIVATEPARSER 5412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = VIDDEC_ParseHeader( pComponentPrivate, pBuffHead); 5413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 5414fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "Returning First Input Buffer to test application %x\n",eError); 5415b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufferPrivate = (VIDDEC_BUFFER_PRIVATE* )pBuffHead->pInputPortPrivate; 5416b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufferPrivate->eBufferOwner = VIDDEC_BUFFER_WITH_CLIENT; 5417b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER1(pComponentPrivate->dbg, "eBufferOwner 0x%x\n", pBufferPrivate->eBufferOwner); 5418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #ifdef __PERF_INSTRUMENTATION__ 5419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 5420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pBuffer, 5421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen, 5422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleHLMM); 5423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #endif 5424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_WMVPOINTERFIXED 5425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "restoring buffer pointer 0x%p >> pBuffer 0x%p\n", 5426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferPrivate->pTempBuffer, pBuffHead->pBuffer); 5427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pBuffer = pBufferPrivate->pTempBuffer; 5428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 5429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nOffset = VIDDEC_WMV_BUFFER_OFFSET; 5430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 543175654962d82cc9054c198ce88fc2db0c56b16232James Dong VIDDEC_EmptyBufferDone(pComponentPrivate, pBuffHead); 5432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return OMX_ErrorNone; 5433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 5435b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* VC-1: First data buffer received, add configuration data to it*/ 5436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFirstHeader = OMX_TRUE; 5437e074e61deca17dd3ffc4e431f30464943d225fe0Benny Wong OMX_WMV_INSERT_CODEC_DATA(pBuffHead, pComponentPrivate); 5438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 5439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 5442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*if no config flag is set just parse buffer and set flag first buffer*/ 5443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*this is ejecuted by the first buffer regular buffer*/ 5444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->bFirstHeader == OMX_FALSE) { 5445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFirstHeader = OMX_TRUE; 5446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = VIDDEC_ParseHeader(pComponentPrivate, pBuffHead); 5447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone) { 5448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "Returning First Input Buffer to test application\n"); 5449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFirstHeader = OMX_TRUE; 5450b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufferPrivate = (VIDDEC_BUFFER_PRIVATE* )pBuffHead->pInputPortPrivate; 5451b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufferPrivate->eBufferOwner = VIDDEC_BUFFER_WITH_CLIENT; 5452b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER1(pComponentPrivate->dbg, "eBufferOwner 0x%x\n", pBufferPrivate->eBufferOwner); 5453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #ifdef __PERF_INSTRUMENTATION__ 5454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 5455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pBuffer, 5456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen, 5457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleHLMM); 5458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #endif 5459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_WMVPOINTERFIXED 5460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "restoring buffer pointer 0x%p >> pBuffer 0x%p\n", 5461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferPrivate->pTempBuffer, pBuffHead->pBuffer); 5462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pBuffer = pBufferPrivate->pTempBuffer; 5463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 5464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nOffset = VIDDEC_WMV_BUFFER_OFFSET; 5465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 546675654962d82cc9054c198ce88fc2db0c56b16232James Dong VIDDEC_EmptyBufferDone(pComponentPrivate, pBuffHead); 5467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 5468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 5469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 5471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 5472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin }/*codec data is stored one time and repeated for each Config buffer*/ 5477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->nWMVFileType == VIDDEC_WMV_ELEMSTREAM) { 5478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_WMVPOINTERFIXED 5479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!(pBuffHead->pBuffer[0] == 0 && 5480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pBuffer[1] == 0 && 5481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pBuffer[2] == 1)) { 5482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 5483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffHead->nOffset != 0) { 5484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 5485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_S32 nDifference = 0; 5486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8* pTempBuffer = NULL; 5487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_WMVPOINTERFIXED 5488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempBuffer = pBuffHead->pBuffer; 5489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 5490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempBuffer = pBuffHead->pBuffer + pBuffHead->nOffset; 5491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 5492b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef VIDDEC_WMVPOINTERFIXED 5493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nDifference = pBuffHead->pBuffer - pTempBuffer; 5494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 5495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nDifference = pTempBuffer - pBuffHead->pBuffer; 5496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 5497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nDifference < 0) { 5498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "Insufficient space in buffer pbuffer %p - nOffset %lx\n", 5499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pBuffer, pBuffHead->nOffset); 5500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorStreamCorrupt; 5501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 5502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*(--pTempBuffer)) = 0x0d; 5504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*(--pTempBuffer)) = 0x01; 5505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*(--pTempBuffer)) = 0x00; 5506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*(--pTempBuffer)) = 0x00; 5507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen += 4; 5508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_WMVPOINTERFIXED 5509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pBuffer = pTempBuffer; 5510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nOffset = 0; 5511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 5512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nOffset = pTempBuffer - pBuffHead->pBuffer; 5513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 5514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "pTempBuffer %p - pBuffHead->pBuffer %p - pBuffHead->nOffset %lx\n", 5515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTempBuffer,pBuffHead->pBuffer,pBuffHead->nOffset); 5516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 5517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 5519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "incorrect path %lu\n",pBuffHead->nOffset); 5520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*if no config flag is set just parse buffer and set flag first buffer*/ 5521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*this is ejecuted by the first buffer regular buffer*/ 5522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->bFirstHeader == OMX_FALSE) { 5523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFirstHeader = OMX_TRUE; 5524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = VIDDEC_ParseHeader(pComponentPrivate, pBuffHead); 5525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone) { 5526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "Returning First Input Buffer to test application\n"); 5527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFirstHeader = OMX_TRUE; 5528b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufferPrivate = (VIDDEC_BUFFER_PRIVATE* )pBuffHead->pInputPortPrivate; 5529b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufferPrivate->eBufferOwner = VIDDEC_BUFFER_WITH_CLIENT; 5530b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER1(pComponentPrivate->dbg, "eBufferOwner 0x%x\n", pBufferPrivate->eBufferOwner); 5531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #ifdef __PERF_INSTRUMENTATION__ 5532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 5533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pBuffer, 5534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen, 5535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleHLMM); 5536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #endif 5537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_WMVPOINTERFIXED 5538b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "restoring buffer pointer 0x%p >> pBuffer 0x%p\n", 5539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferPrivate->pTempBuffer, pBuffHead->pBuffer); 5540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pBuffer = pBufferPrivate->pTempBuffer; 5541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 5542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nOffset = VIDDEC_WMV_BUFFER_OFFSET; 5543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 554475654962d82cc9054c198ce88fc2db0c56b16232James Dong VIDDEC_EmptyBufferDone(pComponentPrivate, pBuffHead); 5545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 5546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 5547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 5549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 5550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5554b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_ACTIVATEPARSER 5556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((((pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingAVC) || 5557b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG4 || 5558b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG2 || 5559b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingH263) || 5560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingWMV && 5561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->ProcessMode == 1)) && 5562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bParserEnabled && 5563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bFirstHeader == OMX_FALSE) { 5564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bFirstHeader = OMX_TRUE; 5565b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* If VIDDEC_ParseHeader() does not return OMX_ErrorNone, then 5566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * reconfiguration is required. 5567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * eError is set to OMX_ErrorNone after saving the buffer, which will 5568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * be used later by the reconfiguration logic. 5569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 5570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = VIDDEC_ParseHeader( pComponentPrivate, pBuffHead); 5571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 5572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* The MPEG4 & H.263 algorithm expects both the configuration buffer 5573b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * and the first data buffer to be in the same frame - this logic only 5574b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * applies when in frame mode and when the framework sends the config data 5575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * separately. The same situation is handled elsewhere for H.264 & WMV 5576b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * decoding. 5577b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 5578b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(eError != OMX_ErrorNone || 5579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG4 || 5580b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingH263) && 5581b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->ProcessMode == 0)) { 5582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBuffHead != NULL) { 5583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef ANDROID 5585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg,"save 1st ccd buffer - pBuffhead->nFilledLen = %d\n", pBuffHead->nFilledLen); 5586b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = VIDDEC_SaveBuffer(pComponentPrivate, pBuffHead); 5587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(eError != OMX_ErrorNone){ 5588b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 5589b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* only if NAL-bitstream format in frame mode */ 5591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->ProcessMode == 0 && pComponentPrivate->H264BitStreamFormat > 0) { 5592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->aCCDsize[pComponentPrivate->nCCDcnt++] = pBuffHead->nFilledLen; 5593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 5595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5596b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufferPrivate = (VIDDEC_BUFFER_PRIVATE* )pBuffHead->pInputPortPrivate; 5597b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufferPrivate->eBufferOwner = VIDDEC_BUFFER_WITH_CLIENT; 5598b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER1(pComponentPrivate->dbg, "eBufferOwner 0x%x\n", pBufferPrivate->eBufferOwner); 5599b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin #ifdef __PERF_INSTRUMENTATION__ 5600b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 5601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBuffHead->pBuffer, 5602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBuffHead->nFilledLen, 5603b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin PERF_ModuleHLMM); 5604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin #endif 5605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 560675654962d82cc9054c198ce88fc2db0c56b16232James Dong VIDDEC_EmptyBufferDone(pComponentPrivate, pBuffHead); 5607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorNone; 5609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 5610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5611b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 5612b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* We have received only one part of the Config Buffer, we need to wait for more buffers. ONLY FOR AVC*/ 5613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingAVC && 5614b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bConfigBufferCompleteAVC == FALSE){ 5615b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Set bFirstHeader flag to false so next buffer enters to ParseHeade again*/ 5616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bFirstHeader = OMX_FALSE; 5617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "AVC: bConfigBufferCompleateAVC == FALSE!"); 5618b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 5619b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5620b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorNone; 5621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 5624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nInCmdMarkBufIndex != pComponentPrivate->nOutCmdMarkBufIndex) { 5627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->arrMarkBufIndex[pComponentPrivate->nInMarkBufIndex].hMarkTargetComponent = pComponentPrivate->arrCmdMarkBufIndex[pComponentPrivate->nOutCmdMarkBufIndex].hMarkTargetComponent; 5628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->arrMarkBufIndex[pComponentPrivate->nInMarkBufIndex].pMarkData = pComponentPrivate->arrCmdMarkBufIndex[pComponentPrivate->nOutCmdMarkBufIndex].pMarkData; 5629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nOutCmdMarkBufIndex++; 5630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nOutCmdMarkBufIndex %= VIDDEC_MAX_QUEUE_SIZE; 5631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nInMarkBufIndex++; 5632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nInMarkBufIndex %= VIDDEC_MAX_QUEUE_SIZE; 5633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 5635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->arrMarkBufIndex[pComponentPrivate->nInMarkBufIndex].hMarkTargetComponent = pBuffHead->hMarkTargetComponent; 5636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->arrMarkBufIndex[pComponentPrivate->nInMarkBufIndex].pMarkData = pBuffHead->pMarkData; 5637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nInMarkBufIndex++; 5638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nInMarkBufIndex %= VIDDEC_MAX_QUEUE_SIZE; 5639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "pBuffHead 0x%p eExecuteToIdle 0x%x\n", pBuffHead,pComponentPrivate->eExecuteToIdle); 5642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "nFilledLen 0x%lx nFlags 0x%lx\n", pBuffHead->nFilledLen,pBuffHead->nFlags); 5643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferPrivate = (VIDDEC_BUFFER_PRIVATE* )pBuffHead->pInputPortPrivate; 5644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBuffHead->nFlags & OMX_BUFFERFLAG_EOS){ 5646b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "End of Input EOS, nFlags=0x%x nFilledLen 0x%lx\n", pBuffHead->nFlags, pBuffHead->nFilledLen); 5647b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pBuffHead->nFilledLen != 0) { /*TODO: Validate this lagic*/ 5648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingAVC) { 5649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pUalgInpParams = (OMX_PTR)pBufferPrivate->pUalgParam; 5650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ((pBuffHead->nFlags & OMX_BUFFERFLAG_EOS) == 0) { 5651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((H264VDEC_UALGInputParam *)pUalgInpParams)->lBuffCount = ++pComponentPrivate->frameCounter; 5652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 5653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* prepare buffer and input parameter if H264BitStreamFormat = 1 */ 5654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* the orignial buffer is: NAL1_Len NAL1 NAL2_Len NAL2...*/ 5655b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* we need to pack the data buffer as: NAL1 NAL2 NAL3..*/ 5656b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* and put the length info to the parameter array*/ 5657b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->H264BitStreamFormat) { 5658b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 nal_len, i; 5659b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U8 *pDataBuf; 5660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 length_pos = 0; 5661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 data_pos = 0; 5662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 buf_len; 5663b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin H264VDEC_UALGInputParam *pParam; 5664b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 5665b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin buf_len = pBuffHead->nFilledLen; 5666b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pDataBuf = pBuffHead->pBuffer; 5667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pParam = (H264VDEC_UALGInputParam *)pUalgInpParams; 5668b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pParam->ulNumOfNALU = 0; 5669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin while (pBuffHead->nFilledLen > length_pos+pComponentPrivate->H264BitStreamFormat) { 5670b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->H264BitStreamFormat == 1) 5671b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->bIsNALBigEndian) { 5672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nal_len = (OMX_U32)pDataBuf[length_pos]; 5673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 5675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nal_len = (OMX_U32)pDataBuf[length_pos]; 5676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5677b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (pComponentPrivate->H264BitStreamFormat == 2) 5678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->bIsNALBigEndian) { 5679b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nal_len = (OMX_U32)pDataBuf[length_pos] << 8 | pDataBuf[length_pos+1]; 5680b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5681b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 5682b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nal_len = (OMX_U32)pDataBuf[length_pos] << 0 | pDataBuf[length_pos+1] << 8 ; 5683b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5684b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (pComponentPrivate->H264BitStreamFormat == 4){ 5685b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->bIsNALBigEndian) { 5686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nal_len = (OMX_U32)pDataBuf[length_pos]<<24 | pDataBuf[length_pos+1] << 16 | pDataBuf[length_pos+2] << 8 | pDataBuf[length_pos+3]; 5687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 5689b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nal_len = (OMX_U32)pDataBuf[length_pos]<<0 | pDataBuf[length_pos+1] << 8 | pDataBuf[length_pos+2] << 16 | pDataBuf[length_pos+3]<<24; 5690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5692b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 5693b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorBadParameter; 5694b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 5695b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5696b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin length_pos += pComponentPrivate->H264BitStreamFormat; 5697b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (nal_len > buf_len - length_pos) { 5698b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorBadParameter; 5699b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 5700b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5701b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* move the memory*/ 5702b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i<nal_len; i++) 5703b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pDataBuf[data_pos+i] = pDataBuf[length_pos+i]; 5704b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin data_pos += nal_len; 5705b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin length_pos += nal_len; 5706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* save the size*/ 5707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pParam->pNALUSizeArray[pParam->ulNumOfNALU++] = nal_len; 5708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5709b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* update with the new data size*/ 5710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBuffHead->nFilledLen = data_pos; 5711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin size_dsp = sizeof(H264VDEC_UALGInputParam); 5714b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5715b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingWMV) { 5716b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pUalgInpParams = (OMX_PTR)pBufferPrivate->pUalgParam; 5717b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ((pBuffHead->nFlags & OMX_BUFFERFLAG_EOS) == 0) { 5718b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((WMV9DEC_UALGInputParam*)pUalgInpParams)->lBuffCount = ++pComponentPrivate->frameCounter; 5719b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5720b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin size_dsp = sizeof(WMV9DEC_UALGInputParam); 5721b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5722b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG4 || 5723b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingH263) { 5724b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pUalgInpParams = (OMX_PTR)pBufferPrivate->pUalgParam; 5725b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ((pBuffHead->nFlags & OMX_BUFFERFLAG_EOS) == 0) { 5726b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((MP4VD_GPP_SN_UALGInputParams*)pUalgInpParams)->nBuffCount = ++pComponentPrivate->frameCounter; 5727b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ((MP4VD_GPP_SN_UALGInputParams*)pUalgInpParams)->uRingIOBlocksize = 0; 5728b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ((MP4VD_GPP_SN_UALGInputParams*)pUalgInpParams)->nPerformMode = 2; 5729b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5730b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin size_dsp = sizeof(MP4VD_GPP_SN_UALGInputParams); 5731b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5732b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG2) { 5733b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pUalgInpParams = (OMX_PTR)pBufferPrivate->pUalgParam; 5734b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ((pBuffHead->nFlags & OMX_BUFFERFLAG_EOS) == 0) { 5735b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((MP2VDEC_UALGInputParam*)pUalgInpParams)->lBuffCount = ++pComponentPrivate->frameCounter; 5736b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5737b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin size_dsp = sizeof(MP2VDEC_UALGInputParam); 5738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_SPARK_CODE 5740b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (VIDDEC_SPARKCHECK) { 5741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pUalgInpParams = (OMX_PTR)pBufferPrivate->pUalgParam; 5742b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ((pBuffHead->nFlags & OMX_BUFFERFLAG_EOS) == 0) { 5743b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((SPARKVD_GPP_SN_UALGInputParams*)pUalgInpParams)->lBuffCount = ++pComponentPrivate->frameCounter; 5744b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5745b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((SPARKVD_GPP_SN_UALGInputParams*)pUalgInpParams)->nIsSparkInput = 1; 5746b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin size_dsp = sizeof(SPARKVD_GPP_SN_UALGInputParams); 5747b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 5749b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 5750b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorUnsupportedSetting; 5751b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER4(pComponentPrivate->dbg, "VIDDEC_HandleDataBuf_FromApp 0x%x\n", eError); 5752b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 5753b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5754fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5755b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->ProcessMode == 0) { 5756b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U8 ucIndex = 0; 5757b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PTR pBufferFlags = NULL; 5758b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ucIndex = VIDDEC_CircBuf_GetHead(pComponentPrivate, 5759b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin VIDDEC_CBUFFER_TIMESTAMP, 5760b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin VIDDEC_INPUT_PORT); 5761b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->aBufferFlags[ucIndex].nTimeStamp = pBuffHead->nTimeStamp; 5762b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->aBufferFlags[ucIndex].nTickCount = pBuffHead->nTickCount; 5763b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBuffHead->nFlags &= ~OMX_BUFFERFLAG_EOS; 5764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->aBufferFlags[ucIndex].nFlags = pBuffHead->nFlags; 5765b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufferFlags = &pComponentPrivate->aBufferFlags[ucIndex]; 5766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin VIDDEC_CircBuf_Add(pComponentPrivate, 5767b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin VIDDEC_CBUFFER_TIMESTAMP, 5768b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin VIDDEC_INPUT_PORT, 5769b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufferFlags); 5770b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5771b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 5772b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->arrBufIndex[pComponentPrivate->nInBufIndex] = pBuffHead->nTimeStamp; 5773b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nInBufIndex++; 5774b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nInBufIndex %= VIDDEC_MAX_QUEUE_SIZE; 5775b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5776b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "pBuffHead->nTimeStamp %lld\n", pBuffHead->nTimeStamp); 5777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 5779b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 5780b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBuffHead->pBuffer, 5781b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBuffHead->nFilledLen, 5782b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin PERF_ModuleCommonLayer); 5783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 5784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5785b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->eLCMLState != VidDec_LCML_State_Unload && 5786b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->eLCMLState != VidDec_LCML_State_Destroy && 5787b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pLCML != NULL){ 5788b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufferPrivate->eBufferOwner = VIDDEC_BUFFER_WITH_DSP; 5789b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBuffHead->nFlags = 0; 5790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 5792b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 5793b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBuffHead->pBuffer, 5794b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBuffHead->nFilledLen, 5795b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin PERF_ModuleHLMM); 5796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 5797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5798b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->bDynamicConfigurationInProgress){ 5799b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufferPrivate = (VIDDEC_BUFFER_PRIVATE* )pBuffHead->pInputPortPrivate; 5800b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufferPrivate->eBufferOwner = VIDDEC_BUFFER_WITH_CLIENT; 5801b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER1(pComponentPrivate->dbg, "eBufferOwner 0x%x\n", pBufferPrivate->eBufferOwner); 5802b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 5803b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Sending buffer back to client pBuffer=%p\n", pBuffHead->pBuffer); 580475654962d82cc9054c198ce88fc2db0c56b16232James Dong VIDDEC_EmptyBufferDone(pComponentPrivate, pBuffHead); 5805b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 5806fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5807b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 5808b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "Sending EOS Filled eBufferOwner 0x%x\n", pBufferPrivate->eBufferOwner); 5809b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "LCML_QueueBuffer(INPUT)\n"); 5810b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_QueueBuffer(((LCML_DSP_INTERFACE*) 5811b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHandle)->pCodecinterfacehandle, 5812b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingWMV) ? EMMCodecInputBufferMapBufLen : EMMCodecInputBuffer), 5813b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin &pBuffHead->pBuffer[pBuffHead->nOffset],/*WMV_VC1_CHANGES*/ 5814b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBuffHead->nAllocLen, 5815b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBuffHead->nFilledLen, 5816b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U8 *)pUalgInpParams, 5817b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin size_dsp, 5818b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U8 *)pBuffHead); 5819b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone){ 5820b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "LCML_QueueBuffer(INPUT):OMX_BUFFERFLAG_EOS, Error 0x%x\n", eError); 5821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 5822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 5823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 5826b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 5827b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 5828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 5829b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5830b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 5831b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufferPrivate->eBufferOwner = VIDDEC_BUFFER_WITH_COMPONENT; 5832b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "eBufferOwner 0x%x\n", pBufferPrivate->eBufferOwner); 5833b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = IncrementCount (&(pComponentPrivate->nCountInputBFromDsp), &(pComponentPrivate->mutexInputBFromDSP)); 5834b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (eError != OMX_ErrorNone) { 5835b65f253fdc60f6208a54911bee793d225f23cdf8James Dong return eError; 5836b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 5837b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ret = write(pComponentPrivate->free_inpBuf_Q[1], &pBuffHead, sizeof(pBuffHead)); 5838b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(ret == -1){ 5839b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRCOMM4(pComponentPrivate->dbg, "writing to the input pipe %x (%d)\n", OMX_ErrorInsufficientResources,ret); 5840a7d8550490e7973b12ab6aed936182ce30f882a1James Dong pBufferPrivate->eBufferOwner = VIDDEC_BUFFER_WITH_DSP; 5841a7d8550490e7973b12ab6aed936182ce30f882a1James Dong DecrementCount (&(pComponentPrivate->nCountInputBFromDsp), &(pComponentPrivate->mutexInputBFromDSP)); 5842b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 5843b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 5844b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 5845b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorInsufficientResources, 5846b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_TI_ErrorSevere, 5847b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin "Error writing to the output pipe"); 5848b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5849b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 5850fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5851b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(pComponentPrivate->iEndofInputSent == 0){ 5852b65f253fdc60f6208a54911bee793d225f23cdf8James Dong //pComponentPrivate->iEndofInputSent = 1; 5853b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER1(pComponentPrivate->dbg, "Sending EOS Empty eBufferOwner 0x%x\n", pBufferPrivate->eBufferOwner); 5854b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(pComponentPrivate->eFirstBuffer.bSaveFirstBuffer == OMX_FALSE){ 5855b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT_DSPALIGN(pComponentPrivate->pUalgParams,OMX_PTR); 5856b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 5857fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5858b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingAVC) { 5859b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(pComponentPrivate->pUalgParams == NULL){ 5860b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_U8* pTemp = NULL; 5861b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MALLOC_STRUCT_SIZED(pComponentPrivate->pUalgParams, 5862b65f253fdc60f6208a54911bee793d225f23cdf8James Dong H264VDEC_UALGInputParam, 5863b65f253fdc60f6208a54911bee793d225f23cdf8James Dong sizeof(H264VDEC_UALGInputParam) + VIDDEC_PADDING_FULL, 5864b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel1]); 5865b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pTemp = (OMX_U8*)(pComponentPrivate->pUalgParams); 5866b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pTemp += VIDDEC_PADDING_HALF; 5867b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pUalgParams = (OMX_PTR*)pTemp; 5868b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 5869b65f253fdc60f6208a54911bee793d225f23cdf8James Dong size_dsp = sizeof(H264VDEC_UALGInputParam); 5870b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ((H264VDEC_UALGInputParam *)pComponentPrivate->pUalgParams)->lBuffCount = -1; 5871b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER1(pComponentPrivate->dbg, "lBuffCount 0x%lx\n", 5872b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((H264VDEC_UALGInputParam *)pComponentPrivate->pUalgParams)->lBuffCount); 5873b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 5874b65f253fdc60f6208a54911bee793d225f23cdf8James Dong else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingWMV) { 5875b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(pComponentPrivate->pUalgParams == NULL){ 5876b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_U8* pTemp = NULL; 5877b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MALLOC_STRUCT_SIZED(pComponentPrivate->pUalgParams, 5878b65f253fdc60f6208a54911bee793d225f23cdf8James Dong WMV9DEC_UALGInputParam, 5879b65f253fdc60f6208a54911bee793d225f23cdf8James Dong sizeof(WMV9DEC_UALGInputParam) + VIDDEC_PADDING_FULL, 5880b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel1]); 5881b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pTemp = (OMX_U8*)(pComponentPrivate->pUalgParams); 5882b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pTemp += VIDDEC_PADDING_HALF; 5883b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pUalgParams = (OMX_PTR*)pTemp; 5884b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 5885b65f253fdc60f6208a54911bee793d225f23cdf8James Dong size_dsp = sizeof(WMV9DEC_UALGInputParam); 5886b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ((WMV9DEC_UALGInputParam*)pComponentPrivate->pUalgParams)->lBuffCount = -1; 5887b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER1(pComponentPrivate->dbg, "lBuffCount 0x%lx\n", 5888b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((WMV9DEC_UALGInputParam*)pComponentPrivate->pUalgParams)->lBuffCount); 5889b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 5890b65f253fdc60f6208a54911bee793d225f23cdf8James Dong else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG4 || 5891b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingH263) { 5892b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(pComponentPrivate->pUalgParams == NULL){ 5893b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_U8* pTemp = NULL; 5894b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MALLOC_STRUCT_SIZED(pComponentPrivate->pUalgParams, 5895b65f253fdc60f6208a54911bee793d225f23cdf8James Dong MP4VD_GPP_SN_UALGInputParams, 5896b65f253fdc60f6208a54911bee793d225f23cdf8James Dong sizeof(MP4VD_GPP_SN_UALGInputParams) + VIDDEC_PADDING_FULL, 5897b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel1]); 5898b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pTemp = (OMX_U8*)(pComponentPrivate->pUalgParams); 5899b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pTemp += VIDDEC_PADDING_HALF; 5900b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pUalgParams = (OMX_PTR*)pTemp; 5901b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 5902b65f253fdc60f6208a54911bee793d225f23cdf8James Dong size_dsp = sizeof(MP4VD_GPP_SN_UALGInputParams); 5903b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ((MP4VD_GPP_SN_UALGInputParams*)pComponentPrivate->pUalgParams)->nBuffCount = ++pComponentPrivate->frameCounter; 5904b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ((MP4VD_GPP_SN_UALGInputParams*)pComponentPrivate->pUalgParams)->uRingIOBlocksize = 0; 5905b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* If EOS is sent, set nPerformMode to 0 (this handle thumbnail case)*/ 5906b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ((MP4VD_GPP_SN_UALGInputParams*)pComponentPrivate->pUalgParams)->nPerformMode = 0; 5907b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER1(pComponentPrivate->dbg, "lBuffCount 0x%lx\n", 5908b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((MP4VD_GPP_SN_UALGInputParams*)pComponentPrivate->pUalgParams)->nBuffCount); 5909b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 5910b65f253fdc60f6208a54911bee793d225f23cdf8James Dong else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG2) { 5911b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(pComponentPrivate->pUalgParams == NULL){ 5912b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_U8* pTemp = NULL; 5913b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MALLOC_STRUCT_SIZED(pComponentPrivate->pUalgParams, 5914b65f253fdc60f6208a54911bee793d225f23cdf8James Dong MP2VDEC_UALGInputParam, 5915b65f253fdc60f6208a54911bee793d225f23cdf8James Dong sizeof(MP2VDEC_UALGInputParam) + VIDDEC_PADDING_FULL, 5916b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel1]); 5917b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pTemp = (OMX_U8*)(pComponentPrivate->pUalgParams); 5918b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pTemp += VIDDEC_PADDING_HALF; 5919b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pUalgParams = (OMX_PTR*)pTemp; 5920b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 5921b65f253fdc60f6208a54911bee793d225f23cdf8James Dong size_dsp = sizeof(MP2VDEC_UALGInputParam); 5922b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ((MP2VDEC_UALGInputParam*)pComponentPrivate->pUalgParams)->lBuffCount = -1; 5923b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER1(pComponentPrivate->dbg, "lBuffCount 0x%lx\n", 5924b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((MP2VDEC_UALGInputParam*)pComponentPrivate->pUalgParams)->lBuffCount); 5925b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 5926b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef VIDDEC_SPARK_CODE 5927b65f253fdc60f6208a54911bee793d225f23cdf8James Dong else if (VIDDEC_SPARKCHECK) { 5928b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(pComponentPrivate->pUalgParams == NULL){ 5929b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_U8* pTemp = NULL; 5930b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MALLOC_STRUCT_SIZED(pComponentPrivate->pUalgParams, 5931b65f253fdc60f6208a54911bee793d225f23cdf8James Dong SPARKVD_GPP_SN_UALGInputParams, 5932b65f253fdc60f6208a54911bee793d225f23cdf8James Dong sizeof(SPARKVD_GPP_SN_UALGInputParams) + VIDDEC_PADDING_FULL, 5933b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel1]); 5934b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pTemp = (OMX_U8*)(pComponentPrivate->pUalgParams); 5935b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pTemp += VIDDEC_PADDING_HALF; 5936b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pUalgParams = (OMX_PTR*)pTemp; 5937b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 5938b65f253fdc60f6208a54911bee793d225f23cdf8James Dong size_dsp = sizeof(SPARKVD_GPP_SN_UALGInputParams); 5939b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ((SPARKVD_GPP_SN_UALGInputParams*)pComponentPrivate->pUalgParams)->lBuffCount = -1; 5940b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ((SPARKVD_GPP_SN_UALGInputParams*)pComponentPrivate->pUalgParams)->nIsSparkInput = 1; 5941b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER1(pComponentPrivate->dbg, "lBuffCount 0x%lx\n", 5942b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((SPARKVD_GPP_SN_UALGInputParams*)pComponentPrivate->pUalgParams)->lBuffCount); 5943b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 5944fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 5945b65f253fdc60f6208a54911bee793d225f23cdf8James Dong else { 5946b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = OMX_ErrorUnsupportedSetting; 5947b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto EXIT; 5948b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 5949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 5951b65f253fdc60f6208a54911bee793d225f23cdf8James Dong PERF_SendingFrame(pComponentPrivate->pPERFcomp, 5952b65f253fdc60f6208a54911bee793d225f23cdf8James Dong NULL, 0, 5953b65f253fdc60f6208a54911bee793d225f23cdf8James Dong PERF_ModuleCommonLayer); 5954fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 5955b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(pComponentPrivate->eLCMLState != VidDec_LCML_State_Unload && 5956b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->eLCMLState != VidDec_LCML_State_Destroy && 5957b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pLCML != NULL){ 5958b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pTempBuffHead.nFlags = 0; 5959b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pTempBuffHead.nFlags |= OMX_BUFFERFLAG_EOS; 5960b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pTempBuffHead.nFilledLen = 0; 5961b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pTempBuffHead.pBuffer = NULL; 5962b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 5963fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 5964b65f253fdc60f6208a54911bee793d225f23cdf8James Dong PERF_SendingFrame(pComponentPrivate->pPERFcomp, 5965b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBuffHead->pBuffer, 5966b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBuffHead->nFilledLen, 5967b65f253fdc60f6208a54911bee793d225f23cdf8James Dong PERF_ModuleHLMM); 5968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 5969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5970b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(pComponentPrivate->bDynamicConfigurationInProgress){ 5971b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufferPrivate = (VIDDEC_BUFFER_PRIVATE* )pBuffHead->pInputPortPrivate; 5972b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufferPrivate->eBufferOwner = VIDDEC_BUFFER_WITH_CLIENT; 5973b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER1(pComponentPrivate->dbg, "eBufferOwner 0x%x\n", pBufferPrivate->eBufferOwner); 5974b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER2(pComponentPrivate->dbg, "Sending buffer back to client pBuffer=%p\n", pBuffHead->pBuffer); 5975b65f253fdc60f6208a54911bee793d225f23cdf8James Dong VIDDEC_EmptyBufferDone(pComponentPrivate, pBuffHead); 5976b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto EXIT; 5977b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 5978fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5979b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP2(pComponentPrivate->dbg, "LCML_QueueBuffer(INPUT)\n"); 5980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5981b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* Verify if first buffer as been stored. 5982b65f253fdc60f6208a54911bee793d225f23cdf8James Dong * Handle case were only one frame is decoded */ 5983b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(pComponentPrivate->eFirstBuffer.bSaveFirstBuffer){ 5984b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = VIDDEC_CopyBuffer(pComponentPrivate, pBuffHead); 5985b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (eError != OMX_ErrorNone) { 5986b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP4(pComponentPrivate->dbg, "VIDDEC_HandleDataBuf_FromApp: VIDDEC_CopyBuffer()= 0x%x\n", eError); 5987b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (eError == OMX_ErrorInsufficientResources) { 5988b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto EXIT; 5989b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 5990b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 5991b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufferPrivate->eBufferOwner = VIDDEC_BUFFER_WITH_DSP; 5992b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = LCML_QueueBuffer(((LCML_DSP_INTERFACE*) 5993b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pLcmlHandle)->pCodecinterfacehandle, 5994b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ((pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingWMV) ? EMMCodecInputBufferMapBufLen : EMMCodecInputBuffer), 5995b65f253fdc60f6208a54911bee793d225f23cdf8James Dong &pBuffHead->pBuffer[pBuffHead->nOffset],/*WMV_VC1_CHANGES*/ 5996b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBuffHead->nAllocLen, 5997b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBuffHead->nFilledLen, 5998b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (OMX_U8 *)pComponentPrivate->pUalgParams, 5999b65f253fdc60f6208a54911bee793d225f23cdf8James Dong size_dsp, 6000b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (OMX_U8 *)pBuffHead); 6001b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (eError != OMX_ErrorNone){ 6002b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP4(pComponentPrivate->dbg, "LCML_QueueBuffer EOS (0x%x)\n",eError); 6003b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = OMX_ErrorHardware; 6004fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 6005fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6006fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6007b65f253fdc60f6208a54911bee793d225f23cdf8James Dong else{ 6008b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = LCML_QueueBuffer(pLcmlHandle->pCodecinterfacehandle, 6009b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ((pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingWMV) ? EMMCodecInputBufferMapBufLen : EMMCodecInputBuffer), 6010b65f253fdc60f6208a54911bee793d225f23cdf8James Dong NULL, 6011b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 0, 6012b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 0, 6013b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (OMX_U8 *)pComponentPrivate->pUalgParams, 6014b65f253fdc60f6208a54911bee793d225f23cdf8James Dong size_dsp, 6015b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (OMX_PTR)&pComponentPrivate->pTempBuffHead); 6016b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 6017b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone){ 6018b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP4(pComponentPrivate->dbg, "LCML_QueueBuffer 1 (0x%x)\n",eError); 6019fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 6020fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 6021fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6022fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6023b65f253fdc60f6208a54911bee793d225f23cdf8James Dong else { 6024b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 6025b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 6026b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 6027b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 6028fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6029fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 6030b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->iEndofInputSent = 0; 6031fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBuffHead->nFilledLen != 0) { 6032b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingAVC) { 6033b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pUalgInpParams = pBufferPrivate->pUalgParam; 6034b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ((pBuffHead->nFlags & OMX_BUFFERFLAG_EOS) == 0) { 6035b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((H264VDEC_UALGInputParam *)pUalgInpParams)->lBuffCount = ++pComponentPrivate->frameCounter; 6036b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->H264BitStreamFormat) { 6037b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin H264VDEC_UALGInputParam *pParam; 6038b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef ANDROID 6039b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 nal_len, i; 6040b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U8 *pDataBuf; 6041b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 length_pos = 0; 6042b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 data_pos = 0; 6043b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 buf_len; 6044b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 6045b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin buf_len = pBuffHead->nFilledLen; 6046b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pDataBuf = pBuffHead->pBuffer; 6047b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pParam = (H264VDEC_UALGInputParam *)pUalgInpParams; 6048b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pParam->ulNumOfNALU = 0; 6049b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin while (pBuffHead->nFilledLen > length_pos+pComponentPrivate->H264BitStreamFormat) { 6050b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->H264BitStreamFormat == 1) 6051b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->bIsNALBigEndian) { 6052b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nal_len = (OMX_U32)pDataBuf[length_pos]; 6053b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 6054b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 6055b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nal_len = (OMX_U32)pDataBuf[length_pos]; 6056b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 6057b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (pComponentPrivate->H264BitStreamFormat == 2) 6058b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->bIsNALBigEndian) { 6059b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nal_len = (OMX_U32)pDataBuf[length_pos] << 8 | pDataBuf[length_pos+1]; 6060b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 6061b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 6062b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nal_len = (OMX_U32)pDataBuf[length_pos] << 0 | pDataBuf[length_pos+1] << 8 ; 6063b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 6064b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (pComponentPrivate->H264BitStreamFormat == 4){ 6065b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->bIsNALBigEndian) { 6066b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nal_len = (OMX_U32)pDataBuf[length_pos]<<24 | pDataBuf[length_pos+1] << 16 | pDataBuf[length_pos+2] << 8 | pDataBuf[length_pos+3]; 6067b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 6068b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 6069b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nal_len = (OMX_U32)pDataBuf[length_pos]<<0 | pDataBuf[length_pos+1] << 8 | pDataBuf[length_pos+2] << 16 | pDataBuf[length_pos+3]<<24; 6070b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 6071b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 6072b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 6073b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorBadParameter; 6074b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 6075b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 6076b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin length_pos += pComponentPrivate->H264BitStreamFormat; 6077b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (nal_len > buf_len - length_pos) { 6078b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorBadParameter; 6079b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 6080b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 6081b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* move the memory*/ 6082b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i<nal_len; i++) 6083b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pDataBuf[data_pos+i] = pDataBuf[length_pos+i]; 6084b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin data_pos += nal_len; 6085b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin length_pos += nal_len; 6086b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* save the size*/ 6087b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pParam->pNALUSizeArray[pParam->ulNumOfNALU++] = nal_len; 6088b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 6089b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* update with the new data size*/ 6090b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBuffHead->nFilledLen = data_pos; 6091b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else 6092b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pParam = (H264VDEC_UALGInputParam *)pUalgInpParams; 6093b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pParam->ulNumOfNALU = 0; 6094b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 6095b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBuffHead->nFlags >= OMX_BUFFERFLAG_CODECCONFIG) { 6096b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg,"nFlags = %x\n", pBuffHead->nFlags); 6097b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg,"copy previous codec config data to current ccd buffer\n"); 6098b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = VIDDEC_CopyBuffer(pComponentPrivate, pBuffHead); 6099b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 6100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg,"save current ccd buff - nFilledLen = %d\n", pBuffHead->nFilledLen); 6101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = VIDDEC_SaveBuffer(pComponentPrivate, pBuffHead); 6102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->aCCDsize[pComponentPrivate->nCCDcnt++] = pBuffHead->nFilledLen; 6103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 6104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg,"send ccd buffer back to client\n"); 6105b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufferPrivate = (VIDDEC_BUFFER_PRIVATE* )pBuffHead->pInputPortPrivate; 6106b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufferPrivate->eBufferOwner = VIDDEC_BUFFER_WITH_CLIENT; 610775654962d82cc9054c198ce88fc2db0c56b16232James Dong VIDDEC_EmptyBufferDone(pComponentPrivate, pBuffHead); 6108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 6109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 6110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 6111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin H264VDEC_UALGInputParam *pParam; 6112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 len = 0; /* offset+filledlen+padding */ 6113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 off = 0; /* offset */ 6114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 fl = 0; /* filledlen */ 6115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 rem = 0; /* modulus */ 6116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 pad = 0; /* padding */ 6117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 numnalu = 0; /* number of nal units */ 6118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 sp = 0; /* starting position of 4 byte nDataSize */ 6119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 nalusize[256] = {0}; /* array to store nal sizes */ 6120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 i = 0; 6121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 j = 0; 6122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 t1 = 0; 6123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 t2 = 0; 6124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 6125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* This is how pBuffer is arranged when 6126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * iOMXComponentUsesFullAVCFrames is set 6127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * to true 6128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 6129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 6130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* offset, 6131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * NALU1, NALU2, ... 6132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * padding, 6133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * nSize, 6134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * nVersion, 6135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * nPortIndex, 6136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * eType, 6137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * nDataSize, 6138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * NAL1Len, NAL2Len, ... 6139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 6140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 6141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pParam = (H264VDEC_UALGInputParam *)pUalgInpParams; 6142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pParam->ulNumOfNALU = 0; 6143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin off = pBuffHead->nOffset; 6144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin fl = pBuffHead->nFilledLen; 6145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin rem = (off + fl) % 4; 6146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (rem > 0) { 6147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pad = 4 - rem; 6148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 6149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 6150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin len = off + fl + pad; 6151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg,"nFlags = %x\n", pBuffHead->nFlags); 6152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg,"off=%d,fl=%d,rem=%d,pad=%d,len=%d\n", off, fl, rem, pad, len); 6153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 6154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* print the OMX_ExtraDataNALSizeArry marker */ 6155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg,"extradata marker -> 0x %x %x %x %x\n", 6156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBuffHead->pBuffer[len+15], 6157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBuffHead->pBuffer[len+14], 6158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBuffHead->pBuffer[len+13], 6159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBuffHead->pBuffer[len+12]); 6160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 6161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* store number of numnalu */ 6162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((OMX_U8*)(&numnalu))[3] = pBuffHead->pBuffer[len+19]; 6163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((OMX_U8*)(&numnalu))[2] = pBuffHead->pBuffer[len+18]; 6164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((OMX_U8*)(&numnalu))[1] = pBuffHead->pBuffer[len+17]; 6165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((OMX_U8*)(&numnalu))[0] = pBuffHead->pBuffer[len+16]; 6166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin numnalu /= 4; 6167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 6168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* print the numnalu */ 6169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg,"numnalu -> 0x %x %x %x %x\n", ((OMX_U8*)(&numnalu))[3] 6170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin , ((OMX_U8*)(&numnalu))[2] 6171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin , ((OMX_U8*)(&numnalu))[1] 6172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin , ((OMX_U8*)(&numnalu))[0]); 6173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 6174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* print the nDataSize */ 6175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg,"nDataSize -> 0x %x %x %x %x\n", pBuffHead->pBuffer[len+19] 6176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin , pBuffHead->pBuffer[len+18] 6177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin , pBuffHead->pBuffer[len+17] 6178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin , pBuffHead->pBuffer[len+16]); 6179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* print the first NALU len */ 6180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg,"first NALU len -> 0x %x %x %x %x\n", pBuffHead->pBuffer[len+23] 6181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin , pBuffHead->pBuffer[len+22] 6182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin , pBuffHead->pBuffer[len+21] 6183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin , pBuffHead->pBuffer[len+20]); 6184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pParam->ulNumOfNALU = 0; 6185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 6186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* starting position of nalu sizes */ 6187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sp = t1 = len+20; 6188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin t2 = i; 6189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 6190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg,"numnalu = %d", numnalu); 6191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 6192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin while (i<(t2+numnalu)) { 6193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin j=0; 6194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin while (sp<(t1+4)) { 6195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((OMX_U8*)(&nalusize[i]))[j] = pBuffHead->pBuffer[sp]; 6196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sp++; 6197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin j++; 6198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 6199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin t1 = sp; 6200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin i++; 6201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 6202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg,"confirm ulNumOfNALU = %d\n", i); 6203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 6204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->bCopiedCCDBuffer == OMX_FALSE){ 6205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bCopiedCCDBuffer = OMX_TRUE; 6206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg,"copy saved ccd buffer to data buffer\n"); 6207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = VIDDEC_CopyBuffer(pComponentPrivate, pBuffHead); 6208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 6209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin i=0; 6210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* tally number of ccd nalus and add sizes to nalu array */ 6211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin while (i < pComponentPrivate->nCCDcnt) { 6212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (i == 0) { 6213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pParam->pNALUSizeArray[i] = pComponentPrivate->aCCDsize[i]; 6214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 6216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pParam->pNALUSizeArray[i] = pComponentPrivate->aCCDsize[i] - 6217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->aCCDsize[i-1]; 6218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pParam->ulNumOfNALU++; 6220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg,"aCCDsize[%d] = %d\n", i, pParam->pNALUSizeArray[i]); 6221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin i++; 6222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 6223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 6224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* adjust the filled length to account for the ccd nalus */ 6225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBuffHead->nFilledLen = fl + pComponentPrivate->aCCDsize[i-1]; 6226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 6227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg,"new nFilledLen=%d; old fl=%d + aCCDsize=%d\n", pBuffHead->nFilledLen 6228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin , fl 6229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin , pComponentPrivate->aCCDsize[i-1]); 6230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin t1 = i; 6231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin j=0; 6232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 6233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* now, add the data nalu sizes to the array, 6234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * which already contain the ccd nalu sizes */ 6235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for(;i<t1+numnalu;i++) { 6236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pParam->pNALUSizeArray[i] = nalusize[j]; 6237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin j++; 6238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 6239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pParam->ulNumOfNALU = i+numnalu; 6240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 6241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for(j=0;j<i;j++) { 6242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg,"pParm->pNALUSizeArray[%d] = %d\n",j,pParam->pNALUSizeArray[j]); 6243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 6246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* add the data nalu sizes to the array. 6247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * we should not have any ccd sizes in here */ 6248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for(j=0;j<i;j++) { 6249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pParam->pNALUSizeArray[j] = nalusize[j]; 6250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg,"pParm->pNALUSizeArray[%d] = %d\n",j,pParam->pNALUSizeArray[j]); 6251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 6252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pParam->ulNumOfNALU = i; 6253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 6254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin }/* end else */ 6255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 6256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin }/* end bitstrm fmt */ 6257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin }/* end nFlags & EOS */ 6258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin size_dsp = sizeof(H264VDEC_UALGInputParam); 6259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin }/* end if AVC */ 6260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingWMV) { 6261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pUalgInpParams = pBufferPrivate->pUalgParam; 6262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ((pBuffHead->nFlags & OMX_BUFFERFLAG_EOS) == 0) { 6263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((WMV9DEC_UALGInputParam*)pUalgInpParams)->lBuffCount = ++pComponentPrivate->frameCounter; 6264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 6265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin size_dsp = sizeof(WMV9DEC_UALGInputParam); 6266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 6267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG4 || 6268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingH263) { 6269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pUalgInpParams = pBufferPrivate->pUalgParam; 6270b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ((MP4VD_GPP_SN_UALGInputParams*)pUalgInpParams)->uRingIOBlocksize = 0; 6271b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ((MP4VD_GPP_SN_UALGInputParams*)pUalgInpParams)->nPerformMode = 2; 6272b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 6273b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if ((pBuffHead->nFlags & OMX_BUFFERFLAG_EOS) == 0) { 6274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((MP4VD_GPP_SN_UALGInputParams*)pUalgInpParams)->nBuffCount = ++pComponentPrivate->frameCounter; 6275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 6276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin size_dsp = sizeof(MP4VD_GPP_SN_UALGInputParams); 6277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 6278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG2) { 6279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pUalgInpParams = pBufferPrivate->pUalgParam; 6280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ((pBuffHead->nFlags & OMX_BUFFERFLAG_EOS) == 0) { 6281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((MP2VDEC_UALGInputParam*)pUalgInpParams)->lBuffCount = ++pComponentPrivate->frameCounter; 6282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 6283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin size_dsp = sizeof(MP2VDEC_UALGInputParam); 6284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 6285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_SPARK_CODE 6286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (VIDDEC_SPARKCHECK) { 6287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pUalgInpParams = pBufferPrivate->pUalgParam; 6288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ((pBuffHead->nFlags & OMX_BUFFERFLAG_EOS) == 0) { 6289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((SPARKVD_GPP_SN_UALGInputParams*)pUalgInpParams)->lBuffCount = ++pComponentPrivate->frameCounter; 6290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 6291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((SPARKVD_GPP_SN_UALGInputParams*)pUalgInpParams)->nIsSparkInput = 1; 6292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin size_dsp = sizeof(SPARKVD_GPP_SN_UALGInputParams); 6293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 6294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 6295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 6296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorUnsupportedSetting; 6297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER4(pComponentPrivate->dbg, "VIDDEC_HandleDataBuf_FromApp 0x%x\n", eError); 6298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 6299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 6300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Store time stamp information */ 6301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->ProcessMode == 0) { 6302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8 ucIndex = 0; 6303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PTR pBufferFlags = NULL; 63046b13c05d9a88b7aede72519187315b0f6d53f669James Dong if ((pBuffHead->nFlags & OMX_BUFFERFLAG_CODECCONFIG) == 0 ) { //tag if not equal to OMX_BUFFERFLAG_CODECCONFIG 63056b13c05d9a88b7aede72519187315b0f6d53f669James Dong ucIndex = VIDDEC_CircBuf_GetHead(pComponentPrivate, 6306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_CBUFFER_TIMESTAMP, 6307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_INPUT_PORT); 63086b13c05d9a88b7aede72519187315b0f6d53f669James Dong pComponentPrivate->aBufferFlags[ucIndex].nTimeStamp = pBuffHead->nTimeStamp; 63096b13c05d9a88b7aede72519187315b0f6d53f669James Dong pBuffHead->nFlags &= ~OMX_BUFFERFLAG_EOS; 63106b13c05d9a88b7aede72519187315b0f6d53f669James Dong pComponentPrivate->aBufferFlags[ucIndex].nFlags = pBuffHead->nFlags; 63116b13c05d9a88b7aede72519187315b0f6d53f669James Dong pComponentPrivate->aBufferFlags[ucIndex].nTickCount = pBuffHead->nTickCount; 63126b13c05d9a88b7aede72519187315b0f6d53f669James Dong pBufferFlags = &pComponentPrivate->aBufferFlags[ucIndex]; 63136b13c05d9a88b7aede72519187315b0f6d53f669James Dong VIDDEC_CircBuf_Add(pComponentPrivate, 6314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_CBUFFER_TIMESTAMP, 6315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_INPUT_PORT, 6316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferFlags); 63176b13c05d9a88b7aede72519187315b0f6d53f669James Dong } 6318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 6320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->arrBufIndex[pComponentPrivate->nInBufIndex] = pBuffHead->nTimeStamp; 6321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nInBufIndex++; 6322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nInBufIndex %= VIDDEC_MAX_QUEUE_SIZE; 6323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "pBuffHead->nTimeStamp %lld\n", pBuffHead->nTimeStamp); 6325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "pBuffHead->nOffset %lu\n", pBuffHead->nOffset); 6326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #ifdef __PERF_INSTRUMENTATION__ 6327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 6328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pBuffer, 6329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen, 6330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleCommonLayer); 6331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #endif 6332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eLCMLState != VidDec_LCML_State_Unload && 6333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState != VidDec_LCML_State_Destroy && 6334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML != NULL){ 6335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferPrivate->eBufferOwner = VIDDEC_BUFFER_WITH_DSP; 6336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "pBuffHead->nFilledLen %lu\n", pBuffHead->nFilledLen); 6337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "Sending Filled eBufferOwner 0x%x f%x\n", pBufferPrivate->eBufferOwner, pComponentPrivate->frameCounter); 6338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 6341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 6342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pBuffer, 6343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen, 6344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleHLMM); 6345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 6346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->bDynamicConfigurationInProgress){ 6348b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufferPrivate = (VIDDEC_BUFFER_PRIVATE* )pBuffHead->pInputPortPrivate; 6349b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufferPrivate->eBufferOwner = VIDDEC_BUFFER_WITH_CLIENT; 6350b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER1(pComponentPrivate->dbg, "eBufferOwner 0x%x\n", pBufferPrivate->eBufferOwner); 6351b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 6352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Sending buffer back to client pBuffer=%p\n", pBuffHead->pBuffer); 635375654962d82cc9054c198ce88fc2db0c56b16232James Dong VIDDEC_EmptyBufferDone(pComponentPrivate, pBuffHead); 6354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 6355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef ANDROID 6357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eFirstBuffer.bSaveFirstBuffer == OMX_TRUE){ 6359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingWMV && 6360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nWMVFileType == VIDDEC_WMV_RCVSTREAM){ 6361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((WMV9DEC_UALGInputParam*)pComponentPrivate->pUalgParams)->lBuffCount = ++pComponentPrivate->frameCounter; 6362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_QueueBuffer(((LCML_DSP_INTERFACE*) 6363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle)->pCodecinterfacehandle, 6364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecInputBufferMapBufLen, 6365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_U8*)&pComponentPrivate->pBufferRCV.pBuffer, 6366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sizeof(VIDDEC_WMV_RCV_struct), 6367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sizeof(VIDDEC_WMV_RCV_struct), 6368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U8 *)pUalgInpParams, 6369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sizeof(WMV9DEC_UALGInputParam), 6370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_U8*)&pComponentPrivate->pBufferTemp); 6371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 6373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = VIDDEC_CopyBuffer(pComponentPrivate, pBuffHead); 6374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 6375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "VIDDEC_HandleDataBuf_FromApp: VIDDEC_CopyBuffer()= 0x%x\n", eError); 6376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError == OMX_ErrorInsufficientResources) { 6377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 6378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 6383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 6384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "LCML_QueueBuffer(INPUT), nFilledLen=0x%x nFlags=0x%x", pBuffHead->nFilledLen, pBuffHead->nFlags); 6385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferPrivate->eBufferOwner = VIDDEC_BUFFER_WITH_DSP; 6386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_QueueBuffer(((LCML_DSP_INTERFACE*) 6387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle)->pCodecinterfacehandle, 6388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingWMV) ? EMMCodecInputBufferMapBufLen : EMMCodecInputBuffer), /*Only WMV need to send map buffers */ 6389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin &pBuffHead->pBuffer[pBuffHead->nOffset],/*WMV_VC1_CHANGES*/ 6390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nAllocLen, 6391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen, 6392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_U8 *)pUalgInpParams, 6393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin size_dsp, 6394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_U8 *)pBuffHead); 6395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone){ 6396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "LCML_QueueBuffer 2 (0x%x)\n",eError); 6397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 6398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 6399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 6402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 6403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 6404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 6407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen = 0; 6408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferPrivate->eBufferOwner = VIDDEC_BUFFER_WITH_COMPONENT; 6409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "eBufferOwner 0x%x\n", pBufferPrivate->eBufferOwner); 6410b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = IncrementCount (&(pComponentPrivate->nCountInputBFromDsp), &(pComponentPrivate->mutexInputBFromDSP)); 6411b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (eError != OMX_ErrorNone) { 6412b65f253fdc60f6208a54911bee793d225f23cdf8James Dong return eError; 6413b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 6414fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ret = write(pComponentPrivate->free_inpBuf_Q[1], &pBuffHead, sizeof(pBuffHead)); 6415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(ret == -1){ 6416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM4(pComponentPrivate->dbg, "writing to the input pipe %x (%d)\n", OMX_ErrorInsufficientResources,ret); 6417a7d8550490e7973b12ab6aed936182ce30f882a1James Dong pBufferPrivate->eBufferOwner = VIDDEC_BUFFER_WITH_DSP; 6418a7d8550490e7973b12ab6aed936182ce30f882a1James Dong DecrementCount (&(pComponentPrivate->nCountInputBFromDsp), &(pComponentPrivate->mutexInputBFromDSP)); 6419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 6420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 6421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 6422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorInsufficientResources, 6423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 6424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Error writing to the output pipe"); 6425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 6429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "---EXITING(0x%x)\n",eError); 6430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 6431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 6432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 6434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 6435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Handle Data Buff function from DSP 6436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 6437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 6438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_HandleDataBuf_FromDsp(VIDDEC_COMPONENT_PRIVATE *pComponentPrivate) 6440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 6441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 6442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eExtendedError = OMX_ErrorNone; 6443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE* pBuffHead; 6444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_BUFFER_PRIVATE* pBufferPrivate = NULL; 6445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int ret; 6446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "+++ENTERING\n"); 6448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "pComponentPrivate 0x%p\n", (int*)pComponentPrivate); 6449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ret = read(pComponentPrivate->filled_outBuf_Q[0], &pBuffHead, sizeof(pBuffHead)); 6450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (ret == -1) { 6451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Error while reading from dsp out pipe\n"); 6452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 6453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 6454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6455b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = DecrementCount (&(pComponentPrivate->nCountOutputBFromDsp), &(pComponentPrivate->mutexOutputBFromDSP)); 6456b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (eError != OMX_ErrorNone) { 6457b65f253fdc60f6208a54911bee793d225f23cdf8James Dong return eError; 6458b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 6459b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER1(pComponentPrivate->dbg, "BufferSize fromDSP %lu \n",pBuffHead->nAllocLen); 6460b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER1(pComponentPrivate->dbg, "AllocLen: 0x%x, FilledLen: 0x%x\n", pBuffHead->nAllocLen, pBuffHead->nFilledLen); 6461b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRSTATE1(pComponentPrivate->dbg, "pBuffHead 0x%p eExecuteToIdle 0x%x\n", pBuffHead,pComponentPrivate->eExecuteToIdle); 6462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->eState == OMX_StateLoaded || pComponentPrivate->eState == OMX_StateIdle) { 6463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 6464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 6465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "BufferSize fromDSP %lu \n",pBuffHead->nAllocLen); 6467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "AllocLen: 0x%x, FilledLen: 0x%x\n", pBuffHead->nAllocLen, pBuffHead->nFilledLen); 6468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE1(pComponentPrivate->dbg, "pBuffHead 0x%p eExecuteToIdle 0x%x\n", pBuffHead,pComponentPrivate->eExecuteToIdle); 6469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBuffHead != NULL) { 6470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_S32 nErrorCode = 0; 6471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_S32 nInternalErrorCode = 0; 6472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 ulDisplayID = 0; 6473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferPrivate = (VIDDEC_BUFFER_PRIVATE* )pBuffHead->pOutputPortPrivate; 6474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags &= ~(OMX_BUFFERFLAG_SYNCFRAME); 6475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags &= ~(VIDDEC_BUFFERFLAG_FRAMETYPE_MASK); 6476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags &= ~(VIDDEC_BUFFERFLAG_EXTENDERROR_MASK); 6477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingAVC) { 6479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin H264VDEC_UALGOutputParam* pUalgOutParams = NULL; 6480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pUalgOutParams = (H264VDEC_UALGOutputParam *)pBufferPrivate->pUalgParam; 6481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nErrorCode = (pUalgOutParams->iErrorCode); 6482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ulDisplayID = pUalgOutParams->ulDisplayID; 6483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pUalgOutParams->ulDecodedFrameType == VIDDEC_I_FRAME) { 6484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= OMX_BUFFERFLAG_SYNCFRAME; 6485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= VIDDEC_BUFFERFLAG_FRAMETYPE_I_FRAME; 6486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(pUalgOutParams->ulDecodedFrameType == VIDDEC_P_FRAME){ 6488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= VIDDEC_BUFFERFLAG_FRAMETYPE_P_FRAME; 6489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(pUalgOutParams->ulDecodedFrameType == VIDDEC_B_FRAME){ 6491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= VIDDEC_BUFFERFLAG_FRAMETYPE_B_FRAME; 6492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 6494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= VIDDEC_BUFFERFLAG_FRAMETYPE_IDR_FRAME; 6495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*VIDDEC_ISFLAGSET*/ 6497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingWMV) { 6499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WMV9DEC_UALGOutputParam* pUalgOutParams = NULL; 6500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pUalgOutParams = (WMV9DEC_UALGOutputParam *)pBufferPrivate->pUalgParam; 6501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nErrorCode = (pUalgOutParams->iErrorCode); 6502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ulDisplayID = pUalgOutParams->ulDisplayID; 6503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pUalgOutParams->ulDecodedFrameType == VIDDEC_I_FRAME) { 6504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= OMX_BUFFERFLAG_SYNCFRAME; 6505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= VIDDEC_BUFFERFLAG_FRAMETYPE_I_FRAME; 6506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(pUalgOutParams->ulDecodedFrameType == VIDDEC_P_FRAME){ 6508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= VIDDEC_BUFFERFLAG_FRAMETYPE_P_FRAME; 6509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(pUalgOutParams->ulDecodedFrameType == VIDDEC_B_FRAME){ 6511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= VIDDEC_BUFFERFLAG_FRAMETYPE_B_FRAME; 6512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 6514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= VIDDEC_BUFFERFLAG_FRAMETYPE_IDR_FRAME; 6515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG4 || 6518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingH263) { 6519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin MP4VD_GPP_SN_UALGOutputParams* pUalgOutParams = NULL; 6520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pUalgOutParams = (MP4VD_GPP_SN_UALGOutputParams *)pBufferPrivate->pUalgParam; 6521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nErrorCode = (pUalgOutParams->iErrorCode); 6522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ulDisplayID = pUalgOutParams->ulDisplayID; 6523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pUalgOutParams->ulDecodedFrameType == VIDDEC_I_FRAME) { 6524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= OMX_BUFFERFLAG_SYNCFRAME; 6525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= VIDDEC_BUFFERFLAG_FRAMETYPE_I_FRAME; 6526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(pUalgOutParams->ulDecodedFrameType == VIDDEC_P_FRAME){ 6528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= VIDDEC_BUFFERFLAG_FRAMETYPE_P_FRAME; 6529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(pUalgOutParams->ulDecodedFrameType == VIDDEC_B_FRAME){ 6531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= VIDDEC_BUFFERFLAG_FRAMETYPE_B_FRAME; 6532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 6534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= VIDDEC_BUFFERFLAG_FRAMETYPE_IDR_FRAME; 6535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG2) { 6538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin MP2VDEC_UALGOutputParam* pUalgOutParams = NULL; 6539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pUalgOutParams = (MP2VDEC_UALGOutputParam *)pBufferPrivate->pUalgParam; 6540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nErrorCode = (pUalgOutParams->lErrorCode); 6541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ulDisplayID = pUalgOutParams->ulDisplayID; 6542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pUalgOutParams->ulDecodedFrameType == VIDDEC_I_FRAME) { 6543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= OMX_BUFFERFLAG_SYNCFRAME; 6544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= VIDDEC_BUFFERFLAG_FRAMETYPE_I_FRAME; 6545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(pUalgOutParams->ulDecodedFrameType == VIDDEC_P_FRAME){ 6547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= VIDDEC_BUFFERFLAG_FRAMETYPE_P_FRAME; 6548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(pUalgOutParams->ulDecodedFrameType == VIDDEC_B_FRAME){ 6550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= VIDDEC_BUFFERFLAG_FRAMETYPE_B_FRAME; 6551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 6553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= VIDDEC_BUFFERFLAG_FRAMETYPE_IDR_FRAME; 6554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_SPARK_CODE 6557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (VIDDEC_SPARKCHECK) { 6558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin SPARKVD_GPP_SN_UALGOutputParams* pUalgOutParams = NULL; 6559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pUalgOutParams = (SPARKVD_GPP_SN_UALGOutputParams *)pBufferPrivate->pUalgParam; 6560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nErrorCode = (pUalgOutParams->iErrorCode); 6561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ulDisplayID = pUalgOutParams->ulDisplayID; 6562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pUalgOutParams->ulDecodedFrameType == VIDDEC_I_FRAME) { 6563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= OMX_BUFFERFLAG_SYNCFRAME; 6564fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= VIDDEC_BUFFERFLAG_FRAMETYPE_I_FRAME; 6565fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(pUalgOutParams->ulDecodedFrameType == VIDDEC_P_FRAME){ 6567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= VIDDEC_BUFFERFLAG_FRAMETYPE_P_FRAME; 6568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(pUalgOutParams->ulDecodedFrameType == VIDDEC_B_FRAME){ 6570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= VIDDEC_BUFFERFLAG_FRAMETYPE_B_FRAME; 6571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 6573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= VIDDEC_BUFFERFLAG_FRAMETYPE_IDR_FRAME; 6574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 6577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 6578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUnsupportedSetting; 6579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 6580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= (nErrorCode<<12); 6582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*OMX_ERROR4(pComponentPrivate->dbg, "nErrorCode %x nFlags %x\n", (int *)nErrorCode, (int *)pBuffHead->nFlags);*/ 6583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((nErrorCode & 0xff) != 0){/*OMX_BUFFERFLAG_DATACORRUPT*/ 6584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nInternalErrorCode = ((nErrorCode & VIDDEC_BUFFERFLAG_EXTENDERROR_DIRTY)>>12); 6585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(VIDDEC_ISFLAGSET(nErrorCode,VIDDEC_XDM_FATALERROR)){ 6586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eExtendedError = OMX_ErrorStreamCorrupt; 6587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= OMX_BUFFERFLAG_DATACORRUPT; 6588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen = 0; 6589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Not Recoverable Error Detected in Buffer in buffer %p %lu(int# %lx/%lu) OMX_ErrorStreamCorrupt\n", 6590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead, ulDisplayID, (nErrorCode & VIDDEC_BUFFERFLAG_EXTENDERROR_DIRTY), pBuffHead->nFilledLen); 6591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6592fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(VIDDEC_ISFLAGSET(nErrorCode,VIDDEC_XDM_APPLIEDCONCEALMENT)){ 6593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= OMX_BUFFERFLAG_DATACORRUPT; 6594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Applied Concealment in buffer %p %lu(int# %lx/%lu)\n", 6595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead, ulDisplayID, nInternalErrorCode, pBuffHead->nFilledLen); 6596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(VIDDEC_ISFLAGSET(nErrorCode,VIDDEC_XDM_INSUFFICIENTDATA)){ 6598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= OMX_BUFFERFLAG_DATACORRUPT; 6599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen = 0; 6600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Insufficient Data in buffer %p %lu(int# %lx/%lu)\n", 6601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead, ulDisplayID, nInternalErrorCode, pBuffHead->nFilledLen); 6602fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(VIDDEC_ISFLAGSET(nErrorCode,VIDDEC_XDM_CORRUPTEDDATA)){ 6604fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= OMX_BUFFERFLAG_DATACORRUPT; 6605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen = 0; 6606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Corrupted Data in buffer %p %lu(int# %lx/%lu)\n", 6607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead, ulDisplayID, nInternalErrorCode, pBuffHead->nFilledLen); 6608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(VIDDEC_ISFLAGSET(nErrorCode,VIDDEC_XDM_CORRUPTEDHEADER)){ 6610fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= OMX_BUFFERFLAG_DATACORRUPT; 6611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen = 0; 6612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Corrupted Header in buffer %p %lu(int# %lx/%lu)\n", 6613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead, ulDisplayID, nInternalErrorCode, pBuffHead->nFilledLen); 6614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(VIDDEC_ISFLAGSET(nErrorCode,VIDDEC_XDM_UNSUPPORTEDINPUT)){ 6616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= OMX_BUFFERFLAG_DATACORRUPT; 6617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen = 0; 6618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Unsupported Input in buffer %p %lu(int# %lx/%lu)\n", 6619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead, ulDisplayID, nInternalErrorCode, pBuffHead->nFilledLen); 6620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(VIDDEC_ISFLAGSET(nErrorCode,VIDDEC_XDM_UNSUPPORTEDPARAM)){ 6622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= OMX_BUFFERFLAG_DATACORRUPT; 6623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen = 0; 6624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Unsupported Parameter in buffer %p %lu(int# %lx/%lu)\n", 6625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead, ulDisplayID, nInternalErrorCode, pBuffHead->nFilledLen); 6626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef KHRONOS_1_1 6629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->eMBErrorReport.bEnabled) {/* && pBuffHead->nFilledLen != 0*/ 6630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8* ErrMapFrom = NULL; 6631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8* ErrMapTo = NULL; 6632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*OMX_U32 nlooping = 0;*/ 6633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nErrMapSize = 0; 6634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->MPEG4Codec_IsTI && 6635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG4 || 6636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingH263)) { 6637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin MP4VD_GPP_SN_UALGOutputParams* pUalgOutParams = NULL; 6638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pUalgOutParams = (MP4VD_GPP_SN_UALGOutputParams *)pBufferPrivate->pUalgParam; 6639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ErrMapFrom = pUalgOutParams->usMbErrorBuf; 6640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*todo add code to use ualg_array*/ 6641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nErrMapSize = pComponentPrivate->pOutPortDef->format.video.nFrameWidth * 6642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.nFrameHeight / 256; 6643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ErrMapTo = pComponentPrivate->eMBErrorMapType[pComponentPrivate->cMBErrorIndexIn].ErrMap; 6644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eMBErrorMapType[pComponentPrivate->cMBErrorIndexIn].nErrMapSize = nErrMapSize; 6645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(ErrMapTo, ErrMapFrom, nErrMapSize); 6646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cMBErrorIndexIn++; 6647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cMBErrorIndexIn %= pComponentPrivate->pOutPortDef->nBufferCountActual; 6648fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingAVC) { 6650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin H264VDEC_UALGOutputParam* pUalgOutParams = NULL; 6651fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pUalgOutParams = (H264VDEC_UALGOutputParam *)pBufferPrivate->pUalgParam; 6652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ErrMapFrom = pUalgOutParams->pMBErrStatOutBuf; 6653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*todo add code to use ualg_array*/ 6654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nErrMapSize = pComponentPrivate->pOutPortDef->format.video.nFrameWidth * 6655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.nFrameHeight / 256; 6656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ErrMapTo = pComponentPrivate->eMBErrorMapType[pComponentPrivate->cMBErrorIndexIn].ErrMap; 6657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eMBErrorMapType[pComponentPrivate->cMBErrorIndexIn].nErrMapSize = nErrMapSize; 6658fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(ErrMapTo, ErrMapFrom, nErrMapSize); 6659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cMBErrorIndexIn++; 6660fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cMBErrorIndexIn %= pComponentPrivate->pOutPortDef->nBufferCountActual; 6661fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 6664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pCompPort[1]->hTunnelComponent != NULL) { 6665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->bFirstBuffer) { 6666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "**** Setting OMX_BUFFERFLAG_STARTTIME\n"); 6667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= OMX_BUFFERFLAG_STARTTIME; 6668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFirstBuffer = 0; 6669fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6670fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 6671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags &= ~(OMX_BUFFERFLAG_STARTTIME); 6672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6673fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBuffHead != NULL){ 6674fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((pBuffHead->nFlags & OMX_BUFFERFLAG_DECODEONLY) == 0) { 6675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferPrivate->eBufferOwner = VIDDEC_BUFFER_WITH_TUNNELEDCOMP; 6676fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "tunnel eBufferOwner 0x%x\n", pBufferPrivate->eBufferOwner); 6677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #ifdef __PERF_INSTRUMENTATION__ 6678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 6679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pBuffer, 6680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen, 6681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleLLMM); 6682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #endif 6683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "VIDDEC_HandleDataBuf_FromDsp %x %x\n",(int)pBuffHead->nFlags,(int)pBuffHead->nFilledLen); 6684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_Propagate_Mark(pComponentPrivate, pBuffHead); 6685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_EmptyThisBuffer(pComponentPrivate->pCompPort[1]->hTunnelComponent, pBuffHead); 6686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6687fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 6688b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ret = write(pComponentPrivate->free_outBuf_Q[1],&pBuffHead,sizeof(pBuffHead)); 6689b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (ret == -1) { 6690b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP4(pComponentPrivate->dbg, "Error while writing to out pipe to client\n"); 6691b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = OMX_ErrorHardware; 6692b65f253fdc60f6208a54911bee793d225f23cdf8James Dong return eError; 6693b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 6694b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = IncrementCount (&(pComponentPrivate->nCountOutputBFromApp), &(pComponentPrivate->mutexOutputBFromApp)); 6695b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (eError != OMX_ErrorNone) { 6696b65f253fdc60f6208a54911bee793d225f23cdf8James Dong return eError; 6697b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 6698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 6702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBuffHead != NULL) { 6703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #ifdef __PERF_INSTRUMENTATION__ 6704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 6705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pBuffer, 6706fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen, 6707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleHLMM); 6708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #endif 6709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_Propagate_Mark(pComponentPrivate, pBuffHead); 6711b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufferPrivate->eBufferOwner = VIDDEC_BUFFER_WITH_CLIENT; 6712b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER1(pComponentPrivate->dbg, "standalone buffer eBufferOwner 0x%x -- %lx\n", pBufferPrivate->eBufferOwner,pBuffHead->nFlags); 6713b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if((pBuffHead->nFlags & OMX_BUFFERFLAG_EOS)){ 6714b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 6715b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pHandle->pApplicationPrivate, 6716b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_EventBufferFlag, 6717b65f253fdc60f6208a54911bee793d225f23cdf8James Dong VIDDEC_OUTPUT_PORT, 6718b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_BUFFERFLAG_EOS, 6719b65f253fdc60f6208a54911bee793d225f23cdf8James Dong NULL); 6720b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 672175654962d82cc9054c198ce88fc2db0c56b16232James Dong VIDDEC_FillBufferDone(pComponentPrivate, pBuffHead); 6722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 6727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eExtendedError != OMX_ErrorNone) { 6728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = eExtendedError; 6729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "---EXITING(0x%x)\n",eError); 6731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 6732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 6733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 6735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 6736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Handle Free Data Buff 6737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 6738fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 6739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_HandleFreeDataBuf( VIDDEC_COMPONENT_PRIVATE *pComponentPrivate ) 6741fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 6742fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 6743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE* pBuffHead; 6744fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_BUFFER_PRIVATE* pBufferPrivate = NULL; 6745fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int ret; 6746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int inputbufsize = (int)pComponentPrivate->pInPortDef->nBufferSize; 6747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "+++ENTERING\n"); 6749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "pComponentPrivate 0x%p\n", (int*)pComponentPrivate); 6750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ret = read(pComponentPrivate->free_inpBuf_Q[0], &pBuffHead, sizeof(pBuffHead)); 6751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (ret == -1) { 6752fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM4(pComponentPrivate->dbg, "Error while reading from the free Q\n"); 6753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 6754fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 6755fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 675681080e8c6e5fbb1d3bb01d707d832a2f348c7268James Dong eError = DecrementCount (&(pComponentPrivate->nCountInputBFromDsp), &(pComponentPrivate->mutexInputBFromDSP)); 6757b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (eError != OMX_ErrorNone) { 6758b65f253fdc60f6208a54911bee793d225f23cdf8James Dong return eError; 6759b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 6760b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRSTATE1(pComponentPrivate->dbg, "pBuffHead 0x%p eExecuteToIdle 0x%x\n", pBuffHead,pComponentPrivate->eExecuteToIdle); 6761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->eState == OMX_StateLoaded || pComponentPrivate->eState == OMX_StateIdle) { 6762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 6763fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 6764fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6765fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE1(pComponentPrivate->dbg, "pBuffHead 0x%p eExecuteToIdle 0x%x\n", pBuffHead,pComponentPrivate->eExecuteToIdle); 6766fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffHead != NULL) { 6767b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufferPrivate = (VIDDEC_BUFFER_PRIVATE* )pBuffHead->pInputPortPrivate; 6768fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nAllocLen = inputbufsize; 6769b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufferPrivate->eBufferOwner = VIDDEC_BUFFER_WITH_CLIENT; 6770b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER1(pComponentPrivate->dbg, "eBufferOwner 0x%x\n", pBufferPrivate->eBufferOwner); 6771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 6772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 6773fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pBuffer, 6774fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen, 6775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleHLMM); 6776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 6777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 677875654962d82cc9054c198ce88fc2db0c56b16232James Dong VIDDEC_EmptyBufferDone(pComponentPrivate, pBuffHead); 6779fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "---EXITING(0x%x) \n",eError); 6781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 6782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 6783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 6784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 6786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 6787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Function to fill DSP structures via LCML 6788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 6789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 6790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 6791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 6792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 6793fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 6794fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 6795fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_InitDSP_WMVDec(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate) 6796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 6797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 6798fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE *pLcmlHandle = NULL; 6799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP *lcml_dsp = NULL; 6800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nInpBuff = MAX_PRIVATE_IN_BUFFERS; 6801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nInpBuffSize = 0; 6802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nOutBuff = MAX_PRIVATE_OUT_BUFFERS; 6803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nOutBuffSize = 0; 6804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WMV9DEC_SNCreatePhArg* pCreatePhaseArgs = NULL; 6805fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_CALLBACKTYPE cb; 6806fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "+++ENTERING\n"); 6808fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nInpBuff = pComponentPrivate->pInPortDef->nBufferCountActual; 6809fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nOutBuff = pComponentPrivate->pOutPortDef->nBufferCountActual; 6810fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6811fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Back it up for further use in this function */ 6812fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nInpBuffSize = pComponentPrivate->pInPortDef->nBufferSize; 6813fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nOutBuffSize = pComponentPrivate->pOutPortDef->nBufferSize; 6814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6815fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE *)pComponentPrivate->pLCML; 6816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp = (((LCML_DSP_INTERFACE*)pLcmlHandle)->dspCodec); 6817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6818fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->DeviceInfo.TypeofDevice = 0; 6819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->DeviceInfo.DspStream = NULL; 6820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->In_BufInfo.nBuffers = nInpBuff; 6822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->In_BufInfo.nSize = nInpBuffSize; 6823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->In_BufInfo.DataTrMethod = DMM_METHOD; 6824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Out_BufInfo.nBuffers = nOutBuff; 6826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Out_BufInfo.nSize = nOutBuffSize; 6827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Out_BufInfo.DataTrMethod = DMM_METHOD; 6828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.nNumOfDLLs = OMX_WMVDEC_NUM_DLLS; 6830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[0].uuid = (struct DSP_UUID *)&WMVDSOCKET_TI_UUID; 6831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy ((char*)(lcml_dsp->NodeInfo.AllUUIDs[0].DllName),(char*)WMV_DEC_NODE_DLL); 6832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[0].eDllType = DLL_NODEOBJECT; 6833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[1].uuid = (struct DSP_UUID *)&WMVDSOCKET_TI_UUID; 6835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy ((char*)lcml_dsp->NodeInfo.AllUUIDs[1].DllName,(char*)WMV_DEC_NODE_DLL); 6836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[1].eDllType = DLL_DEPENDENT; 6837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6838fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[2].uuid = (struct DSP_UUID *)&USN_UUID; 6839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy ((char*)lcml_dsp->NodeInfo.AllUUIDs[2].DllName,(char*)USN_DLL); 6840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[2].eDllType = DLL_DEPENDENT; 6841fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[3].uuid = (struct DSP_UUID *)&RINGIO_TI_UUID; 6843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy ((char*)lcml_dsp->NodeInfo.AllUUIDs[3].DllName,(char*)RINGIO_NODE_DLL); 6844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[3].eDllType = DLL_DEPENDENT; 6845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6846b65f253fdc60f6208a54911bee793d225f23cdf8James Dong lcml_dsp->NodeInfo.AllUUIDs[4].uuid = (struct DSP_UUID *)&CONVERSIONS_UUID; 6847b65f253fdc60f6208a54911bee793d225f23cdf8James Dong strcpy ((char*)lcml_dsp->NodeInfo.AllUUIDs[4].DllName,(char*)CONVERSIONS_DLL); 6848b65f253fdc60f6208a54911bee793d225f23cdf8James Dong lcml_dsp->NodeInfo.AllUUIDs[4].eDllType = DLL_DEPENDENT; 6849b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 6850b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 6851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->SegID = 0; 6852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Timeout = -1; 6853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Alignment = 0; 6854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Priority = 5; 6855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6856fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->ProcessMode == 0){ 6857fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->wmvProfile == VIDDEC_WMV_PROFILEMAX) 6858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 6859b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth > 640) || 6860b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight > 480)) { 6861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 4; 6862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6863b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth <= 640) && 6864b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth > 352)) || 6865b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight <= 480) && 6866b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight > 288))) { 6867fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 2; 6868fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6869b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth <= 352) && 6870b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth > 176)) || 6871b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight <= 288) && 6872b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight > 144))) { 6873fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 1; 6874fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6875b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth <= 176) && 6876b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth >= 16)) || 6877b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight <= 144) && 6878b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight >= 16))) { 6879fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 0; 6880fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6881fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 6882fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUnsupportedSetting; 6883fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 6884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6885fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6886fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 6887fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 6888fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin switch(pComponentPrivate->wmvProfile) 6889fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 6890fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case VIDDEC_WMV_PROFILE0: 6891fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = VIDDEC_WMV_PROFILE_ID0; 6892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 6893fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case VIDDEC_WMV_PROFILE1: 6894fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = VIDDEC_WMV_PROFILE_ID1; 6895fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 6896fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case VIDDEC_WMV_PROFILE2: 6897fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = VIDDEC_WMV_PROFILE_ID2; 6898fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 6899fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin default: 6900fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 6901fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 6902fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 6903fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6904fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6905fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6906fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } else if(pComponentPrivate->ProcessMode == 1) 6907fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 6908fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin switch(pComponentPrivate->wmvProfile) 6909fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 6910fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case VIDDEC_WMV_PROFILE3: 6911fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = VIDDEC_WMV_PROFILE_ID3; 6912fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 6913fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case VIDDEC_WMV_PROFILE4: 6914fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = VIDDEC_WMV_PROFILE_ID4; 6915fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 6916fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case VIDDEC_WMV_PROFILE5: 6917fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = VIDDEC_WMV_PROFILE_ID5; 6918fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 6919fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case VIDDEC_WMV_PROFILE6: 6920fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = VIDDEC_WMV_PROFILE_ID6; 6921fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 6922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case VIDDEC_WMV_PROFILE7: 6923fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = VIDDEC_WMV_PROFILE_ID7; 6924fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 6925fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case VIDDEC_WMV_PROFILE8: 6926fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = VIDDEC_WMV_PROFILE_ID8; 6927fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 6928fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case VIDDEC_WMV_PROFILEMAX: 6929fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = VIDDEC_WMV_PROFILE_ID8; 6930fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 6931fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin default: 6932fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 6933fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 6934fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6935fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6936fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 6937fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 6938fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUnsupportedSetting; 6939fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 6940fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6941fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6942fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_MALLOC_STRUCT(pCreatePhaseArgs, WMV9DEC_SNCreatePhArg,pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel4]); 6943fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pCreatePhaseArgs == NULL) { 6944fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 6945fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 6946fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6947fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unNumOfStreams = 2; 6948fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unInputStreamID = 0; 6949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unInputBufferType = 0; 6950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unInputNumBufsPerStream = (OMX_U16)nInpBuff; 6951fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unOutputStreamID = 1; 6952fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unOutputBufferType = 0; 6953fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unOutputNumBufsPerStream = (OMX_U16)nOutBuff; 6954b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pCreatePhaseArgs->ulMaxWidth = (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth); 6955b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pCreatePhaseArgs->ulMaxHeight = (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight); 6956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6957fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nWMVFileType != VIDDEC_WMV_ELEMSTREAM) { 6958b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pBufferRCV.sStructRCV.nVertSize = (OMX_U32)(pComponentPrivate->pInPortDef->format.video.nFrameHeight); 6959b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pBufferRCV.sStructRCV.nHorizSize = (OMX_U32)(pComponentPrivate->pInPortDef->format.video.nFrameWidth); 6960fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pOutPortDef->format.video.eColorFormat == VIDDEC_COLORFORMAT422) { 6963fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulYUVFormat = WMV9VIDDEC_YUVFORMAT_INTERLEAVED422; 6964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pOutPortDef->format.video.eColorFormat == VIDDEC_COLORFORMAT420) { 6966fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulYUVFormat = WMV9VIDDEC_YUVFORMAT_PLANAR420; 6967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 6969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 6970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Incorrect Color format %x\n",pComponentPrivate->pOutPortDef->format.video.eColorFormat); 6971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUnsupportedSetting; 6972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 6973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6975fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulMaxFrameRate = 0; 6976fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulMaxBitRate = 0; 6977fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulDataEndianness = 1; 6978fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulProfile = -1; 6979fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulMaxLevel = -1; 6980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulProcessMode = pComponentPrivate->ProcessMode; 6981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->lPreRollBufConfig = 0; 6982b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pCreatePhaseArgs->bCopiedCCDBuffer = 0; 6983fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nWMVFileType == VIDDEC_WMV_ELEMSTREAM) { 6985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->usIsElementaryStream = VIDDEC_SN_WMV_ELEMSTREAM; 6986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 6988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->usIsElementaryStream = VIDDEC_SN_WMV_RCVSTREAM; 6989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 6990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->endArgs = END_OF_CR_PHASE_ARGS; 6992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->pCrPhArgs = (OMX_U16 *) pCreatePhaseArgs; 6994fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cb.LCML_Callback = (void *) VIDDEC_LCML_Callback; 6995fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 6996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eLCMLState != VidDec_LCML_State_Unload && 6997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML != NULL){ 6998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_InitMMCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, NULL, &pLcmlHandle, NULL, &cb); 6999fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 7000fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "LCML_InitMMCodec Failed!...%x\n",eError); 7001b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = OMX_ErrorHardware; 7002fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 7003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7004fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7005fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 7006fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 7007fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 7008fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7009fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 7010d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato if ( pCreatePhaseArgs != NULL ) 7011d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato free(pCreatePhaseArgs); 7012fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs = NULL; 7013fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7014fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "---EXITING(0x%x)\n",eError); 7015fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 7016fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 7017fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7018fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7019fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7020fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 7021fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 7022fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Function to fill DSP structures via LCML 7023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 7024fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 7025fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 7026fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 7027fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 7028fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 7029fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 7030fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7031fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_InitDSP_H264Dec(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate) 7032fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 7033fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 7034fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE *pLcmlHandle = NULL; 7035fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP *lcml_dsp = NULL; 7036fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nInpBuff = MAX_PRIVATE_IN_BUFFERS; 7037fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nInpBuffSize = 0; 7038fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nOutBuff = MAX_PRIVATE_OUT_BUFFERS; 7039fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nOutBuffSize = 0; 7040fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin H264VDEC_SNCreatePhArg* pCreatePhaseArgs = NULL; 7041fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_CALLBACKTYPE cb; 7042b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_U32 nFrameWidth = 0; 7043b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_U32 nFrameHeight = 0; 7044fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7045fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "+++ENTERING\n"); 7046fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7047fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Get number of input and output buffers */ 7048fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nInpBuff = pComponentPrivate->pInPortDef->nBufferCountActual; 7049fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nOutBuff = pComponentPrivate->pOutPortDef->nBufferCountActual; 7050fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7051fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Back it up for further use in this function */ 7052fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nInpBuffSize = pComponentPrivate->pInPortDef->nBufferSize; 7053fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nOutBuffSize = pComponentPrivate->pOutPortDef->nBufferSize; 7054fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7055fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE *)pComponentPrivate->pLCML; 7056fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp = (((LCML_DSP_INTERFACE*)pLcmlHandle)->dspCodec); 7057fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7058fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->DeviceInfo.TypeofDevice = 0; 7059fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->DeviceInfo.DspStream = NULL; 7060fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7061fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->In_BufInfo.nBuffers = nInpBuff; 7062fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->In_BufInfo.nSize = nInpBuffSize; 7063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->In_BufInfo.DataTrMethod = DMM_METHOD; 7064fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7065fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Out_BufInfo.nBuffers = nOutBuff; 7066fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Out_BufInfo.nSize = nOutBuffSize; 7067fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Out_BufInfo.DataTrMethod = DMM_METHOD; 7068fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7069fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.nNumOfDLLs = OMX_H264DEC_NUM_DLLS; 7070fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[0].uuid = (struct DSP_UUID *)&H264VDSOCKET_TI_UUID; 7071fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy ((char*)lcml_dsp->NodeInfo.AllUUIDs[0].DllName,(char*)H264_DEC_NODE_DLL); 7072fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[0].eDllType = DLL_NODEOBJECT; 7073fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7074fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[1].uuid = (struct DSP_UUID *)&H264VDSOCKET_TI_UUID; 7075fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy ((char*)lcml_dsp->NodeInfo.AllUUIDs[1].DllName,(char*)H264_DEC_NODE_DLL); 7076fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[1].eDllType = DLL_DEPENDENT; 7077fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7078fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[2].uuid = (struct DSP_UUID *)&USN_UUID; 7079fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy ((char*)lcml_dsp->NodeInfo.AllUUIDs[2].DllName,(char*)USN_DLL); 7080fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[2].eDllType = DLL_DEPENDENT; 7081fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7082fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[3].uuid = (struct DSP_UUID *)&RINGIO_TI_UUID; 7083fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy ((char*)lcml_dsp->NodeInfo.AllUUIDs[3].DllName,(char*)RINGIO_NODE_DLL); 7084fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[3].eDllType = DLL_DEPENDENT; 7085fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7086b65f253fdc60f6208a54911bee793d225f23cdf8James Dong lcml_dsp->NodeInfo.AllUUIDs[4].uuid = (struct DSP_UUID *)&CONVERSIONS_UUID; 7087b65f253fdc60f6208a54911bee793d225f23cdf8James Dong strcpy ((char*)lcml_dsp->NodeInfo.AllUUIDs[4].DllName,(char*)CONVERSIONS_DLL); 7088b65f253fdc60f6208a54911bee793d225f23cdf8James Dong lcml_dsp->NodeInfo.AllUUIDs[4].eDllType = DLL_DEPENDENT; 7089b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 7090fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->SegID = 0; 7091fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Timeout = -1; 7092fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Alignment = 0; 7093fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Priority = 5; 7094fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7095fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->ProcessMode == 0){ 7096b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth > 352) || 7097b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight > 288)) { 7098fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 3; 7099fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth <= 352) && 7101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth > 176)) || 7102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight <= 288) && 7103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight > 144))) { 7104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 2; 7105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth <= 176) && 7107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth >= 16)) || 7108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight <= 144) && 7109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight >= 16))) { 7110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 1; 7111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 7113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUnsupportedSetting; 7114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 7115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(pComponentPrivate->ProcessMode == 1) { 7118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*OMX_VIDEO_AVCLevelMax*/ 7119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin switch(pComponentPrivate->pH264->eLevel) { 7120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_VIDEO_AVCLevel1: 7121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 8; 7122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 7123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_VIDEO_AVCLevel1b: 7124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 9; 7125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 7126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_VIDEO_AVCLevel11: 7127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 10; 7128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 7129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_VIDEO_AVCLevel12: 7130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 11; 7131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 7132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_VIDEO_AVCLevel13: 7133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_VIDEO_AVCLevel2: 7134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 12; 7135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 7136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_VIDEO_AVCLevel21: 7137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_VIDEO_AVCLevel22: 7138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 13; 7139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 7140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin default: 7141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 14; 7142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 7143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*add code to error*/ 7146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "lcml_dsp->ProfileID = %lu\n", lcml_dsp->ProfileID); 7147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_MALLOC_STRUCT(pCreatePhaseArgs, H264VDEC_SNCreatePhArg,pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel4]); 7148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pCreatePhaseArgs == NULL) { 7149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 7150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 7151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7152b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 7153b65f253fdc60f6208a54911bee793d225f23cdf8James Dong nFrameWidth = pComponentPrivate->pInPortDef->format.video.nFrameWidth; 7154b65f253fdc60f6208a54911bee793d225f23cdf8James Dong nFrameHeight = pComponentPrivate->pInPortDef->format.video.nFrameHeight; 7155b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (nFrameWidth & 0xF) nFrameWidth = (nFrameWidth & 0xFFF0) + 0x10; 7156b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (nFrameHeight & 0xF) nFrameHeight = (nFrameHeight & 0xFFF0) + 0x10; 7157b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 7158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unNumOfStreams = 2; 7159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unInputStreamID = 0; 7160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unInputBufferType = 0; 7161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unInputNumBufsPerStream = (OMX_U16)nInpBuff; 7162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unOutputStreamID = 1; 7163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unOutputBufferType = 0; 7164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unOutputNumBufsPerStream = (OMX_U16)nOutBuff; 7165b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pCreatePhaseArgs->ulMaxWidth = nFrameWidth; 7166b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pCreatePhaseArgs->ulMaxHeight = nFrameHeight; 7167b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 7168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pOutPortDef->format.video.eColorFormat == VIDDEC_COLORFORMAT422) { 7170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulYUVFormat = H264VIDDEC_YUVFORMAT_INTERLEAVED422; 7171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pOutPortDef->format.video.eColorFormat == VIDDEC_COLORFORMAT420) { 7173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulYUVFormat = H264VIDDEC_YUVFORMAT_PLANAR420; 7174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 7176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 7177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Incorrect Color format %x\n",pComponentPrivate->pOutPortDef->format.video.eColorFormat); 7178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUnsupportedSetting; 7179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 7180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulMaxFrameRate = 0; 7183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulMaxBitRate = 0; 7184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulDataEndianness = 1; 7185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulProfile = 0; 7186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulMaxLevel = -1; 7187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulProcessMode = pComponentPrivate->ProcessMode; 7188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->lPreRollBufConfig = 0; 7189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulBitStreamFormat = (pComponentPrivate->H264BitStreamFormat>0?1:0); 7190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulDisplayWidth = 0; 7192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->endArgs = END_OF_CR_PHASE_ARGS; 7193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy (pComponentPrivate->arr, pCreatePhaseArgs, sizeof(H264VDEC_SNCreatePhArg)); 7195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->pCrPhArgs = pComponentPrivate->arr; 7196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cb.LCML_Callback = (void *) VIDDEC_LCML_Callback; 7197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eLCMLState != VidDec_LCML_State_Unload && 7199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML != NULL){ 7200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_InitMMCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, NULL, &pLcmlHandle, NULL, &cb); 7201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 7202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "LCML_InitMMCodec Failed!...%x\n",eError); 7203b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = OMX_ErrorHardware; 7204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 7205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 7208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 7209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 7210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 7212b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (pCreatePhaseArgs) { 7213d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato free(pCreatePhaseArgs); 7214b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pCreatePhaseArgs = NULL; 7215b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 7216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "---EXITING(0x%x)\n",eError); 7217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 7218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 7219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 7221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 7222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Function to fill DSP structures via LCML 7223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 7224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 7225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 7226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 7227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 7228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 7229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 7230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_InitDSP_Mpeg4Dec(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate) 7232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 7233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 7234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE *pLcmlHandle = NULL; 7235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP *lcml_dsp = NULL; 7236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nInpBuff = MAX_PRIVATE_IN_BUFFERS; 7237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nInpBuffSize = 0; 7238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nOutBuff = MAX_PRIVATE_OUT_BUFFERS; 7239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nOutBuffSize = 0; 7240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin MP4VD_GPP_SN_Obj_CreatePhase* pCreatePhaseArgs = NULL; 7241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_CALLBACKTYPE cb; 7242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "+++ENTERING\n"); 7244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Get number of input and output buffers */ 7245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nInpBuff = pComponentPrivate->pInPortDef->nBufferCountActual; 7246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nOutBuff = pComponentPrivate->pOutPortDef->nBufferCountActual; 7247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Back it up for further use in this function */ 7249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nInpBuffSize = pComponentPrivate->pInPortDef->nBufferSize; 7250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nOutBuffSize = pComponentPrivate->pOutPortDef->nBufferSize; 7251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLCML; 7253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp = (((LCML_DSP_INTERFACE*)pLcmlHandle)->dspCodec); 7254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->DeviceInfo.TypeofDevice = 0; 7256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->DeviceInfo.DspStream = NULL; 7257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->In_BufInfo.nBuffers = nInpBuff; 7259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->In_BufInfo.nSize = nInpBuffSize; 7260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->In_BufInfo.DataTrMethod = DMM_METHOD; 7261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Out_BufInfo.nBuffers = nOutBuff; 7263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Out_BufInfo.nSize = nOutBuffSize; 7264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Out_BufInfo.DataTrMethod = DMM_METHOD; 7265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.nNumOfDLLs = OMX_MP4DEC_NUM_DLLS; 7267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nFrameWidth = pComponentPrivate->pOutPortDef->format.video.nFrameWidth; 7268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nFrameHeight = pComponentPrivate->pOutPortDef->format.video.nFrameHeight; 7269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 727022c239812ee8fc2e69d7da5f0f3e0df599bc7806Benny Wong nFrameWidth = (nFrameWidth + 0x0f) & ~0x0f; 727122c239812ee8fc2e69d7da5f0f3e0df599bc7806Benny Wong nFrameHeight = (nFrameHeight + 0x0f) & ~0x0f; 7272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nFrameWidth * nFrameHeight > 880 * 720) 7273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 7274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[0].uuid = (struct DSP_UUID *)&MP4D720PSOCKET_TI_UUID; 7275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy ((char*)lcml_dsp->NodeInfo.AllUUIDs[0].DllName,(char*)MP4720P_DEC_NODE_DLL); 7276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[0].eDllType = DLL_NODEOBJECT; 7277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[1].uuid = (struct DSP_UUID *)&MP4D720PSOCKET_TI_UUID; 7279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy ((char*)lcml_dsp->NodeInfo.AllUUIDs[1].DllName,(char*)MP4720P_DEC_NODE_DLL); 7280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[1].eDllType = DLL_DEPENDENT; 7281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eMBErrorReport.bEnabled = FALSE; 7283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->MPEG4Codec_IsTI = FALSE; 7284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 7286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 7287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[0].uuid = (struct DSP_UUID *)&MP4DSOCKET_TI_UUID; 7288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy ((char*)lcml_dsp->NodeInfo.AllUUIDs[0].DllName,(char*)MP4_DEC_NODE_DLL); 7289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[0].eDllType = DLL_NODEOBJECT; 7290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[1].uuid = (struct DSP_UUID *)&MP4DSOCKET_TI_UUID; 7292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy ((char*)lcml_dsp->NodeInfo.AllUUIDs[1].DllName,(char*)MP4_DEC_NODE_DLL); 7293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[1].eDllType = DLL_DEPENDENT; 7294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->MPEG4Codec_IsTI = TRUE; 7295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[2].uuid = (struct DSP_UUID *)&RINGIO_TI_UUID; 7298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy ((char*)lcml_dsp->NodeInfo.AllUUIDs[2].DllName,(char*)RINGIO_NODE_DLL); 7299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[2].eDllType = DLL_DEPENDENT; 7300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[3].uuid = (struct DSP_UUID *)&USN_UUID; 7302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy ((char*)lcml_dsp->NodeInfo.AllUUIDs[3].DllName,(char*)USN_DLL); 7303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[3].eDllType = DLL_DEPENDENT; 7304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7305b65f253fdc60f6208a54911bee793d225f23cdf8James Dong lcml_dsp->NodeInfo.AllUUIDs[4].uuid = (struct DSP_UUID *)&CONVERSIONS_UUID; 7306b65f253fdc60f6208a54911bee793d225f23cdf8James Dong strcpy ((char*)lcml_dsp->NodeInfo.AllUUIDs[4].DllName,(char*)CONVERSIONS_DLL); 7307b65f253fdc60f6208a54911bee793d225f23cdf8James Dong lcml_dsp->NodeInfo.AllUUIDs[4].eDllType = DLL_DEPENDENT; 7308b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 7309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->SegID = 0; 7310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Timeout = -1; 7311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Alignment = 0; 7312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Priority = 5; 7313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nFrameWidth * nFrameHeight > 640 * 480) { 7315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 4; 7316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (nFrameWidth * nFrameHeight > 352 * 288) { 7318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 3; 7319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (nFrameWidth * nFrameHeight > 176 * 144) { 7321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 2; 7322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (nFrameWidth * nFrameHeight >= 16 * 16) { 7324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 1; 7325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 7327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUnsupportedSetting; 7328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 7329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_MALLOC_STRUCT(pCreatePhaseArgs, MP4VD_GPP_SN_Obj_CreatePhase,pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel4]); 7332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pCreatePhaseArgs == NULL) { 7333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 7334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 7335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unNumOfStreams = 2; 7337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unInputStreamID = 0; 7338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unInputBufferType = 0; 7339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unlInputNumBufsPerStream = (OMX_U16)(pComponentPrivate->pInPortDef->nBufferCountActual); 7340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unOutputStreamID = 1; 7341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unOutputBufferType = 0; 7342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unOutputNumBufsPerStream = (OMX_U16)(pComponentPrivate->pOutPortDef->nBufferCountActual); 7343b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 7344b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* ulMaxWidth and ulMaxHeight needs to be multiples of 16. */ 7345b65f253fdc60f6208a54911bee793d225f23cdf8James Dong nFrameWidth = pComponentPrivate->pInPortDef->format.video.nFrameWidth; 7346b65f253fdc60f6208a54911bee793d225f23cdf8James Dong nFrameHeight = pComponentPrivate->pInPortDef->format.video.nFrameHeight; 7347b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (nFrameWidth & 0xF) nFrameWidth = (nFrameWidth & 0xFFF0) + 0x10; 7348b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (nFrameHeight & 0xF) nFrameHeight = (nFrameHeight & 0xFFF0) + 0x10; 7349b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 735022c239812ee8fc2e69d7da5f0f3e0df599bc7806Benny Wong pCreatePhaseArgs->ulMaxWidth = (OMX_U16)(nFrameWidth); 735122c239812ee8fc2e69d7da5f0f3e0df599bc7806Benny Wong pCreatePhaseArgs->ulMaxHeight = (OMX_U16)(nFrameHeight); 7352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 7353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pOutPortDef->format.video.eColorFormat == VIDDEC_COLORFORMAT422) { 7354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulYUVFormat = MP4VIDDEC_YUVFORMAT_INTERLEAVED422; 7355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pOutPortDef->format.video.eColorFormat == VIDDEC_COLORFORMAT420) { 7357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulYUVFormat = MP4VIDDEC_YUVFORMAT_PLANAR420; 7358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 7360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 7361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Incorrect Color format %x\n",pComponentPrivate->pOutPortDef->format.video.eColorFormat); 7362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "lcml_dsp->ProfileID = %lu\n", lcml_dsp->ProfileID); 7363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUnsupportedSetting; 7364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 7365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "pCreatePhaseArgs->ulMaxWidth %lu pCreatePhaseArgs->ulMaxHeight %lu\n", 7368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulMaxWidth,pCreatePhaseArgs->ulMaxHeight); 7369b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 7370b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pCreatePhaseArgs->ulMaxFrameRate = VIDDEC_MAX_FRAMERATE; 7371b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pCreatePhaseArgs->ulMaxBitRate = VIDDEC_MAX_BITRATE; 7372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulDataEndianness = 1; 7373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG4){ 7374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulProfile = 0; 7375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 7377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulProfile = 8; 7378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulMaxLevel = -1; 7380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulProcessMode = pComponentPrivate->ProcessMode; 7381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulPreRollBufConfig = 0; 7382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulDisplayWidth = 0; 7383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->endArgs = END_OF_CR_PHASE_ARGS; 7384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(pComponentPrivate->arr, pCreatePhaseArgs, sizeof(MP4VD_GPP_SN_Obj_CreatePhase)); 7386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->pCrPhArgs = pComponentPrivate->arr; 7387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cb.LCML_Callback = (void*) VIDDEC_LCML_Callback; 7388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eLCMLState != VidDec_LCML_State_Unload && 7390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML != NULL){ 7391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState = VidDec_LCML_State_Init; 7392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_InitMMCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, NULL, &pLcmlHandle, NULL, &cb); 7394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 7395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "LCML_InitMMCodec Failed!...%x\n",eError); 7396b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = OMX_ErrorHardware; 7397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 7398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 7401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 7402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 7403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 7405b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (pCreatePhaseArgs) { 7406d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato free(pCreatePhaseArgs); 7407b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pCreatePhaseArgs = NULL; 7408b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 7409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "---EXITING(0x%x)\n",eError); 7410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 7411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 7412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7414fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 7415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 7416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Function to fill DSP structures via LCML 7417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 7418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 7419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 7420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 7421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 7422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 7423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 7424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_InitDSP_Mpeg2Dec(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate) 7426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 7427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 7428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE *pLcmlHandle = NULL; 7429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP *lcml_dsp = NULL; 7430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nInpBuff = MAX_PRIVATE_IN_BUFFERS; 7431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nInpBuffSize = 0; 7432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nOutBuff = MAX_PRIVATE_OUT_BUFFERS; 7433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nOutBuffSize = 0; 7434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin MP2VDEC_SNCreatePhArg* pCreatePhaseArgs = NULL; 7435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_CALLBACKTYPE cb; 7436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "+++ENTERING\n"); 7438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Get number of input and output buffers */ 7439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nInpBuff = pComponentPrivate->pInPortDef->nBufferCountActual; 7440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nOutBuff = pComponentPrivate->pOutPortDef->nBufferCountActual; 7441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Back it up for further use in this function */ 7443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nInpBuffSize = pComponentPrivate->pInPortDef->nBufferSize; 7444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nOutBuffSize = pComponentPrivate->pOutPortDef->nBufferSize; 7445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLCML; 7447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp = (((LCML_DSP_INTERFACE*)pLcmlHandle)->dspCodec); 7448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->DeviceInfo.TypeofDevice = 0; 7450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->DeviceInfo.DspStream = NULL; 7451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->In_BufInfo.nBuffers = nInpBuff; 7453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->In_BufInfo.nSize = nInpBuffSize; 7454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->In_BufInfo.DataTrMethod = DMM_METHOD; 7455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Out_BufInfo.nBuffers = nOutBuff; 7457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Out_BufInfo.nSize = nOutBuffSize; 7458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Out_BufInfo.DataTrMethod = DMM_METHOD; 7459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.nNumOfDLLs = OMX_MP2DEC_NUM_DLLS; 7461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[0].uuid = (struct DSP_UUID *)&MP2DSOCKET_TI_UUID; 7462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy ((char*)lcml_dsp->NodeInfo.AllUUIDs[0].DllName,(char*)MP2_DEC_NODE_DLL); 7463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[0].eDllType = DLL_NODEOBJECT; 7464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[1].uuid = (struct DSP_UUID *)&MP2DSOCKET_TI_UUID; 7466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy ((char*)lcml_dsp->NodeInfo.AllUUIDs[1].DllName,(char*)MP2_DEC_NODE_DLL); 7467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[1].eDllType = DLL_DEPENDENT; 7468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[2].uuid = (struct DSP_UUID *)&RINGIO_TI_UUID; 7470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy ((char*)lcml_dsp->NodeInfo.AllUUIDs[2].DllName,(char*)RINGIO_NODE_DLL); 7471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[2].eDllType = DLL_DEPENDENT; 7472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[3].uuid = (struct DSP_UUID *)&USN_UUID; 7474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy ((char*)lcml_dsp->NodeInfo.AllUUIDs[3].DllName,(char*)USN_DLL); 7475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[3].eDllType = DLL_DEPENDENT; 7476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->SegID = 0; 7478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Timeout = -1; 7479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Alignment = 0; 7480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Priority = 5; 7481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->ProcessMode == 0){ 7483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth > 352) || 7484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight > 288)) { 7485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 3; 7486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth <= 352) && 7488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth > 176)) || 7489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight <= 288) && 7490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight > 144))) { 7491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 2; 7492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth <= 176) && 7494b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth >= 16)) || 7495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight <= 144) && 7496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight >= 16))) { 7497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 1; 7498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 7500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUnsupportedSetting; 7501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 7502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(pComponentPrivate->ProcessMode == 1) { 7505b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth > 352) || 7506b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight > 288)) { 7507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 3; 7508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth <= 352) && 7510b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth > 176)) || 7511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight <= 288) && 7512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight > 144))) { 7513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 2; 7514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7515b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth <= 176) && 7516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth >= 16)) || 7517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight <= 144) && 7518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight >= 16))) { 7519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 1; 7520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 7522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUnsupportedSetting; 7523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 7524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_MALLOC_STRUCT(pCreatePhaseArgs, MP2VDEC_SNCreatePhArg,pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel4]); 7528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pCreatePhaseArgs == NULL) { 7529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 7530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 7531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unNumOfStreams = 2; 7533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unInputStreamID = 0; 7534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unInputBufferType = 0; 7535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unInputNumBufsPerStream = (OMX_U16)(pComponentPrivate->pInPortDef->nBufferCountActual); 7536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unOutputStreamID = 1; 7537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unOutputBufferType = 0; 7538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unOutputNumBufsPerStream = (OMX_U16)(pComponentPrivate->pOutPortDef->nBufferCountActual); 7539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pCreatePhaseArgs->ulMaxWidth = (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth); 7540b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pCreatePhaseArgs->ulMaxHeight = (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight); 7541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pOutPortDef->format.video.eColorFormat == VIDDEC_COLORFORMAT422) { 7543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulYUVFormat = MP2VIDDEC_YUVFORMAT_INTERLEAVED422; 7544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pOutPortDef->format.video.eColorFormat == VIDDEC_COLORFORMAT420) { 7546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulYUVFormat = MP2VIDDEC_YUVFORMAT_PLANAR420; 7547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 7549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 7550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Incorrect Color format %x\n",pComponentPrivate->pOutPortDef->format.video.eColorFormat); 7551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUnsupportedSetting; 7552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 7553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulMaxFrameRate = 0; 7556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulMaxBitRate = -1; 7557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulDataEndianness = 1; 7558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulProfile = 0; 7559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->lMaxLevel = -1; 7560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulProcessMode = pComponentPrivate->ProcessMode; 7561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->lPreRollBufConfig = 0; 7562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulDisplayWidth = 0; 7563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->endArgs = END_OF_CR_PHASE_ARGS; 7564fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7565fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(pComponentPrivate->arr, pCreatePhaseArgs, sizeof(MP2VDEC_SNCreatePhArg)); 7567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->pCrPhArgs = pComponentPrivate->arr; 7568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cb.LCML_Callback = (void*) VIDDEC_LCML_Callback; 7569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eLCMLState != VidDec_LCML_State_Unload && 7571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML != NULL){ 7572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_InitMMCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, NULL, &pLcmlHandle, NULL, &cb); 7573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 7574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "LCML_InitMMCodec Failed!...%x\n",eError); 7575b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = OMX_ErrorHardware; 7576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 7577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 7580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 7581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 7582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 7584b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (pCreatePhaseArgs) { 7585d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato free(pCreatePhaseArgs); 7586b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pCreatePhaseArgs = NULL; 7587b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 7588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "---EXITING(0x%x)\n",eError); 7589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 7590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 7591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7592fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 7593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 7594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Function to fill DSP structures via LCML 7595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 7596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 7597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 7598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 7599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 7600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 7601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 7602fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_InitDSP_SparkDec(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate) 7604fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 7605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 7606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE *pLcmlHandle = NULL; 7607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP *lcml_dsp = NULL; 7608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nInpBuff = MAX_PRIVATE_IN_BUFFERS; 7609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nInpBuffSize = 0; 7610fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nOutBuff = MAX_PRIVATE_OUT_BUFFERS; 7611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nOutBuffSize = 0; 7612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin SPARKVD_GPP_SN_Obj_CreatePhase* pCreatePhaseArgs = NULL; 7613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_CALLBACKTYPE cb; 7614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "+++ENTERING\n"); 7616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Get number of input and output buffers */ 7617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nInpBuff = pComponentPrivate->pInPortDef->nBufferCountActual; 7618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nOutBuff = pComponentPrivate->pOutPortDef->nBufferCountActual; 7619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Back it up for further use in this function */ 7621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nInpBuffSize = pComponentPrivate->pInPortDef->nBufferSize; 7622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nOutBuffSize = pComponentPrivate->pOutPortDef->nBufferSize; 7623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLCML; 7625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp = (((LCML_DSP_INTERFACE*)pLcmlHandle)->dspCodec); 7626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->DeviceInfo.TypeofDevice = 0; 7628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->DeviceInfo.DspStream = NULL; 7629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->In_BufInfo.nBuffers = nInpBuff; 7631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->In_BufInfo.nSize = nInpBuffSize; 7632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->In_BufInfo.DataTrMethod = DMM_METHOD; 7633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Out_BufInfo.nBuffers = nOutBuff; 7635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Out_BufInfo.nSize = nOutBuffSize; 7636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Out_BufInfo.DataTrMethod = DMM_METHOD; 7637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.nNumOfDLLs = OMX_SPARKDEC_NUM_DLLS; 7639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[0].uuid = (struct DSP_UUID *)&SPARKDSOCKET_TI_UUID; 7640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy ((char*)lcml_dsp->NodeInfo.AllUUIDs[0].DllName,(char*)SPARK_DEC_NODE_DLL); 7641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[0].eDllType = DLL_NODEOBJECT; 7642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[1].uuid = (struct DSP_UUID *)&SPARKDSOCKET_TI_UUID; 7644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy ((char*)lcml_dsp->NodeInfo.AllUUIDs[1].DllName,(char*)SPARK_DEC_NODE_DLL); 7645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[1].eDllType = DLL_DEPENDENT; 7646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[2].uuid = (struct DSP_UUID *)&RINGIO_TI_UUID; 7648fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy ((char*)lcml_dsp->NodeInfo.AllUUIDs[2].DllName,(char*)RINGIO_NODE_DLL); 7649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[2].eDllType = DLL_DEPENDENT; 7650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7651fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[3].uuid = (struct DSP_UUID *)&USN_UUID; 7652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy ((char*)lcml_dsp->NodeInfo.AllUUIDs[3].DllName,(char*)USN_DLL); 7653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[3].eDllType = DLL_DEPENDENT; 7654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7655b65f253fdc60f6208a54911bee793d225f23cdf8James Dong lcml_dsp->NodeInfo.AllUUIDs[4].uuid = (struct DSP_UUID *)&CONVERSIONS_UUID; 7656b65f253fdc60f6208a54911bee793d225f23cdf8James Dong strcpy ((char*)lcml_dsp->NodeInfo.AllUUIDs[4].DllName,(char*)CONVERSIONS_DLL); 7657b65f253fdc60f6208a54911bee793d225f23cdf8James Dong lcml_dsp->NodeInfo.AllUUIDs[4].eDllType = DLL_DEPENDENT; 7658b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 7659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->SegID = 0; 7660fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Timeout = -1; 7661fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Alignment = 0; 7662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Priority = 5; 7663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->ProcessMode == 0){ 7666b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth > 640) || 7667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight > 480)) { 7668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 4; 7669fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7670b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth <= 640) && 7671b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth > 352)) || 7672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight <= 480) && 7673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight > 288))) { 7674fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 3; 7675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth <= 352) && 7677b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth > 176)) || 7678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight <= 288) && 7679b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight > 144))) { 7680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 2; 7681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7682b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth <= 176) && 7683b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth >= 16)) || 7684b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight <= 144) && 7685b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight >= 16))) { 7686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 1; 7687fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7688fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 7689fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUnsupportedSetting; 7690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 7691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(pComponentPrivate->ProcessMode == 1) { 7694b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth > 640) || 7695b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight > 480)) { 7696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 4; 7697fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7698b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth <= 640) && 7699b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth > 352)) || 7700b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight <= 480) && 7701b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight > 288))) { 7702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 3; 7703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7704b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth <= 352) && 7705b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth > 176)) || 7706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight <= 288) && 7707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight > 144))) { 7708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 2; 7709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth <= 176) && 7711b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth >= 16)) || 7712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight <= 144) && 7713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight >= 16))) { 7714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 1; 7715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 7717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUnsupportedSetting; 7718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 7719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_MALLOC_STRUCT(pCreatePhaseArgs, SPARKVD_GPP_SN_Obj_CreatePhase,pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel4]); 7723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pCreatePhaseArgs == NULL) { 7724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 7725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 7726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unNumOfStreams = 2; 7728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unInputStreamID = 0; 7729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unInputBufferType = 0; 7730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unlInputNumBufsPerStream = (OMX_U16)(pComponentPrivate->pInPortDef->nBufferCountActual); 7731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unOutputStreamID = 1; 7732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unOutputBufferType = 0; 7733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->unOutputNumBufsPerStream = (OMX_U16)(pComponentPrivate->pOutPortDef->nBufferCountActual); 7734b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pCreatePhaseArgs->ulMaxWidth = (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameWidth); 7735b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pCreatePhaseArgs->ulMaxHeight = (OMX_U16)(pComponentPrivate->pInPortDef->format.video.nFrameHeight); 7736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pOutPortDef->format.video.eColorFormat == VIDDEC_COLORFORMAT422) { 7738fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulYUVFormat = SPARKVIDDEC_YUVFORMAT_INTERLEAVED422; 7739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pOutPortDef->format.video.eColorFormat == VIDDEC_COLORFORMAT420) { 7741fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulYUVFormat = SPARKVIDDEC_YUVFORMAT_PLANAR420; 7742fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 7744fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 7745fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Incorrect Color format %x\n",pComponentPrivate->pOutPortDef->format.video.eColorFormat); 7746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUnsupportedSetting; 7747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 7748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulMaxFrameRate = 0; 7751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulMaxBitRate = -1; 7752fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulDataEndianness = 1; 7753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulProfile = 0; 7754fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulMaxLevel = -1; 7755fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulProcessMode = pComponentPrivate->ProcessMode; 7756fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->ulPreRollBufConfig = 0; 7757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCreatePhaseArgs->endArgs = END_OF_CR_PHASE_ARGS; 7758fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7759fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(pComponentPrivate->arr, pCreatePhaseArgs, sizeof(SPARKVD_GPP_SN_Obj_CreatePhase)); 7760fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->pCrPhArgs = pComponentPrivate->arr; 7761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cb.LCML_Callback = (void*) VIDDEC_LCML_Callback; 7762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7763fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eLCMLState != VidDec_LCML_State_Unload && 7764fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML != NULL){ 7765fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_InitMMCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, NULL, &pLcmlHandle, NULL, &cb); 7766fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 7767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "LCML_InitMMCodec Failed!...%x\n",eError); 7768b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = OMX_ErrorHardware; 7769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 7770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 7773fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 7774fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 7775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 7777b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (pCreatePhaseArgs) { 7778d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato free(pCreatePhaseArgs); 7779b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pCreatePhaseArgs = NULL; 7780b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 7781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "---EXITING(0x%x)\n",eError); 7782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 7783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 7784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 7786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 7787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * VIDDEC_Handle_InvalidState() Function called for a non recoverable error 7788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 7789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponentPrivate This is the pointer to the private structure 7790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 7791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 7792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ErrorHardware If OMX_StateInvalid is the actual state 7793fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 7794fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 7795fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_Handle_InvalidState (VIDDEC_COMPONENT_PRIVATE* pComponentPrivate) 7796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 7797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 7798fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE1(pComponentPrivate->dbg, "+++ENTERING\n"); 7800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "pComponentPrivate 0x%p\n", (int*)pComponentPrivate); 7801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eState != OMX_StateInvalid) { 7803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState = OMX_StateInvalid; 7804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 7805fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 7806fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 7807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorInvalidState, 7808fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorCritical, 7809fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Transitioning to Invalid State"); 7810fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 7811fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7812fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 7813fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 7814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7815fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE1(pComponentPrivate->dbg, "---EXITING(0x%x)\n",eError); 7816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 7817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 7818fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 7821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 7822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * VIDDEC_PROPAGATE_MARK() Function called for propagate mark from input buffers to output buffers 7823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 7824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponentPrivate This is the pointer to the private structure 7825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pBuffHead This is the pointer to the output buffer 7826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 7827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success 7828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ErrorUnsupportedSetting If CompressionFormat has not a valid value 7829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 7830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 7831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_Propagate_Mark(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, OMX_BUFFERHEADERTYPE *pBuffHead) 7832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 7833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 7834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffHead->nFilledLen != 0) { 7836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->hMarkTargetComponent = pComponentPrivate->arrMarkBufIndex[pComponentPrivate->nInMarkBufIndex].hMarkTargetComponent; 7837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pMarkData = pComponentPrivate->arrMarkBufIndex[pComponentPrivate->nInMarkBufIndex].pMarkData; 7838fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nOutMarkBufIndex++; 7839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nOutMarkBufIndex %= VIDDEC_MAX_QUEUE_SIZE; 7840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 7841fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBuffHead->hMarkTargetComponent == pComponentPrivate->pHandle) 7843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 7844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 7845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 7846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventMark, 7847fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0, 7848fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0, 7849fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pMarkData); 7850fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 7853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 7854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7856fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7857fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 7858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 7859fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Callback() function will be called LCML component to write the msg 7860fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 7861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param msgBuffer This buffer will be returned by the LCML 7862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 7863fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 7864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 7865fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 7866fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 7867fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7868fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_LCML_Callback (TUsnCodecEvent event,void * argsCb [10]) 7869fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 7870fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_COMPONENT_PRIVATE* pComponentPrivate = NULL; 7871fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 7872fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_BUFFER_PRIVATE* pBufferPrivate = NULL; 7873fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_S32 nRetVal = 0; 7874fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7875fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate = (VIDDEC_COMPONENT_PRIVATE*)((LCML_DSP_INTERFACE*)argsCb[6])->pComponentPrivate; 7876fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7877fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#if 0 7878fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin switch(event) { 7879fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case EMMCodecDspError: 7880fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "[LCML CALLBACK EVENT] EMMCodecDspError (int)argsCb [0] %x (int)argsCb [4] %x (int)argsCb [5] %x\n",(int)argsCb [0],(int)argsCb [4],(int)argsCb [5]); 7881fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 7882fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7883fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case EMMCodecInternalError: 7884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "[LCML CALLBACK EVENT] EMMCodecInternalError\n"); 7885fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 7886fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7887fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case EMMCodecInitError: 7888fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "[LCML CALLBACK EVENT] EMMCodecInitError\n"); 7889fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 7890fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7891fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case EMMCodecDspMessageRecieved: 7892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "[LCML CALLBACK EVENT] EMMCodecDspMessageRecieved\n"); 7893fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 7894fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case EMMCodecBufferProcessed: 7895fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP0(pComponentPrivate->dbg, "[LCML CALLBACK EVENT] EMMCodecBufferProcessed %x\n",(int)argsCb [0]); 7896fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 7897fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case EMMCodecProcessingStarted: 7898fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "[LCML CALLBACK EVENT] EMMCodecProcessingStarted\n"); 7899fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 7900fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7901fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case EMMCodecProcessingPaused: 7902fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "[LCML CALLBACK EVENT] EMMCodecProcessingPaused\n"); 7903fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 7904fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7905fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case EMMCodecProcessingStoped: 7906fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "[LCML CALLBACK EVENT] EMMCodecProcessingStoped\n"); 7907fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 7908fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7909fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case EMMCodecProcessingEof: 7910fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "[LCML CALLBACK EVENT] EMMCodecProcessingEof\n"); 7911fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 7912fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case EMMCodecBufferNotProcessed: 7913fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "[LCML CALLBACK EVENT] EMMCodecBufferNotProcessed %x\n",(int)argsCb [0]); 7914fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 7915fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case EMMCodecAlgCtrlAck: 7916fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "[LCML CALLBACK EVENT] EMMCodecAlgCtrlAck\n"); 7917fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 7918fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7919fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case EMMCodecStrmCtrlAck: 7920fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "[LCML CALLBACK EVENT] EMMCodecStrmCtrlAck\n"); 7921fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 7922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7923fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 7924fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7925fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP0(pComponentPrivate->dbg, "+++ENTERING\n"); 7926fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP0(pComponentPrivate->dbg, "pComponentPrivate 0x%p 0x%x\n", (int*)pComponentPrivate,event); 7927fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7928fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->pCompPort[0] == NULL){ 7929fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "*****************************error in lcmlcalback******************************\n"); 7930fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 7931fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7932fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (event == EMMCodecProcessingPaused) { 7933fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_LOCK(pComponentPrivate->sMutex); 7934fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_SIGNAL(pComponentPrivate->sMutex); 7935fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 7936fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bTransPause = 1; 7937fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 79383000a016292019e74a9afbd65aa95c669c1c4b94James Dong else if (event == EMMCodecAlgCtrlAck) { 7939fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_LOCK(pComponentPrivate->sMutex); 7940fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_SIGNAL(pComponentPrivate->sMutex); 7941fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 7942fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bTransPause = 1; 7943fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 79443000a016292019e74a9afbd65aa95c669c1c4b94James Dong else if (event == EMMCodecProcessingStoped) { 7945fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_LOCK(pComponentPrivate->sMutex); 7946fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_SIGNAL(pComponentPrivate->sMutex); 7947fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 7948fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bTransPause = 1; 7949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsPaused = 0; 7950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 79513000a016292019e74a9afbd65aa95c669c1c4b94James Dong else if (event == EMMCodecProcessingStarted) { 7952fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_LOCK(pComponentPrivate->sMutex); 7953fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_SIGNAL(pComponentPrivate->sMutex); 7954fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 7955fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bTransPause = 1; 7956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsPaused = 0; 7957fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 79583000a016292019e74a9afbd65aa95c669c1c4b94James Dong else if (event == EMMCodecBufferProcessed) { 7959fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "EMMCodecBufferProcessed 0x%lx\n", (OMX_U32)argsCb [0]); 7960fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((OMX_U32)argsCb [0] == EMMCodecOuputBuffer) { 7961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "EMMCodecOuputBuffer\n"); 7962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE* pBuffHead = NULL; 7963fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_BUFFER_PRIVATE* pBuffPriv = NULL; 7964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8* pBuffer; 7965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7966fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->eState != OMX_StateLoaded && pComponentPrivate->eState != OMX_StateIdle) { 7967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead = (OMX_BUFFERHEADERTYPE*)argsCb[7]; 7968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBuffHead != NULL) 7969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 7970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "pBuffHead Output 0x%p pBuffer 0x%p\n", pBuffHead, argsCb[1]); 7971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffPriv = (VIDDEC_BUFFER_PRIVATE*)pBuffHead->pOutputPortPrivate; 7972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffPriv != NULL) { 7973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBuffPriv->eBufferOwner != VIDDEC_BUFFER_WITH_CLIENT) 7974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 7975fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 7976fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->lcml_nCntOpReceived++; 7977fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->lcml_nCntOpReceived == 4) { 7978fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp, 7979fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_BoundaryStart | PERF_BoundarySteadyState); 7980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 7982fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffer = (OMX_U8*)argsCb[1]; 7983fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Retrieve time stamp information */ 7984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->ProcessMode == 0) { 7985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PTR pBufferFlags; 7986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_CircBuf_Remove(pComponentPrivate, 7987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_CBUFFER_TIMESTAMP, 7988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_INPUT_PORT, 7989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin &pBufferFlags); 7990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBufferFlags != NULL){ 7991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nTimeStamp = (OMX_TICKS)((VIDDEC_CBUFFER_BUFFERFLAGS*)pBufferFlags)->nTimeStamp; 7992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*pBuffHead->nFlags = 0; 7993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags = (OMX_U32)((VIDDEC_CBUFFER_BUFFERFLAGS*)pBufferFlags)->nFlags;*/ 7994fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= (((OMX_U32)((VIDDEC_CBUFFER_BUFFERFLAGS*)pBufferFlags)->nFlags) & OMX_BUFFERFLAG_DECODEONLY); 7995fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nTickCount = (OMX_U32)((VIDDEC_CBUFFER_BUFFERFLAGS*)pBufferFlags)->nTickCount; 7996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 7998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nTimeStamp = 0; 7999fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nTickCount = 0; 8000fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8001fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8002fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 8003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffHead->nFilledLen != 0){ 8004fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nTimeStamp = (OMX_TICKS)pComponentPrivate->arrBufIndex[pComponentPrivate->nOutBufIndex]; 8005fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nOutBufIndex++; 8006fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nOutBufIndex %= VIDDEC_MAX_QUEUE_SIZE; 8007fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8008fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8009fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "pBuffHead->nTimeStamp %lld\n", pBuffHead->nTimeStamp); 8010fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBuffHead != NULL){ 8011fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*if (pComponentPrivate->pCompPort[1]->hTunnelComponent != NULL) { 8012fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen = (OMX_S32)argsCb[2]; 8013fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8014fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else {*/ 8015fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen = (OMX_S32)argsCb[8]; 8016fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*}*/ 8017fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "pBuffHead->nFilledLen %lu\n", pBuffHead->nFilledLen); 8018b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = IncrementCount (&(pComponentPrivate->nCountOutputBFromDsp), &(pComponentPrivate->mutexOutputBFromDSP)); 8019b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (eError != OMX_ErrorNone) { 8020b65f253fdc60f6208a54911bee793d225f23cdf8James Dong return eError; 8021b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 8022fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferPrivate = (VIDDEC_BUFFER_PRIVATE* )pBuffHead->pOutputPortPrivate; 8023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferPrivate->eBufferOwner = VIDDEC_BUFFER_WITH_COMPONENT; 8024fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "eBufferOwner 0x%x\n", pBufferPrivate->eBufferOwner); 8025fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 8026fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ReceivedFrame(pComponentPrivate->pPERFcomp, 8027fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pBuffer, 8028fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen, 8029fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleCommonLayer); 8030fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 8031fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8032fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nRetVal = write(pComponentPrivate->filled_outBuf_Q[1],&pBuffHead,sizeof(pBuffHead)); 8033fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(nRetVal == -1){ 8034b65f253fdc60f6208a54911bee793d225f23cdf8James Dong DecrementCount (&(pComponentPrivate->nCountOutputBFromDsp), &(pComponentPrivate->mutexOutputBFromDSP)); 8035b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufferPrivate->eBufferOwner = VIDDEC_BUFFER_WITH_DSP; 8036fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM4(pComponentPrivate->dbg, "writing to the input pipe %x (%ld)\n", OMX_ErrorInsufficientResources,nRetVal); 8037fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 8038fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 8039fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 8040fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorInsufficientResources, 8041fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 8042fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Error writing to the output pipe"); 8043fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8044fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8045fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8046fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 8047fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "buffer dropped lcml out process pBuffHead %p owner %d\n",pBuffHead,pBuffPriv->eBufferOwner); 8048fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8049fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8050fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8051fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8052fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8053b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ((OMX_U32)argsCb [0] == EMMCodecInputBuffer || 8054b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((OMX_U32)argsCb [0] == EMMCodecInputBufferMapBufLen)) { 8055fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "EMMCodecInputBuffer\n"); 8056fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE* pBuffHead = NULL; 8057fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_BUFFER_PRIVATE* pBuffPriv = NULL; 8058fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8* pBuffer; 8059fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->eState != OMX_StateLoaded && pComponentPrivate->eState != OMX_StateIdle) { 8060fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead = (OMX_BUFFERHEADERTYPE*)argsCb[7]; 8061fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBuffHead != NULL) 8062fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 8063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffPriv = (VIDDEC_BUFFER_PRIVATE*)pBuffHead->pInputPortPrivate; 8064fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffPriv == NULL ) { 8065fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 8066fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8067fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 8068fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBuffPriv->eBufferOwner != VIDDEC_BUFFER_WITH_CLIENT) 8069fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 8070fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "pBuffHead Input 0x%p pBuffer 0x%p\n", pBuffHead, argsCb[1]); 8071fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffer = (OMX_U8*)argsCb[1]; 8072fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBuffer != NULL){ 8073b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = IncrementCount (&(pComponentPrivate->nCountInputBFromDsp), &(pComponentPrivate->mutexInputBFromDSP)); 8074b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (eError != OMX_ErrorNone) { 8075b65f253fdc60f6208a54911bee793d225f23cdf8James Dong return eError; 8076b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 8077fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferPrivate = (VIDDEC_BUFFER_PRIVATE* )pBuffHead->pInputPortPrivate; 8078fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferPrivate->eBufferOwner = VIDDEC_BUFFER_WITH_COMPONENT; 8079fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "eBufferOwner 0x%x\n", pBufferPrivate->eBufferOwner); 8080fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #ifdef __PERF_INSTRUMENTATION__ 8081fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ReceivedFrame(pComponentPrivate->pPERFcomp, 8082fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(pBuffHead,pBuffer), 8083fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(pBuffHead,nFilledLen), 8084fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleCommonLayer); 8085fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #endif 8086fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen = 0; 8087fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nWMVFileType == VIDDEC_WMV_ELEMSTREAM && 8088fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingWMV && 8089fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->ProcessMode == 0) { 8090fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* vc-1 fix */ 8091fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_WMVPOINTERFIXED 8092fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "restoring buffer pointer 0x%p >> pBuffer 0x%p\n", 8093fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferPrivate->pTempBuffer, pBuffHead->pBuffer); 8094fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pBuffer = pBufferPrivate->pTempBuffer; 8095fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 8096fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nOffset = VIDDEC_WMV_BUFFER_OFFSET; 8097fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 8098fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8099fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nRetVal = write(pComponentPrivate->free_inpBuf_Q[1], &pBuffHead, sizeof(pBuffHead)); 8100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(nRetVal == -1){ 8101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM4(pComponentPrivate->dbg, "writing to the input pipe %x (%lu)\n", OMX_ErrorInsufficientResources,nRetVal); 8102b65f253fdc60f6208a54911bee793d225f23cdf8James Dong DecrementCount (&(pComponentPrivate->nCountInputBFromDsp), &(pComponentPrivate->mutexInputBFromDSP)); 8103b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufferPrivate->eBufferOwner = VIDDEC_BUFFER_WITH_DSP; 8104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 8105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 8106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 8107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorInsufficientResources, 8108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 8109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Error writing to the output pipe"); 8110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 8114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "buffer dropped lcml in notprocess pBuffHead %p owner %d\n",pBuffHead,pBuffPriv->eBufferOwner); 8115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /************************************************************************************************/ 81223000a016292019e74a9afbd65aa95c669c1c4b94James Dong else if (event == EMMCodecBufferNotProcessed) { 8123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "EMMCodecBufferNotProcessed\n"); 8124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((OMX_U32)argsCb [0] == EMMCodecOuputBuffer) { 8125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE* pBuffHead = NULL; 8126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_BUFFER_PRIVATE* pBuffPriv = NULL; 8127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8* pBuffer; 8128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->eState != OMX_StateLoaded && pComponentPrivate->eState != OMX_StateIdle) { 8130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead = (OMX_BUFFERHEADERTYPE*)argsCb[7]; 8131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBuffHead != NULL) 8132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 8133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffPriv = (VIDDEC_BUFFER_PRIVATE*)pBuffHead->pOutputPortPrivate; 8134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffPriv != NULL) { 8135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBuffPriv->eBufferOwner != VIDDEC_BUFFER_WITH_CLIENT) 8136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 8137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 8138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->lcml_nCntOpReceived++; 8139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->lcml_nCntOpReceived == 4) { 8140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp, 8141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_BoundaryStart | PERF_BoundarySteadyState); 8142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 8144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffer = (OMX_U8*)argsCb[1]; 8145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Retrieve time stamp information */ 8146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->ProcessMode == 0) { 8147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PTR pBufferFlags; 8148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_CircBuf_Remove(pComponentPrivate, 8149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_CBUFFER_TIMESTAMP, 8150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_INPUT_PORT, 8151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin &pBufferFlags); 8152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBufferFlags != NULL){ 8153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nTimeStamp = (OMX_TICKS)((VIDDEC_CBUFFER_BUFFERFLAGS*)pBufferFlags)->nTimeStamp; 8154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*pBuffHead->nFlags = 0; 8155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags = (OMX_U32)((VIDDEC_CBUFFER_BUFFERFLAGS*)pBufferFlags)->nFlags;*/ 8156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= (((OMX_U32)((VIDDEC_CBUFFER_BUFFERFLAGS*)pBufferFlags)->nFlags) & OMX_BUFFERFLAG_DECODEONLY); 8157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nTickCount = (OMX_U32)((VIDDEC_CBUFFER_BUFFERFLAGS*)pBufferFlags)->nTickCount; 8158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 8160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nTimeStamp = 0; 8161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nTickCount = 0; 8162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 8165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffHead->nFilledLen != 0){ 8166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nTimeStamp = (OMX_TICKS)pComponentPrivate->arrBufIndex[pComponentPrivate->nOutBufIndex]; 8167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nOutBufIndex++; 8168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nOutBufIndex %= VIDDEC_MAX_QUEUE_SIZE; 8169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "pBuffHead->nTimeStamp %lld\n", pBuffHead->nTimeStamp); 8172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBuffHead != NULL){ 8173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*if (pComponentPrivate->pCompPort[1]->hTunnelComponent != NULL) { 8174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen = (OMX_S32)argsCb[2]; 8175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else {*/ 8177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen = (OMX_S32)argsCb[8]; 8178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*}*/ 8179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "pBuffHead->nFilledLen %lu\n", pBuffHead->nFilledLen); 8180b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = IncrementCount (&(pComponentPrivate->nCountOutputBFromDsp), &(pComponentPrivate->mutexOutputBFromDSP)); 8181b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (eError != OMX_ErrorNone) { 8182b65f253fdc60f6208a54911bee793d225f23cdf8James Dong return eError; 8183b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 8184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferPrivate = (VIDDEC_BUFFER_PRIVATE* )pBuffHead->pOutputPortPrivate; 8185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferPrivate->eBufferOwner = VIDDEC_BUFFER_WITH_COMPONENT; 8186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "eBufferOwner 0x%x\n", pBufferPrivate->eBufferOwner); 8187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 8188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ReceivedFrame(pComponentPrivate->pPERFcomp, 8189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pBuffer, 8190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen, 8191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleCommonLayer); 8192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 8193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 8194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nRetVal = write(pComponentPrivate->filled_outBuf_Q[1],&pBuffHead,sizeof(pBuffHead)); 8195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(nRetVal == -1){ 8196b65f253fdc60f6208a54911bee793d225f23cdf8James Dong DecrementCount (&(pComponentPrivate->nCountOutputBFromDsp), &(pComponentPrivate->mutexOutputBFromDSP)); 8197b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufferPrivate->eBufferOwner = VIDDEC_BUFFER_WITH_DSP; 8198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM4(pComponentPrivate->dbg, "writing to the input pipe %x (%lu)\n", OMX_ErrorInsufficientResources,nRetVal); 8199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 8200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 8201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 8202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorInsufficientResources, 8203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 8204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Error writing to the output pipe"); 8205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 8209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "buffer dropped lcml out process pBuffHead %p owner %d\n",pBuffHead,pBuffPriv->eBufferOwner); 8210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ((OMX_U32)argsCb [0] == EMMCodecInputBuffer || 8216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((OMX_U32)argsCb [0] == EMMCodecInputBufferMapBufLen)) { 8217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE* pBuffHead = NULL; 8218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_BUFFER_PRIVATE* pBuffPriv = NULL; 8219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8* pBuffer; 8220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->eState != OMX_StateLoaded && pComponentPrivate->eState != OMX_StateIdle) { 8221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead = (OMX_BUFFERHEADERTYPE*)argsCb[7]; 8222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBuffHead != NULL) 8223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 8224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffPriv = (VIDDEC_BUFFER_PRIVATE*)pBuffHead->pInputPortPrivate; 8225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffPriv == NULL ) { 8226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 8227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 8229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBuffPriv->eBufferOwner != VIDDEC_BUFFER_WITH_CLIENT) 8230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 8231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "pBuffHead Input 0x%p pBuffer 0x%p\n", pBuffHead, argsCb[1]); 8232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffer = (OMX_U8*)argsCb[1]; 8233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBuffer != NULL){ 8234b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = IncrementCount (&(pComponentPrivate->nCountInputBFromDsp), &(pComponentPrivate->mutexInputBFromDSP)); 8235b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (eError != OMX_ErrorNone) { 8236b65f253fdc60f6208a54911bee793d225f23cdf8James Dong return eError; 8237b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 8238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferPrivate = (VIDDEC_BUFFER_PRIVATE* )pBuffHead->pInputPortPrivate; 8239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferPrivate->eBufferOwner = VIDDEC_BUFFER_WITH_COMPONENT; 8240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "eBufferOwner 0x%x\n", pBufferPrivate->eBufferOwner); 8241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #ifdef __PERF_INSTRUMENTATION__ 8242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ReceivedFrame(pComponentPrivate->pPERFcomp, 8243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(pBuffHead,pBuffer), 8244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(pBuffHead,nFilledLen), 8245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleCommonLayer); 8246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #endif 8247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen = 0; 8248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nWMVFileType == VIDDEC_WMV_ELEMSTREAM && 8249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingWMV && 8250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->ProcessMode == 0) { 8251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* vc-1 fix */ 8252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_WMVPOINTERFIXED 8253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "restoring buffer pointer 0x%p >> pBuffer 0x%p\n", 8254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferPrivate->pTempBuffer, pBuffHead->pBuffer); 8255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pBuffer = pBufferPrivate->pTempBuffer; 8256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 8257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nOffset = VIDDEC_WMV_BUFFER_OFFSET; 8258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 8259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nRetVal = write(pComponentPrivate->free_inpBuf_Q[1], &pBuffHead, sizeof(pBuffHead)); 8261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(nRetVal == -1){ 8262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM4(pComponentPrivate->dbg, "writing to the input pipe %x (%lu)\n", OMX_ErrorInsufficientResources,nRetVal); 8263b65f253fdc60f6208a54911bee793d225f23cdf8James Dong DecrementCount (&(pComponentPrivate->nCountInputBFromDsp), &(pComponentPrivate->mutexInputBFromDSP)); 8264b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufferPrivate->eBufferOwner = VIDDEC_BUFFER_WITH_DSP; 8265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 8266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 8267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 8268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorInsufficientResources, 8269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 8270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Error writing to the output pipe"); 8271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 8275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "buffer dropped lcml in notprocess pBuffHead %p owner %d\n",pBuffHead,pBuffPriv->eBufferOwner); 8276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /************************************************************************************************/ 82833000a016292019e74a9afbd65aa95c669c1c4b94James Dong else if (event == EMMCodecDspError) { 8284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "EMMCodecDspError\n"); 8285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((argsCb[4] == (void *)NULL) && (argsCb[5] == (void*)NULL)) { 8286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "DSP MMU_Fault\n"); 8287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLCMLHalted = OMX_TRUE; 8288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->SendCommand( pComponentPrivate->pHandle, OMX_CommandStateSet, -2, 0); 8289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((int)argsCb[5] == IUALG_ERR_NOT_SUPPORTED) 8291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 8292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Algorithm error. Parameter not supported\n"); 8293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "argsCb5 = %p\n",argsCb[5]); 8294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "LCML_Callback: IUALG_ERR_NOT_SUPPORTED\n"); 8295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 8296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 8297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 8298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorInsufficientResources, 8299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorCritical, 8300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Error from the DSP"); 8301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 8302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((int)argsCb [0] == USN_DSPMSG_EVENT) { 8304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((int)argsCb [4] == USN_ERR_WARNING) { 8305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((int)argsCb [5] == IUALG_WARN_PLAYCOMPLETED) { 8306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "Received PLAYCOMPLETED\n"); 8307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 83093000a016292019e74a9afbd65aa95c669c1c4b94James Dong OMX_PRDSP4(pComponentPrivate->dbg, "Error from the DSP: argsCb[5]=%d.\n", (int)argsCb [5]); 8310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 8311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 8312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 8313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorHardware, 8314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorCritical, 8315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Error from the DSP"); 8316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 83193000a016292019e74a9afbd65aa95c669c1c4b94James Dong OMX_PRDSP4(pComponentPrivate->dbg, "Error from the DSP: argsCb[4]=%d.\n", (int)argsCb [4]); 8320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 8321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 8322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 8323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorHardware, 8324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorCritical, 8325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Error from the DSP"); 8326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 8327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 83303000a016292019e74a9afbd65aa95c669c1c4b94James Dong OMX_PRDSP4(pComponentPrivate->dbg, "LCML Halted: argsCb[0]=%d.\n", (int)argsCb [0]); 8331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLCMLHalted = OMX_TRUE; 8332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->SendCommand( pComponentPrivate->pHandle, OMX_CommandStateSet, -2, 0); 8333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 83363000a016292019e74a9afbd65aa95c669c1c4b94James Dong else if (event == EMMCodecInternalError || event == EMMCodecInitError) { 8337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "EMMCodecInternalError || EMMCodecInitError\n"); 8338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 8339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 8340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 8341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorHardware, 8342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorCritical, 8343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Error from the DSP"); 8344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 83453000a016292019e74a9afbd65aa95c669c1c4b94James Dong else if (event == EMMCodecStrmCtrlAck) { 8346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((int)argsCb [0] == USN_ERR_NONE) { 8347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "EMMCodecStrmCtrlAck\n"); 8348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_LOCK(pComponentPrivate->sMutex); 8349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_SIGNAL(pComponentPrivate->sMutex); 8350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 83513000a016292019e74a9afbd65aa95c669c1c4b94James Dong } else { 83523000a016292019e74a9afbd65aa95c669c1c4b94James Dong OMX_PRDSP4(pComponentPrivate->dbg, "EMMCodecStrmCtrlAck: argsCb[0]=%d\n", (int)argsCb [0]); 8353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 83543000a016292019e74a9afbd65aa95c669c1c4b94James Dong } else { 83553000a016292019e74a9afbd65aa95c669c1c4b94James Dong OMX_PRDSP4(pComponentPrivate->dbg, "Unknown event: %d\n", event); 8356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 8359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP0(pComponentPrivate->dbg, "---EXITING(0x%x)\n",eError); 8360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 8361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 8362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 8364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid VIDDEC_ResourceManagerCallback(RMPROXY_COMMANDDATATYPE cbData) 8365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 8366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*OMX_COMMANDTYPE Cmd = OMX_CommandStateSet; 8368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 state ; 8369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)cbData.hComponent;*/ 8370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_COMPONENT_PRIVATE *pCompPrivate = NULL; 8371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompPrivate = NULL; 8372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 8373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 8374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef ANDROID 8376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 8377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 8378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * VIDDEC_SaveBuffer() function will be use to copy a buffer at private space, to be used later by VIDDEC_CopyBuffer() 8379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 8380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param 8381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * pComponentPrivate Component private structure 8382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * pBuffHead Header of the buffer to be store 8383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 8384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_ErrorNone Success, ready to roll 8385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ErrorInsufficientResources Not enough memory to save first buffer 8386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 8387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 8388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_SaveBuffer(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, 8390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE* pBuffHead) 8391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 8392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 8393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "IN\n"); 8394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eFirstBuffer.bSaveFirstBuffer = OMX_TRUE; 8395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_MALLOC_STRUCT_SIZED(pComponentPrivate->eFirstBuffer.pFirstBufferSaved, OMX_U8, pBuffHead->nFilledLen, NULL); 8397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(pComponentPrivate->eFirstBuffer.pFirstBufferSaved, pBuffHead->pBuffer, pBuffHead->nFilledLen); 8398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eFirstBuffer.nFilledLen = pBuffHead->nFilledLen; 8400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 8402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "OUT\n"); 8403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 8404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 8405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 8409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 8410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * VIDDEC_CopyBuffer() function will insert an the begining of pBuffer the buffer stored using VIDDEC_SaveBuffer() 8411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * and update nFilledLen of the buffer header 8412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 8413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param 8414fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * pComponentPrivate Component private structure 8415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * pBuffHead Header of the buffer to be store 8416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 8417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_ErrorNone Success, ready to roll 8418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ErrorUndefined No buffer to be copy. 8419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ErrorInsufficientResources Not enough memory to save buffer 8420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 8421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 8422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_CopyBuffer(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, 8424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE* pBuffHead) 8425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 8426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "IN\n"); 8427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 8428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->eFirstBuffer.bSaveFirstBuffer == OMX_FALSE) { 8429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUndefined; 8430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 8431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "pBuffer=%p\n", pBuffHead->pBuffer); 8433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PTR pTemp = NULL; 8434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eFirstBuffer.bSaveFirstBuffer = OMX_FALSE; 8435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 8436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* only if NAL-bitstream format in frame mode */ 8437b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if ( 8438b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ((pComponentPrivate->ProcessMode == 0 && pComponentPrivate->H264BitStreamFormat > 0) 8439b65f253fdc60f6208a54911bee793d225f23cdf8James Dong || (pBuffHead->nFilledLen > pComponentPrivate->eFirstBuffer.nFilledLen)) 8440b65f253fdc60f6208a54911bee793d225f23cdf8James Dong && (pBuffHead->nAllocLen >= pComponentPrivate->eFirstBuffer.nFilledLen + pBuffHead->nFilledLen) 8441b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ) { 8442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_MALLOC_STRUCT_SIZED(pTemp, OMX_U8, pBuffHead->nFilledLen, NULL); 8443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(pTemp, pBuffHead->pBuffer, pBuffHead->nFilledLen); /*copy somewere actual buffer*/ 8444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(pBuffHead->pBuffer, pComponentPrivate->eFirstBuffer.pFirstBufferSaved, pComponentPrivate->eFirstBuffer.nFilledLen); /*copy first buffer to the beganing of pBuffer.*/ 8445b65f253fdc60f6208a54911bee793d225f23cdf8James Dong memcpy((OMX_U8 *)pBuffHead->pBuffer+pComponentPrivate->eFirstBuffer.nFilledLen, pTemp, pBuffHead->nFilledLen); /* copy back actual buffer after first buffer*/ 8446b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBuffHead->nFilledLen += pComponentPrivate->eFirstBuffer.nFilledLen; /*Add first buffer size*/ 8447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin free(pTemp); 8449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin free(pComponentPrivate->eFirstBuffer.pFirstBufferSaved); 8450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eFirstBuffer.pFirstBufferSaved = NULL; 8451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*The first buffer has more information than the second, so the first buffer will be send to codec*/ 8453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*We are loosing the second fame. TODO: Fix this*/ 8454b65f253fdc60f6208a54911bee793d225f23cdf8James Dong else if (pBuffHead->nAllocLen >= pComponentPrivate->eFirstBuffer.nFilledLen){ 8455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*copy first buffer data to the actual buffer*/ 8456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memcpy(pBuffHead->pBuffer, pComponentPrivate->eFirstBuffer.pFirstBufferSaved, pComponentPrivate->eFirstBuffer.nFilledLen); /*copy first buffer*/ 8457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBuffHead->nFilledLen = pComponentPrivate->eFirstBuffer.nFilledLen; /*Update buffer size*/ 8458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin free(pComponentPrivate->eFirstBuffer.pFirstBufferSaved); 8459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->eFirstBuffer.pFirstBufferSaved = NULL; 8460b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } else { 8461b65f253fdc60f6208a54911bee793d225f23cdf8James Dong LOGE("Not enough memory in the buffer to concatenate the 2 frames, loosing first frame\n"); 8462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 8463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 8464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "OUT\n"); 8465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 8466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 8467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 8468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 8471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 8472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * VIDDEC_LoadCodec() function will get LCML resource and start the codec. 8473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 8474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param 8475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * pComponentPrivate Component private structure 8476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 8477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_ErrorNone Success, ready to roll 8478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ErrorUndefined 8479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ErrorInsufficientResources Not enough memory 8480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 8481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 8482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_LoadCodec(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate) 8484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 8485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorUndefined; 8486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 message[4]; 8487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE *pLcmlHandle = NULL; 8488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_HANDLETYPE hLCML = NULL; 8489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin void* p = NULL; 8490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 8491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin typedef OMX_ERRORTYPE (*LPFNDLLFUNC1)(OMX_HANDLETYPE); 8492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin HINSTANCE hDLL; 8493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LPFNDLLFUNC1 fpGetHandle1; 8494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 8495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_fpo fpGetHandle; 8496b65f253fdc60f6208a54911bee793d225f23cdf8James Dong char* error; 8497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 8498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 8500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pModLCML = dlopen("libLCML.so", RTLD_LAZY); 8501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!pComponentPrivate->pModLCML) { 8502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "OMX_ErrorBadParameter\n"); 8503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fputs(dlerror(), stderr); 8504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 8505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 8506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fpGetHandle = dlsym(pComponentPrivate->pModLCML, "GetHandle"); 8508b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if ((error = dlerror()) != NULL) { 8509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "OMX_ErrorBadParameter\n"); 8510b65f253fdc60f6208a54911bee793d225f23cdf8James Dong fputs(error, stderr); 8511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dlclose(pComponentPrivate->pModLCML); 8512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pModLCML = NULL; 8513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 8514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 8515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = (*fpGetHandle)(&hLCML); 8517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 8518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "OMX_ErrorBadParameter\n"); 8519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dlclose(pComponentPrivate->pModLCML); 8520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pModLCML = NULL; 8521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 8522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 8523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 8526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState = VidDec_LCML_State_Load; 8528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "LCML Handler 0x%p\n",hLCML); 8529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*(LCML_DSP_INTERFACE*)pComponentPrivate->pLCML = (LCML_DSP_INTERFACE*)hLCML;*/ 8530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML = (LCML_DSP_INTERFACE*)hLCML; 8531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML->pComponentPrivate = pComponentPrivate; 8532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 8535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->lcml_nCntOpReceived = 0; 8536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 8537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 8538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 8539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLCMLOut = OMX_TRUE; 8540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 8541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingAVC) { 8542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = VIDDEC_InitDSP_H264Dec(pComponentPrivate); 8543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG4 || 8545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingH263) { 8546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = VIDDEC_InitDSP_Mpeg4Dec(pComponentPrivate); 8547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG2) { 8549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = VIDDEC_InitDSP_Mpeg2Dec(pComponentPrivate); 8550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingWMV) { 8552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = VIDDEC_InitDSP_WMVDec(pComponentPrivate); 8553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_SPARK_CODE 8555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (VIDDEC_SPARKCHECK) { 8556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = VIDDEC_InitDSP_SparkDec(pComponentPrivate); 8557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 8559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 8560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "OMX_ErrorUnsupportedSetting\n"); 8561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUnsupportedSetting; 8562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 8563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 8564fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 8565fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorUnsupportedSetting, 8566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 8567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "DSP Initialization"); 8568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 8569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8570226b319400d0f1985e6d83c81c509dd379788018Masaki Sato if (eError != OMX_ErrorNone){ 8571226b319400d0f1985e6d83c81c509dd379788018Masaki Sato OMX_PRDSP4(pComponentPrivate->dbg, "LCML Error %x\n", pComponentPrivate->eState); 8572226b319400d0f1985e6d83c81c509dd379788018Masaki Sato pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 8573226b319400d0f1985e6d83c81c509dd379788018Masaki Sato pComponentPrivate->pHandle->pApplicationPrivate, 8574226b319400d0f1985e6d83c81c509dd379788018Masaki Sato OMX_EventError, 8575226b319400d0f1985e6d83c81c509dd379788018Masaki Sato eError, 8576226b319400d0f1985e6d83c81c509dd379788018Masaki Sato OMX_TI_ErrorSevere, 8577226b319400d0f1985e6d83c81c509dd379788018Masaki Sato "DSP Initialization"); 8578226b319400d0f1985e6d83c81c509dd379788018Masaki Sato goto EXIT; 8579226b319400d0f1985e6d83c81c509dd379788018Masaki Sato } 8580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #ifndef UNDER_CE 8581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLCMLOut = OMX_FALSE; 8582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 8583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLCMLHalted = OMX_FALSE; 8584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLCML; 8585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState = VidDec_LCML_State_Init; 8586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "OUTPUT width=%lu height=%lu\n", pComponentPrivate->pOutPortDef->format.video.nFrameWidth, pComponentPrivate->pOutPortDef->format.video.nFrameHeight); 8588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "INPUT width=%lu height=%lu\n", pComponentPrivate->pInPortDef->format.video.nFrameWidth, pComponentPrivate->pInPortDef->format.video.nFrameHeight); 8589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*Enable EOS propagation at USN*/ 8591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->eLCMLState != VidDec_LCML_State_Unload && 8592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->eLCMLState != VidDec_LCML_State_Destroy && 8593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pLCML != NULL && 8594b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bLCMLHalted != OMX_TRUE){ 8595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "LCML_ControlCodec called EMMCodecControlUsnEos 0x%p\n",pLcmlHandle); 8596b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,EMMCodecControlUsnEos, NULL); 8597b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 8598b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "error in EMMCodecControlUsnEos %x\n",eError); 8599b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 8600b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 8601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 8602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 8603b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorHardware, 8604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_TI_ErrorSevere, 8605b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin "LCML_ControlCodec EMMCodecControlUsnEos function"); 8606b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "OMX_ErrorHardware 0x%x\n",eError); 8607b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 8608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 8611b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat != OMX_VIDEO_CodingWMV) { 8612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingAVC) { 8613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin message[1] = 4; 8614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 8616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin message[1] = 100; 8617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin message[0] = 0x400; 8619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin message[2] = 0; 8620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin p = (void*)&message; 8621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_LOCK(pComponentPrivate->sMutex); 8622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "LCML_ControlCodec called EMMCodecControlSendDspMessage 0x%p\n",pLcmlHandle); 8623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,EMMCodecControlSendDspMessage, (void *)p); 8624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 8625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "error in EMMCodecControlSendDspMessage %x\n",eError); 8626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 8627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 8628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 8629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 8630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorHardware, 8631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 8632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "LCML_ControlCodec function"); 8633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "OMX_ErrorHardware 0x%x\n",eError); 8634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 8635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 8636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_WAIT(pComponentPrivate->sMutex); 8638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 8639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 8640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLCML; 8642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsPaused = 0; 8643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFirstBuffer = 1; 8644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "LCML_ControlCodec called EMMCodecControlStart 0x%p\n",pLcmlHandle); 8646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,EMMCodecControlStart,NULL); 8647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 8648fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 8649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 8650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 8651fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 8652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorHardware, 8653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 8654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "LCML_ControlCodec Start"); 8655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 8656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Occurred in Codec Start... 0x%x\n",eError); 8657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8658fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState = VidDec_LCML_State_Start; 8659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8660fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingAVC && 8661fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState == OMX_StateIdle) { 8662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin H264_Iualg_Cmd_SetStatus* pDynParams = NULL; 8663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char* pTmp = NULL; 8664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 cmdValues[3] = {0, 0, 0}; 8665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "Initializing DSP for h264 eCompressionFormat 0x%x\n", 8667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eCompressionFormat); 8668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_MALLOC_STRUCT_SIZED(pDynParams, H264_Iualg_Cmd_SetStatus, sizeof(H264_Iualg_Cmd_SetStatus) + VIDDEC_PADDING_FULL,pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel4]); 8669fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pDynParams == NULL) { 8670fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TRACE4(pComponentPrivate->dbg, "Error: Malloc failed\n"); 8671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 8672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 8673fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8674fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memset(pDynParams, 0, sizeof(H264_Iualg_Cmd_SetStatus) + VIDDEC_PADDING_FULL); 8675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTmp = (char*)pDynParams; 8676fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTmp += VIDDEC_PADDING_HALF; 8677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams = (H264_Iualg_Cmd_SetStatus*)pTmp; 8678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_SN_R8_14 8679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->size = sizeof(H264_Iualg_Cmd_SetStatus); 8680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 8681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulDecodeHeader = 1; 8682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulDisplayWidth = 0; 8683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulFrameSkipMode = 0; 8684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulPPType = 0; 8685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmdValues[0] = IUALG_CMD_SETSTATUS; 8687fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmdValues[1] = (OMX_U32)(pDynParams); 8688fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmdValues[2] = sizeof(H264_Iualg_Cmd_SetStatus); 8689fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin p = (void*)&cmdValues; 8691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eLCMLState != VidDec_LCML_State_Unload && 8692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState != VidDec_LCML_State_Destroy && 8693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML != NULL && 8694fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLCMLHalted != OMX_TRUE){ 8695fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_LOCK(pComponentPrivate->sMutex); 8696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 8697fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EMMCodecControlAlgCtrl, 8698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void*)p); 8699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 8700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 8701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 8702d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato OMX_MEMFREE_STRUCT_DSPALIGN(pDynParams,H264_Iualg_Cmd_SetStatus); 8703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 8704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_WAIT(pComponentPrivate->sMutex); 8706fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 8707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8708d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato OMX_MEMFREE_STRUCT_DSPALIGN(pDynParams,H264_Iualg_Cmd_SetStatus); 8709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 8711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Codec AlgCtrl 0x%x\n",eError); 8712fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 8713fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG2 && 8716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eState == OMX_StateIdle) { 8717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin MP2VDEC_UALGDynamicParams* pDynParams = NULL; 8718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char* pTmp = NULL; 8719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 cmdValues[3] = {0, 0, 0}; 8720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "Initializing DSP for wmv9 eCompressionFormat 0x%x\n", 8722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eCompressionFormat); 8723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_MALLOC_STRUCT_SIZED(pDynParams, MP2VDEC_UALGDynamicParams, sizeof(MP2VDEC_UALGDynamicParams) + VIDDEC_PADDING_FULL,pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel4]); 8724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memset(pDynParams, 0, sizeof(MP2VDEC_UALGDynamicParams) + VIDDEC_PADDING_FULL); 8725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTmp = (char*)pDynParams; 8726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTmp += VIDDEC_PADDING_HALF; 8727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams = (MP2VDEC_UALGDynamicParams*)pTmp; 8728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_SN_R8_14 8730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->size = sizeof(MP2VDEC_UALGDynamicParams); 8731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 8732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nDisplayWidth > 0) { 8733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pInPortDef->format.video.nFrameWidth > pComponentPrivate->nDisplayWidth) { 8734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nDisplayWidth = pComponentPrivate->pInPortDef->format.video.nFrameWidth; 8735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulDisplayWidth = (((pComponentPrivate->nDisplayWidth + 15) >> 4) << 4); 8737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nDisplayWidth != pDynParams->ulDisplayWidth ) { 8738fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nDisplayWidth = pDynParams->ulDisplayWidth; 8739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "warning Display Width adjusted to %lu\n",pDynParams->ulDisplayWidth); 8740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8741fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8742fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->pCompPort[1]->hTunnelComponent != NULL){ 8743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pInPortDef->format.video.nFrameWidth > pComponentPrivate->nDisplayWidth) { 8744fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nDisplayWidth = pComponentPrivate->pInPortDef->format.video.nFrameWidth; 8745fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulDisplayWidth = (((pComponentPrivate->nDisplayWidth + 15) >> 4) << 4); 8747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nDisplayWidth != pDynParams->ulDisplayWidth ) { 8748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nDisplayWidth = pDynParams->ulDisplayWidth; 8749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "warning Display Width adjusted to %lu\n",pDynParams->ulDisplayWidth); 8750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8752fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 8753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulDisplayWidth = 0; 8754fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8755fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulDecodeHeader = 0; 8756fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulFrameSkipMode = 0; 8757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulPPType = 0; 8758fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulPpNone = 0; 8759fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pOutPortDef->format.video.eColorFormat == VIDDEC_COLORFORMAT422) { 8760fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulDyna_chroma_format = MP2VIDDEC_YUVFORMAT_INTERLEAVED422; 8761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 8763fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulDyna_chroma_format = MP2VIDDEC_YUVFORMAT_PLANAR420; 8764fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8765fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8766fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmdValues[0] = IUALG_CMD_SETSTATUS; 8767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmdValues[1] = (OMX_U32)(pDynParams); 8768fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmdValues[2] = sizeof(MP2VDEC_UALGDynamicParams); 8769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bTransPause = 0; 8771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin p = (void*)&cmdValues; 8772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eLCMLState != VidDec_LCML_State_Unload && 8773fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState != VidDec_LCML_State_Destroy && 8774fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML != NULL && 8775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLCMLHalted != OMX_TRUE){ 8776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 8777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EMMCodecControlAlgCtrl, 8778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void*)p); 8779fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone){ 8780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 8781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 8782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 8783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 8784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 8785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0x0, 8786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "LCML_ControlCodec function"); 8787d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato OMX_MEMFREE_STRUCT_DSPALIGN(pDynParams,MP2VDEC_UALGDynamicParams); 8788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 8789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while(1) { 8791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->bTransPause != 0) { 8792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bTransPause = 0; 8793fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 8794fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8795fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_WAIT_CODE(); 8796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8798fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8799d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato OMX_MEMFREE_STRUCT_DSPALIGN(pDynParams,MP2VDEC_UALGDynamicParams); 8800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 8802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Codec AlgCtrl 0x%x\n",eError); 8803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 8804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8805fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8806fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_SPARK_CODE 8807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (VIDDEC_SPARKCHECK) { 8808fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eState == OMX_StateIdle) { 8809fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin SPARKVDEC_UALGDynamicParams* pDynParams = NULL; 8810fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char* pTmp = NULL; 8811fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 cmdValues[3] = {0, 0, 0}; 8812fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8813fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "Initializing DSP for mpeg4 and h263 eCompressionFormat 0x%x\n", 8814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eCompressionFormat); 8815fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_MALLOC_STRUCT_SIZED(pDynParams, SPARKVDEC_UALGDynamicParams, sizeof(SPARKVDEC_UALGDynamicParams) + VIDDEC_PADDING_FULL,pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel4]); 8816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pDynParams == NULL) { 8817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TRACE4(pComponentPrivate->dbg, "Error: Malloc failed\n"); 8818fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 8819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 8820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memset(pDynParams, 0, sizeof(SPARKVDEC_UALGDynamicParams) + VIDDEC_PADDING_FULL); 8822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTmp = (char*)pDynParams; 8823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTmp += VIDDEC_PADDING_HALF; 8824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams = (SPARKVDEC_UALGDynamicParams*)pTmp; 8825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_SN_R8_14 8826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->size = sizeof(SPARKVDEC_UALGDynamicParams); 8827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 8828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulDecodeHeader = 0; 8829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulDisplayWidth = 0; 8830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulFrameSkipMode = 0; 8831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulPPType = 0; 8832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmdValues[0] = IUALG_CMD_SETSTATUS; 8834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmdValues[1] = (OMX_U32)(pDynParams); 8835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmdValues[2] = sizeof(SPARKVDEC_UALGDynamicParams); 8836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*pComponentPrivate->bTransPause = 0;*//*flag to wait for the generated event*/ 8838fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_LOCK(pComponentPrivate->sMutex); 8839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin p = (void*)&cmdValues; 8840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eLCMLState != VidDec_LCML_State_Unload && 8841fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState != VidDec_LCML_State_Destroy && 8842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML != NULL && 8843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLCMLHalted != OMX_TRUE){ 8844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 8845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EMMCodecControlAlgCtrl, 8846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void*)p); 8847fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 8848b65f253fdc60f6208a54911bee793d225f23cdf8James Dong VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 8849fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 8850d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato OMX_MEMFREE_STRUCT_DSPALIGN (pDynParams,SPARKVDEC_UALGDynamicParams); 8851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 8852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_WAIT(pComponentPrivate->sMutex); 8854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 8855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8856fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8857d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato OMX_MEMFREE_STRUCT_DSPALIGN(pDynParams,SPARKVDEC_UALGDynamicParams); 8858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8859fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 8860fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Codec AlgCtrl 0x%x\n",eError); 8861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 8862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8863fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8865fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 8866fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 8867b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = VIDDEC_SetMpeg4_Parameters(pComponentPrivate); 8868b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (eError != OMX_ErrorNone){ 8869b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto EXIT; 8870fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8871fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8872fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8873fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 8874fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8875fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 8876fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 8877fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 8878fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8879fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8880fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8881fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 8882fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 8883fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * VIDDEC_UnloadCodec() function will stop & destroy the codec. LCML resource is also been freed. 8884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 8885fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param 8886fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * pComponentPrivate Component private structure 8887fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 8888fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 8889fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ErrorUndefined 8890fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ErrorInsufficientResources Not enough memory 8891fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 8892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 8893fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8894fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_UnloadCodec(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate) 8895fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 8896fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorUndefined; 8897fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE *pLcmlHandle = NULL; 8898fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "+++ENTERING\n"); 8899fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!(pComponentPrivate->eState == OMX_StateLoaded) && 8900fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin !(pComponentPrivate->eState == OMX_StateWaitForResources)) { 8901fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLCML; 8902fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->eState == OMX_StateExecuting) { 8903fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eLCMLState != VidDec_LCML_State_Unload && 8904fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState != VidDec_LCML_State_Destroy && 8905fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML != NULL && 8906fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLCMLHalted != OMX_TRUE) { 8907fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_LOCK(pComponentPrivate->sMutex); 8908fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "LCML_ControlCodec called MMCodecControlStop 0x%x\n",eError); 8909fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, MMCodecControlStop, NULL); 8910fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 8911fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Occurred in Codec Stop...\n"); 8912fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 8913fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 8914fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 8915fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 8916fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 8917fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorCritical, 8918fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 8919fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 8920fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 8921fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8923fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_WAIT(pComponentPrivate->sMutex); 8924fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 8925fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8926fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState = VidDec_LCML_State_Stop; 8927fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8928fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eLCMLState != VidDec_LCML_State_Unload && 8929fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML != NULL){ 8930fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, EMMCodecControlDestroy, NULL); 8931fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8932fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "LCML_ControlCodec called EMMCodecControlDestroy 0x%p\n",pLcmlHandle); 8933fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 8934fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Occurred in Codec Destroy...\n"); 8935fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 8936fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 8937fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 8938fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 8939fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 8940fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorCritical, 8941fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 8942fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "Incorrect State Transition 0x%x\n", eError); 8943fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 8944fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8945fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8946fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState = VidDec_LCML_State_Destroy; 8947fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "LCML_ControlCodec called EMMCodecControlDestroy 0x%p\n",pLcmlHandle); 8948fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 8950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->pModLCML != NULL){ 8951fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dlclose(pComponentPrivate->pModLCML); 8952fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pModLCML = NULL; 8953fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML = NULL; 8954fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState = VidDec_LCML_State_Unload; 8955fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 8957fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->pModLCML != NULL){ 8958fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin FreeLibrary(pComponentPrivate->pModLCML); 8959fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pModLCML = NULL; 8960fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML = NULL; 8961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState = VidDec_LCML_State_Unload; 8962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8963fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 8964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLCMLHalted = OMX_TRUE; 8966fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 8967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 8968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 8969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 8970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 8971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 8975fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 8976fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * VIDDEC_Set_SN_StreamType() Set stream type using dynamic parameters at the SN. 8977fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 8978fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param 8979fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * pComponentPrivate Component private structure 8980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 8981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 8982fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ErrorUndefined 8983fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ErrorInsufficientResources Not enough memory 8984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 8985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 8986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE VIDDEC_Set_SN_StreamType(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate) 8988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 8989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WMV9DEC_UALGDynamicParams* pDynParams = NULL; 8991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE* pLcmlHandle; 8992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char* pTmp = NULL; 8993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 cmdValues[3] = {0, 0, 0}; 8994fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin void* p = NULL; 8995fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorUndefined; 8996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 8997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "Initializing DSP for wmv9 eCompressionFormat 0x%x\n", 8998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eCompressionFormat); 8999fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 9000fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLCML; 9001fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_MALLOC_STRUCT_SIZED(pDynParams, WMV9DEC_UALGDynamicParams, sizeof(WMV9DEC_UALGDynamicParams) + VIDDEC_PADDING_FULL,pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel4]); 9002fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pDynParams == NULL) { 9003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TRACE4(pComponentPrivate->dbg, "Error: Malloc failed\n"); 9004fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 9005fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 9006fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 9007fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memset(pDynParams, 0, sizeof(WMV9DEC_UALGDynamicParams) + VIDDEC_PADDING_FULL); 9008fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTmp = (char*)pDynParams; 9009fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTmp += VIDDEC_PADDING_HALF; 9010fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams = (WMV9DEC_UALGDynamicParams*)pTmp; 9011fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 9012fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->size = sizeof(WMV9DEC_UALGDynamicParams); 9013fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulDecodeHeader = 0; 9014fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulDisplayWidth = 0; 9015fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulFrameSkipMode = 0; 9016fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulPPType = 0; 9017fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 9018fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nWMVFileType == VIDDEC_WMV_ELEMSTREAM) { 9019fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->usIsElementaryStream = VIDDEC_SN_WMV_ELEMSTREAM; 9020fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 9021fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 9022fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->usIsElementaryStream = VIDDEC_SN_WMV_RCVSTREAM; 9023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 9024fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 9025fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmdValues[0] = IUALG_CMD_SETSTATUS; /* add #define IUALG_CMD_SETSTATUS 3 */ 9026fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmdValues[1] = (OMX_U32)(pDynParams); 9027fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmdValues[2] = sizeof(WMV9DEC_UALGDynamicParams); 9028fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 9029fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin p = (void*)&cmdValues; 9030fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eLCMLState != VidDec_LCML_State_Unload && 9031fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState != VidDec_LCML_State_Destroy && 9032fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML != NULL && 9033fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLCMLHalted != OMX_TRUE){ 9034fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_LOCK(pComponentPrivate->sMutex); 9035fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "Sending Control coded command EMMCodecControlAlgCtrl\n"); 9036fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 9037fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EMMCodecControlAlgCtrl, 9038fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void*)p); 9039fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone){ 9040fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 9041fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 9042fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 9043fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 9044fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 9045fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 9046fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "LCML_ControlCodec function"); 9047fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 9048d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato OMX_MEMFREE_STRUCT_DSPALIGN(pDynParams,WMV9DEC_UALGDynamicParams); 9049fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 9050fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 9051fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_WAIT(pComponentPrivate->sMutex); 9052fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 9053fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*This flag is set to TRUE in the LCML callback from EMMCodecControlAlgCtrl 9054fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * this is not the case were we need it*/ 9055fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bTransPause = OMX_FALSE; 9056fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 9057fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 9058d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato OMX_MEMFREE_STRUCT_DSPALIGN(pDynParams,WMV9DEC_UALGDynamicParams); 9059fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 9060fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Codec AlgCtrl 0x%x\n",eError); 9061fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 9062fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 9063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 9064fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 9065fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 9066fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 9067fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 9068fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 9069fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 9070fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 9071b65f253fdc60f6208a54911bee793d225f23cdf8James Dong * VIDDEC_SetMpeg4_Parameters() Enable Deblocking filter 9072fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 9073fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param 9074fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * pComponentPrivate Component private structure 9075fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 9076fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 9077fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ErrorUndefined 9078fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ErrorInsufficientResources Not enough memory 9079fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 9080fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 9081fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 9082b65f253fdc60f6208a54911bee793d225f23cdf8James DongOMX_ERRORTYPE VIDDEC_SetMpeg4_Parameters(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate) 9083fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 9084fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin MP4VDEC_UALGDynamicParams* pDynParams = NULL; 9085fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE* pLcmlHandle = NULL; 9086fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char* pTmp = NULL; 9087fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 cmdValues[3] = {0, 0, 0}; 9088fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin void* p = NULL; 9089b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin char value[PROPERTY_VALUE_MAX]; 9090b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin static int mDisableDeblockingIfD1 = 0; 9091b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_BOOL bDisDeblocking = OMX_FALSE; 9092fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorUndefined; 9093fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 9094b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin property_get("deblocking.video.disableIfD1", value, "0"); 9095b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin mDisableDeblockingIfD1 = atoi(value); 9096b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LOGD_IF(mDisableDeblockingIfD1, "Disabling deblocking if D1 resolution"); 9097b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 9098fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg,"Initializing DSP for mpeg4 and h263 eCompressionFormat 0x%x\n", 9099fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInPortDef->format.video.eCompressionFormat); 9100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLCML; 9101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_MALLOC_STRUCT_SIZED(pDynParams, MP4VDEC_UALGDynamicParams, sizeof(MP4VDEC_UALGDynamicParams) + VIDDEC_PADDING_FULL,pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel4]); 9102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pDynParams == NULL) { 9103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TRACE4(pComponentPrivate->dbg, "Error: Malloc failed\n"); 9104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 9105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 9106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 9107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memset(pDynParams, 0, sizeof(MP4VDEC_UALGDynamicParams) + VIDDEC_PADDING_FULL); 9108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTmp = (char*)pDynParams; 9109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTmp += VIDDEC_PADDING_HALF; 9110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams = (MP4VDEC_UALGDynamicParams*)pTmp; 9111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef VIDDEC_SN_R8_14 9112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->size = sizeof(MP4VDEC_UALGDynamicParams); 9113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 9114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulDecodeHeader = 0; 9115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulDisplayWidth = 0; 9116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulFrameSkipMode = 0; 9117b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pDynParams->useHighPrecIdctQp1 = 0; 9118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 9119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 9120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(mDisableDeblockingIfD1){ 9121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Disable if resolution higher than D1 NTSC (720x480) */ 9122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->pOutPortDef->format.video.nFrameWidth > 480 || 9123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutPortDef->format.video.nFrameHeight > 480){ 9124e074e61deca17dd3ffc4e431f30464943d225fe0Benny Wong bDisDeblocking = OMX_TRUE; 9125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LOGD("D1 or higher resolution: Disable Deblocking!!"); 9126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 9127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 9128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 9129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->pDeblockingParamType->bDeblocking && bDisDeblocking == OMX_FALSE){ 9130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulPPType = 1; /* Enable deblocking filter*/ 9131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 9132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else{ 9133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDynParams->ulPPType = 0; /* Disable */ 9134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 9135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 9136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmdValues[0] = IUALG_CMD_SETSTATUS; 9137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmdValues[1] = (OMX_U32)(pDynParams); 9138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmdValues[2] = sizeof(MP4VDEC_UALGDynamicParams); 9139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 9140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin p = (void*)&cmdValues; 9141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->eLCMLState != VidDec_LCML_State_Unload && 9142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->eLCMLState != VidDec_LCML_State_Destroy && 9143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML != NULL && 9144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLCMLHalted != OMX_TRUE){ 9145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 9146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_LOCK(pComponentPrivate->sMutex); 9147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 9148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EMMCodecControlAlgCtrl, 9149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void*)p); 9150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 9151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 9152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 9153d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato OMX_MEMFREE_STRUCT_DSPALIGN(pDynParams,MP4VDEC_UALGDynamicParams); 9154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 9155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 9156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_WAIT(pComponentPrivate->sMutex); 9157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin VIDDEC_PTHREAD_MUTEX_UNLOCK(pComponentPrivate->sMutex); 9158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*This flag is set to TRUE in the LCML callback from EMMCodecControlAlgCtrl 9159b65f253fdc60f6208a54911bee793d225f23cdf8James Dong * this is not the case were we need it*/ 9160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bTransPause = OMX_FALSE; 9161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 9162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 9163d5cf09fb6e53cda5ce8796eb01230bfecdb917ffMasaki Sato OMX_MEMFREE_STRUCT_DSPALIGN(pDynParams,MP4VDEC_UALGDynamicParams); 9164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 9165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 9166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Codec AlgCtrl 0x%x\n",eError); 9167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 9168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 9169b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 9170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 9171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 9172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 9173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 91741348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny WongOMX_ERRORTYPE AddStateTransition(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate) { 91751348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong 91761348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong OMX_ERRORTYPE eError = OMX_ErrorNone; 91771348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong 91781348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong if(pthread_mutex_lock(&pComponentPrivate->mutexStateChangeRequest)) { 91791348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong return OMX_ErrorUndefined; 91801348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong } 91811348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong 91821348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong /* Increment state change request reference count */ 91831348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong pComponentPrivate->nPendingStateChangeRequests++; 91841348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong 91851348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong if(pthread_mutex_unlock(&pComponentPrivate->mutexStateChangeRequest)) { 91861348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong return OMX_ErrorUndefined; 91871348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong } 91881348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong 91891348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong return eError; 91901348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong} 91911348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong 91921348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny WongOMX_ERRORTYPE RemoveStateTransition(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, OMX_BOOL bEnableSignal) { 91931348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong OMX_ERRORTYPE eError = OMX_ErrorNone; 91941348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong 91951348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong /* Decrement state change request reference count*/ 91961348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong if(pthread_mutex_lock(&pComponentPrivate->mutexStateChangeRequest)) { 91971348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong return OMX_ErrorUndefined; 91981348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong } 91991348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong 92001348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong pComponentPrivate->nPendingStateChangeRequests--; 92011348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong 92021348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong /* If there are no more pending requests, signal the thread waiting on this*/ 92031348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong if(!pComponentPrivate->nPendingStateChangeRequests && bEnableSignal) { 92041348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong pthread_cond_signal(&(pComponentPrivate->StateChangeCondition)); 92051348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong } 92061348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong 92071348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong if(pthread_mutex_unlock(&pComponentPrivate->mutexStateChangeRequest)) { 92081348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong return OMX_ErrorUndefined; 92091348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong } 92101348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong 92111348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong return eError; 92121348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong} 92131348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong 9214b65f253fdc60f6208a54911bee793d225f23cdf8James DongOMX_ERRORTYPE IncrementCount (OMX_U8 * pCounter, pthread_mutex_t *pMutex) { 9215b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERRORTYPE eError = OMX_ErrorNone; 9216b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(pthread_mutex_lock(pMutex)) { 9217b65f253fdc60f6208a54911bee793d225f23cdf8James Dong return OMX_ErrorUndefined; 9218b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 9219b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (*pCounter)++; 9220b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(pthread_mutex_unlock(pMutex)) { 9221b65f253fdc60f6208a54911bee793d225f23cdf8James Dong return OMX_ErrorUndefined; 9222b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 9223b65f253fdc60f6208a54911bee793d225f23cdf8James Dong return eError; 9224b65f253fdc60f6208a54911bee793d225f23cdf8James Dong} 9225b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 9226b65f253fdc60f6208a54911bee793d225f23cdf8James DongOMX_ERRORTYPE DecrementCount (OMX_U8 * pCounter, pthread_mutex_t *pMutex) { 9227b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERRORTYPE eError = OMX_ErrorNone; 9228b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(pthread_mutex_lock(pMutex)) { 9229b65f253fdc60f6208a54911bee793d225f23cdf8James Dong return OMX_ErrorUndefined; 9230b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 9231b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (*pCounter)--; 9232b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(pthread_mutex_unlock(pMutex)) { 9233b65f253fdc60f6208a54911bee793d225f23cdf8James Dong return OMX_ErrorUndefined; 9234b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 9235b65f253fdc60f6208a54911bee793d225f23cdf8James Dong return eError; 9236b65f253fdc60f6208a54911bee793d225f23cdf8James Dong} 92371348a0db59d75e00b3e0f33678d06f6671a6d4d6Benny Wong 9238