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