1c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*
2c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Copyright (c) 2010, Texas Instruments Incorporated
3c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * All rights reserved.
4c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
5c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Redistribution and use in source and binary forms, with or without
6c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * modification, are permitted provided that the following conditions
7c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * are met:
8c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
9c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * *  Redistributions of source code must retain the above copyright
10c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *    notice, this list of conditions and the following disclaimer.
11c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
12c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * *  Redistributions in binary form must reproduce the above copyright
13c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *    notice, this list of conditions and the following disclaimer in the
14c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *    documentation and/or other materials provided with the distribution.
15c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
16c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * *  Neither the name of Texas Instruments Incorporated nor the names of
17c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *    its contributors may be used to endorse or promote products derived
18c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *    from this software without specific prior written permission.
19c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
20c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
32c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
33c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define COMPONENT_NAME "OMX.TI.DUCATI1.MISC.SAMPLE"	// needs to be specific for every configuration wrapper
34c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_SAMPLE_USEBUF OMX_TRUE
35c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
36c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/****************************************************************
37c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev*  INCLUDE FILES
38c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev****************************************************************/
39c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ----- system and platform files ----------------------------*/
40c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <stdint.h>
41c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <string.h>
42c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <stdlib.h>
43c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <stdio.h>
44c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
45c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
46c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*-------program files ----------------------------------------*/
47c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <OMX_Core.h>
48c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <OMX_Component.h>
49c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "timm_osal_interfaces.h"
50c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
51c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
52c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_SAMPLE_TILER_TEST
53c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
54c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef OMX_SAMPLE_TILER_TEST
55c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
56c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "memmgr.h"
57c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
58c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
59c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
60c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
61c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_SAMPLE_INPUT_PORT 0
62c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_SAMPLE_OUTPUT_PORT 1
63c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
64c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef OMX_SAMPLE_TILER_TEST
65c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
66c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
67c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_SAMPLE_IN_2DYHEIGHT 4
68c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_SAMPLE_IN_2DYWIDTH 8
69c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_SAMPLE_IN_2DUVHEIGHT 2
70c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_SAMPLE_IN_2DUVWIDTH 4
71c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*
72c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev #define STRIDE_8BIT (16 * 1024)
73c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev #define STRIDE_16BIT (32 * 1024)
74c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev*/
75c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_SAMPLE_IN_HEIGHT 6
76c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_SAMPLE_IN_WIDTH 8
77c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
78c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define STRIDE_LINUX (4 * 1024)
79c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
80c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_SAMPLE_BUFFER_SIZE 48
81c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
82c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
83c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid Test_Util_Memcpy_1Dto2D(TIMM_OSAL_PTR pDst2D, TIMM_OSAL_PTR pSrc1D,
84c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    TIMM_OSAL_U32 nSize1D, TIMM_OSAL_U32 nHeight2D, TIMM_OSAL_U32 nWidth2D,
85c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    TIMM_OSAL_U32 nStride2D)
86c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
87c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	TIMM_OSAL_U8 *pInBuffer;
88c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	TIMM_OSAL_U8 *pOutBuffer;
89c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	TIMM_OSAL_U32 nSizeLeft, i;
90c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
91c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	nSizeLeft = nSize1D;
92c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pInBuffer = (TIMM_OSAL_U8 *) pSrc1D;
93c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pOutBuffer = (TIMM_OSAL_U8 *) pDst2D;
94c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	//The lower limit is copied. If nSize1D < H*W then 1Dsize is copied else H*W is copied
95c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	for (i = 0; i < nHeight2D; i++)
96c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
97c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (nSizeLeft >= nWidth2D)
98c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
99c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			TIMM_OSAL_Memcpy(pOutBuffer, pInBuffer, nWidth2D);
100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		} else
101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			TIMM_OSAL_Memcpy(pOutBuffer, pInBuffer, nSizeLeft);
103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			break;
104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		nSizeLeft -= nWidth2D;
106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pInBuffer =
107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    (TIMM_OSAL_U8 *) ((TIMM_OSAL_U32) pInBuffer + nWidth2D);
108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pOutBuffer =
109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    (TIMM_OSAL_U8 *) ((TIMM_OSAL_U32) pOutBuffer + nStride2D);
110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/****************************************************************
117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev*  EXTERNAL REFERENCES NOTE : only use if not found in header file
118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev****************************************************************/
119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*--------data declarations -----------------------------------*/
120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*--------function prototypes ---------------------------------*/
121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/****************************************************************
123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev*  PRIVATE DECLARATIONS Defined and used only here
124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev****************************************************************/
125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*--------function declarations -------------------------------*/
126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
127c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*--------data declarations -----------------------------------*/
128c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define NUM_DOMAINS 0x4
129c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_NOPORT 0xfffffffe
130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev//#define INPUT_FILE "../../omx/omx_il_1_x/omx_base/test/patterns/chikita.mp3"
132c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define INPUT_FILE "sample_input.mp3"
133c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define NON_TUN_OUTPUT_FILE "nt_output.mp3"
134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic int gTest = 1;
136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define TIMM_OSAL_MallocaBuffer(_size, bContigous, nBlockAlignment) \
138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        TIMM_OSAL_Malloc (_size, TIMM_OSAL_TRUE, 0, TIMMOSAL_MEM_SEGMENT_EXT)
139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_TEST_BUFFERS_OF_TRAFFIC 20
141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_TEST_BAIL_IF_ERROR(_eError)		\
143c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if(OMX_ErrorNone != (eError = _eError)){	\
144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        goto OMX_TEST_BAIL;		\
145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_TEST_SET_ERROR_BAIL(_eCode, _desc)	\
148c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{						\
149c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    eError = _eCode;				\
150c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    printf(_desc);\
151c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    goto OMX_TEST_BAIL;			\
152c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
154c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_TEST_INIT_STRUCT(_s_, _name_)	\
155c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    memset(&(_s_), 0x0, sizeof(_name_));	\
156c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    (_s_).nSize = sizeof(_name_);		\
157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    (_s_).nVersion.s.nVersionMajor = 0x1;	\
158c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    (_s_).nVersion.s.nVersionMinor = 0x1;	\
159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    (_s_).nVersion.s.nRevision = 0x0;		\
160c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    (_s_).nVersion.s.nStep = 0x0
161c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define BUFFER_LIST_CLEAR_ENTRY(_pL, _pB)\
163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    _pB = _pL->pBufHdr;        \
164c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    _pL->pBufHdr = NULL;    \
165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    _pL = _pL->pNextBuf;
166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define BUFFER_LIST_SET_ENTRY(_pL, _pB)    \
168c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{                \
169c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    BufferList *_pT = _pL;    \
170c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    while(_pT && _pT->pBufHdr){    \
171c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        _pT = _pT->pNextBuf;    \
172c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }                \
173c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if(_pT)            \
174c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        _pT->pBufHdr = _pB;    \
175c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
176c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
177c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define BUFFERLIST_CLEAR_ENTRY(_pL, _pB)\
178c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    _pB = _pL->pBufHdr;        \
179c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    _pL->pBufHdr = NULL;    \
180c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    _pL = _pL->pNextBuf;
181c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
182c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevtypedef struct _BufferList BufferList;
183c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
184c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstruct _BufferList
185c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
186c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_BUFFERHEADERTYPE *pBufHdr;
187c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_BUFFERHEADERTYPE *pOrigBufHdr;
188c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	BufferList *pNextBuf;
189c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev};
190c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
191c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevtypedef struct SampleCompTestCtxt
192c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
193c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_HANDLETYPE hComp;
194c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_STATETYPE eState;
195c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U32 nPorts;
196c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_HANDLETYPE hStateSetEvent;
197c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_HANDLETYPE hPortDisableEvent;
198c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_HANDLETYPE hPortEnableEvent;
199c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_STRING inFilePath;
200c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_STRING outFilePath;
201c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	FILE *pOutputFile;
202c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	FILE *pInputfile;
203c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_BOOL bEOS;
204c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	BufferList *pInBufferList;
205c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	BufferList *pOutBufferList;
206c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_BOOL bClientAllocBuf;
207c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U32 nBufDoneCalls;
208c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_PORT_PARAM_TYPE sPortParam[NUM_DOMAINS];
209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} SampleCompTestCtxt;
210c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
211c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev//this test compiles only for ducati SYS
212c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevtypedef struct TestCtxt
213c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
214c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_HANDLETYPE hComp;
215c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_STATETYPE eState;
216c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U32 nPorts;
217c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_HANDLETYPE hStateSetEvent;
218c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_HANDLETYPE hPortDisableEvent;
219c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_HANDLETYPE hPortEnableEvent;
220c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_STRING inFilePath;
221c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_STRING outFilePath;
222c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	FILE *pOutputFile;
223c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	FILE *pInputfile;
224c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_BOOL bEOS;
225c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	BufferList *pInBufferList;
226c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	BufferList *pOutBufferList;
227c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_BOOL bClientAllocBuf;
228c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U32 nBufDoneCalls;
229c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	//OMX_PORT_PARAM_TYPE sPortParam[NUM_DOMAINS];
230c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} TestCtxt;
231c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
232c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
233c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_U32 nInBufCount = 0;
234c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_U32 nOutBufCount = 0;
235c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
236c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
237c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev//Semaphore_Handle EBDSem;
238c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev//Semaphore_Params EBDsemParams;
239c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
240c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev//Semaphore_Handle FBDSem;
241c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev//Semaphore_Params FBDsemParams;
242c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*========================================================*/
243c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* @ fn OMX_TEST_ErrorToString :: ERROR  to  STRING   */
244c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*========================================================*/
245c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_STRING OMX_TEST_ErrorToString(OMX_ERRORTYPE eError)
246c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
247c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
248c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_STRING errorString;
249c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
250c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	switch (eError)
251c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
252c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
253c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorNone:
254c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorNone";
255c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
256c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorInsufficientResources:
257c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorInsufficientResources";
258c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
259c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorUndefined:
260c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorUndefined";
261c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
262c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorInvalidComponentName:
263c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorInvalidComponentName";
264c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
265c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorComponentNotFound:
266c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorComponentNotFound";
267c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
268c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorInvalidComponent:
269c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorInvalidComponent";
270c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorBadParameter:
272c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorBadParameter";
273c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
274c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorNotImplemented:
275c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorNotImplemented";
276c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
277c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorUnderflow:
278c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorUnderflow";
279c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
280c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorOverflow:
281c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorOverflow";
282c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
283c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorHardware:
284c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorHardware";
285c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
286c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorInvalidState:
287c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorInvalidState";
288c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
289c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorStreamCorrupt:
290c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorStreamCorrupt";
291c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
292c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorPortsNotCompatible:
293c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorPortsNotCompatible";
294c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
295c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorResourcesLost:
296c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorResourcesLost";
297c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
298c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorNoMore:
299c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorNoMore";
300c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
301c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorVersionMismatch:
302c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorVersionMismatch";
303c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
304c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorNotReady:
305c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorNotReady";
306c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
307c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorTimeout:
308c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorTimeout";
309c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
310c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorSameState:
311c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorSameState";
312c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
313c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorResourcesPreempted:
314c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorResourcesPreempted";
315c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
316c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorPortUnresponsiveDuringAllocation:
317c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorPortUnresponsiveDuringAllocation";
318c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
319c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorPortUnresponsiveDuringDeallocation:
320c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorPortUnresponsiveDuringDeallocation";
321c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
322c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorPortUnresponsiveDuringStop:
323c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorPortUnresponsiveDuringStop";
324c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
325c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorIncorrectStateTransition:
326c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorIncorrectStateTransition";
327c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
328c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorIncorrectStateOperation:
329c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorIncorrectStateOperation";
330c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
331c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorUnsupportedSetting:
332c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorUnsupportedSetting";
333c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
334c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorUnsupportedIndex:
335c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorUnsupportedIndex";
336c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
337c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorBadPortIndex:
338c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorBadPortIndex";
339c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
340c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorPortUnpopulated:
341c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorPortUnpopulated";
342c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
343c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorComponentSuspended:
344c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorComponentSuspended";
345c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
346c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorDynamicResourcesUnavailable:
347c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorDynamicResourcesUnavailable";
348c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
349c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorMbErrorsInFrame:
350c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorMbErrorsInFrame";
351c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
352c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorFormatNotDetected:
353c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorFormatNotDetected";
354c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
355c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorContentPipeOpenFailed:
356c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorContentPipeOpenFailed";
357c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
358c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorContentPipeCreationFailed:
359c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorContentPipeCreationFailed";
360c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
361c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorSeperateTablesUsed:
362c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorSeperateTablesUsed";
363c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
364c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_ErrorTunnelingUnsupported:
365c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "ErrorTunnelingUnsupported";
366c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
367c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	default:
368c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		errorString = "<unknown>";
369c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
370c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
371c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return errorString;
372c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
373c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
374c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*========================================================*/
375c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* @ fn OMX_TEST_StateToString :: STATE  to  STRING   */
376c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*========================================================*/
377c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_STRING OMX_TEST_StateToString(OMX_STATETYPE eState)
378c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
379c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_STRING StateString;
380c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
381c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	switch (eState)
382c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
383c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_StateInvalid:
384c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		StateString = "Invalid";
385c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
386c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_StateLoaded:
387c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		StateString = "Loaded";
388c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
389c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_StateIdle:
390c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		StateString = "Idle";
391c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
392c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_StateExecuting:
393c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		StateString = "Executing";
394c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
395c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_StatePause:
396c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		StateString = "Pause";
397c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
398c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_StateWaitForResources:
399c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		StateString = "WaitForResources ";
400c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
401c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	default:
402c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		StateString = "<unknown>";
403c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
404c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
405c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
406c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return StateString;
407c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
408c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
409c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* Application callback Functions */
410c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*========================================================*/
411c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* @ fn SampleTest_EventHandler :: Application callback   */
412c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*========================================================*/
413c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE SampleTest_EventHandler(OMX_IN OMX_HANDLETYPE hComponent,
414c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_IN OMX_PTR pAppData,
415c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_IN OMX_EVENTTYPE eEvent,
416c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_IN OMX_U32 nData1, OMX_IN OMX_U32 nData2, OMX_IN OMX_PTR pEventData)
417c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
418c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	SampleCompTestCtxt *pContext;
419c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
420c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	printf("\n___________ ENTERED CLIENT CALLBACK:%s", __FUNCTION__);
421c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
422c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (pAppData == NULL)
423c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		return OMX_ErrorNone;
424c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
425c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pContext = (SampleCompTestCtxt *) pAppData;
426c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
427c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	switch (eEvent)
428c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
429c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_EventCmdComplete:
430c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		printf("\n OMX_EventCmdComplete case: \n");
431c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (OMX_CommandStateSet == nData1)
432c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
433c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			printf(" Component Transitioned to %s state \n",
434c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    OMX_TEST_StateToString((OMX_STATETYPE) nData2));
435c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pContext->eState = (OMX_STATETYPE) nData2;
436c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			TIMM_OSAL_SemaphoreRelease(pContext->hStateSetEvent);
437c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		} else if (OMX_CommandFlush == nData1)
438c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
439c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			/* Nothing to do over here */
440c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		} else if (OMX_CommandPortDisable == nData1)
441c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
442c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			/* Nothing to do over here */
443c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			TIMM_OSAL_SemaphoreRelease(pContext->
444c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    hPortDisableEvent);
445c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		} else if (OMX_CommandPortEnable == nData1)
446c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
447c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			/* Nothing to do over here */
448c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		} else if (OMX_CommandMarkBuffer == nData1)
449c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
450c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			/* Nothing to do over here */
451c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
452c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
453c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
454c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_EventError:
455c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		printf("\nOMX EVENT ERROR!!!!!! \n");
456c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
457c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
458c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_EventMark:
459c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
460c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
461c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_EventPortSettingsChanged:
462c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
463c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
464c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_EventBufferFlag:
465c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
466c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
467c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_EventResourcesAcquired:
468c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
469c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
470c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_EventComponentResumed:
471c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
472c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
473c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_EventDynamicResourcesAvailable:
474c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
475c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
476c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_EventPortFormatDetected:
477c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
478c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
479c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	default:
480c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
481c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
482c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
483c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	goto OMX_TEST_BAIL;
484c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      OMX_TEST_BAIL:
485c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return OMX_ErrorNone;
486c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
487c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
488c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*========================================================*/
489c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* @ fn SampleTest_EmptyBufferDone :: Application callback    */
490c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*========================================================*/
491c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE SampleTest_EmptyBufferDone(OMX_IN OMX_HANDLETYPE hComponent,
492c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_IN OMX_PTR pAppData, OMX_IN OMX_BUFFERHEADERTYPE * pBuffer)
493c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
494c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	SampleCompTestCtxt *pContext;
495c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
496c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	printf("\n___________ ENTERED CLIENT CALLBACK:%s", __FUNCTION__);
497c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
498c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (pAppData == NULL)
499c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		return OMX_ErrorNone;
500c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
501c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pContext = (SampleCompTestCtxt *) pAppData;
502c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pContext->nBufDoneCalls++;
503c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
504c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	BUFFER_LIST_SET_ENTRY(pContext->pInBufferList, pBuffer);
505c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	//Semaphore_post(EBDSem);
506c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
507c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	goto OMX_TEST_BAIL;
508c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      OMX_TEST_BAIL:
509c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	printf("\nEBD done\n");
510c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return OMX_ErrorNone;
511c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
512c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
513c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*========================================================*/
514c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* @ fn SampleTest_FillBufferDone ::   Application callback  */
515c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*========================================================*/
516c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE SampleTest_FillBufferDone(OMX_IN OMX_HANDLETYPE hComponent,
517c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_IN OMX_PTR pAppData, OMX_IN OMX_BUFFERHEADERTYPE * pBuffHeader)
518c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
519c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	SampleCompTestCtxt *pContext;
520c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
521c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	printf("\n___________ ENTERED CLIENT CALLBACK:%s", __FUNCTION__);
522c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
523c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (pAppData == NULL)
524c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		return OMX_ErrorNone;
525c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
526c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pContext = (SampleCompTestCtxt *) pAppData;
527c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pContext->nBufDoneCalls++;
528c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
529c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (pContext->pOutputFile && gTest)
530c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
531c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		printf(" writing to output file :: buffer cnt : %d\n",
532c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    nOutBufCount);
533c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		nOutBufCount++;
534c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		fwrite(pBuffHeader->pBuffer, 1, pBuffHeader->nFilledLen,
535c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    pContext->pOutputFile);
536c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
537c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
538c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	BUFFER_LIST_SET_ENTRY(pContext->pOutBufferList, pBuffHeader);
539c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	//Semaphore_post(FBDSem);
540c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
541c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	goto OMX_TEST_BAIL;
542c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      OMX_TEST_BAIL:
543c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	printf("\nFBD done\n");
544c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return OMX_ErrorNone;
545c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
546c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
547c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
548c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic void SampleTest_ReadInputFile(SampleCompTestCtxt * pContext,
549c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_PTR pData, OMX_U32 nBytes, FILE * fp)
550c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
551c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U32 nReadSize = 0;
552c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
553c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	printf("\nIn read i/p file\n");
554c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (pData == NULL)
555c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		printf("\npData is NULL\n");
556c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	else
557c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		printf("\npData = %x\n", pData);
558c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	printf("\nnBytes = %d\n", nBytes);
559c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (fp == NULL)
560c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		printf("\nfp is NULL\n");
561c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	else
562c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		printf("\nfp = %x\n", fp);
563c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	nReadSize = fread(pData, 1, nBytes, fp);
564c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (nReadSize != nBytes)
565c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
566c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pContext->bEOS = OMX_TRUE;
567c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
568c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
569c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	printf(" Reading from file :: Buffer cont : %d \n", nInBufCount);
570c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	nInBufCount++;
571c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
572c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
573c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*========================================================*/
574c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* @ fn SampleTest_WriteInBuffers ::   Reads a buffer from a file and send to Comp       */
575c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*========================================================*/
576c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE SampleTest_WriteInBuffers(SampleCompTestCtxt * pContext)
577c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
578c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
579c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone;
580c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	BufferList *pList;
581c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_BUFFERHEADERTYPE *pBufHeader;
582c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef OMX_SAMPLE_TILER_TEST
583c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U8 *pTmpBuffer = NULL, *pOrigTmpBuffer = NULL;
584c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
585c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pList = pContext->pInBufferList;
586c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	while (pList && pList->pBufHdr)
587c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
588c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		BUFFERLIST_CLEAR_ENTRY(pList, pBufHeader);
589c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		printf("\nAbout to read from input file\n");
590c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if defined(OMX_SAMPLE_TILER_TEST)
591c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
592c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		//OMX_SAMPLE_BUFFER_SIZE is the total amt of data to be sent in the buffer
593c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pTmpBuffer =
594c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    TIMM_OSAL_Malloc(OMX_SAMPLE_BUFFER_SIZE, 0, 0, 0);
595c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (pTmpBuffer == NULL)
596c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			OMX_TEST_SET_ERROR_BAIL
597c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    (OMX_ErrorInsufficientResources,
598c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    "malloc failed \n");
599c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pOrigTmpBuffer = pTmpBuffer;
600c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
601c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		SampleTest_ReadInputFile(pContext, pTmpBuffer,
602c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    OMX_SAMPLE_BUFFER_SIZE, pContext->pInputfile);
603c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
604c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		Test_Util_Memcpy_1Dto2D(pBufHeader->pBuffer, pTmpBuffer,
605c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    OMX_SAMPLE_BUFFER_SIZE, OMX_SAMPLE_IN_HEIGHT,
606c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    OMX_SAMPLE_IN_WIDTH, STRIDE_LINUX);
607c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pBufHeader->nFilledLen = OMX_SAMPLE_BUFFER_SIZE;
608c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
609c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		printf("\nBefore ETB pBufHeader->nInputPortIndex = %d\n",
610c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    pBufHeader->nInputPortIndex);
611c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
612c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		TIMM_OSAL_Free(pOrigTmpBuffer);
613c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
614c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#else
615c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		SampleTest_ReadInputFile(pContext, pBufHeader->pBuffer,
616c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    pBufHeader->nAllocLen, pContext->pInputfile);
617c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pBufHeader->nFilledLen = pBufHeader->nAllocLen;
618c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
619c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
620c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (pContext->bEOS == OMX_TRUE)
621c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
622c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pBufHeader->nFlags |= OMX_BUFFERFLAG_EOS;
623c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
624c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
625c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		eError = OMX_EmptyThisBuffer(pContext->hComp, pBufHeader);
626c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
627c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		OMX_TEST_BAIL_IF_ERROR(eError);
628c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
629c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
630c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      OMX_TEST_BAIL:
631c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
632c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
633c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
634c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
635c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*========================================================*/
636c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* @ fn SampleTest_ReadOutBuffers ::   Send out buffers    */
637c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*========================================================*/
638c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
639c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE SampleTest_ReadOutBuffers(SampleCompTestCtxt * pContext)
640c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
641c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
642c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone;
643c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	BufferList *pList;
644c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_BUFFERHEADERTYPE *pBufHeader;
645c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
646c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pList = pContext->pOutBufferList;
647c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	while (pList && pList->pBufHdr)
648c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
649c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		printf("\nAbout to do FTB\n");
650c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
651c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		BUFFERLIST_CLEAR_ENTRY(pList, pBufHeader);
652c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
653c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		eError = OMX_FillThisBuffer(pContext->hComp, pBufHeader);
654c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
655c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		OMX_TEST_BAIL_IF_ERROR(eError);
656c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (pBufHeader->nFlags == OMX_BUFFERFLAG_EOS)
657c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
658c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pContext->nBufDoneCalls = OMX_TEST_BUFFERS_OF_TRAFFIC;
659c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
660c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
661c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
662c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      OMX_TEST_BAIL:
663c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
664c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
665c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
666c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
667c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
668c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
669c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*========================================================*/
670c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* @ fn SampleTest_AllocateBuffers ::   Allocates the Resources on the available ports  */
671c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*========================================================*/
672c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE SampleTest_AllocateBuffers(SampleCompTestCtxt * pContext,
673c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_PARAM_PORTDEFINITIONTYPE * pPortDef)
674c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
675c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone;
676c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U8 *pBuffer = NULL;
677c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	BufferList *pBufferList;
678c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	BufferList *pTemp;
679c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_BUFFERHEADERTYPE *pBufferHdr;
680c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U32 i = 100;
681c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_COMPONENTTYPE *pComp;
682c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
683c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef OMX_SAMPLE_TILER_TEST
684c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	MemAllocBlock *pBlock = NULL;
685c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U32 nNumBlocks = 1;
686c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
687c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*For i/p port allocate 2D packed buffer, for o/p port allocate 1D buffer.
688c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevIdeally client should get this from GetParams but this is just a sample test so
689c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvalues are hardcoded*/
690c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
691c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (pPortDef->nPortIndex == OMX_SAMPLE_INPUT_PORT)
692c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
693c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		nNumBlocks = 2;
694c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pBlock =
695c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    TIMM_OSAL_Malloc(sizeof(MemAllocBlock) * nNumBlocks, 0, 0,
696c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    0);
697c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		TIMM_OSAL_Memset(pBlock, 0, sizeof(MemAllocBlock) * nNumBlocks);
698c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pBlock[0].dim.area.width = OMX_SAMPLE_IN_2DYWIDTH;
699c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pBlock[0].dim.area.height = OMX_SAMPLE_IN_2DYHEIGHT;
700c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pBlock[0].pixelFormat = PIXEL_FMT_8BIT;
701c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pBlock[1].dim.area.width = OMX_SAMPLE_IN_2DUVWIDTH;
702c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pBlock[1].dim.area.height = OMX_SAMPLE_IN_2DUVHEIGHT;
703c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pBlock[1].pixelFormat = PIXEL_FMT_16BIT;
704c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	} else
705c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
706c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		nNumBlocks = 1;
707c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pBlock =
708c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    TIMM_OSAL_Malloc(sizeof(MemAllocBlock) * nNumBlocks, 0, 0,
709c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    0);
710c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		TIMM_OSAL_Memset(pBlock, 0, sizeof(MemAllocBlock) * nNumBlocks);
711c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pBlock[0].dim.len = OMX_SAMPLE_BUFFER_SIZE;
712c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pBlock[0].pixelFormat = PIXEL_FMT_PAGE;
713c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
714c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
715c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
716c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	for (i = 0; i < pPortDef->nBufferCountActual; i++)
717c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
718c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pBufferList =
719c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    (BufferList *) TIMM_OSAL_Malloc(sizeof(BufferList),
720c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    TIMM_OSAL_TRUE, 0, TIMMOSAL_MEM_SEGMENT_INT);
721c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (!pBufferList)
722c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
723c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			OMX_TEST_SET_ERROR_BAIL
724c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    (OMX_ErrorInsufficientResources,
725c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    "malloc failed \n");
726c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
727c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
728c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (pContext->bClientAllocBuf)
729c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
730c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
731c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef OMX_SAMPLE_TILER_TEST
732c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*For i/p port allocate 2D packed buffer, for o/p port allocate 1D buffer.
733c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevIdeally client should get this from GetParams but this is just a sample test so
734c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvalues are hardcoded*/
735c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pBuffer = MemMgr_Alloc(pBlock, nNumBlocks);
736c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			printf("\nMemMgr allocated buffer = 0x%x\n", pBuffer);
737c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#else
738c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pBuffer =
739c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    (OMX_U8 *) TIMM_OSAL_MallocaBuffer(pPortDef->
740c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    nBufferSize, pPortDef->bBuffersContiguous,
741c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    pPortDef->nBufferAlignment);
742c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
743c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
744c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
745c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			if (!pBufferList)
746c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			{
747c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				OMX_TEST_SET_ERROR_BAIL
748c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				    (OMX_ErrorInsufficientResources,
749c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				    "malloc failed \n");
750c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			}
751c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
752c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			printf("\nCalling UseBuf on port %d\n",
753c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    pPortDef->nPortIndex);
754c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			eError =
755c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    OMX_UseBuffer(pContext->hComp, &pBufferHdr,
756c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    pPortDef->nPortIndex, 0, pPortDef->nBufferSize,
757c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    pBuffer);
758c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
759c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			OMX_TEST_BAIL_IF_ERROR(eError);
760c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
761c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		} else
762c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
763c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
764c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pComp = (OMX_COMPONENTTYPE *) pContext->hComp;
765c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			printf("\nCalling allocate buffer\n");
766c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			eError =
767c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    OMX_AllocateBuffer(pContext->hComp, &pBufferHdr,
768c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    pPortDef->nPortIndex, 0, pPortDef->nBufferSize);
769c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
770c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			OMX_TEST_BAIL_IF_ERROR(eError);
771c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
772c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		printf("\npBufferHdr->nOutputPortIndex = %d\n",
773c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    pBufferHdr->nOutputPortIndex);
774c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		printf("\npBufferHdr->nInputPortIndex = %d\n",
775c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    pBufferHdr->nInputPortIndex);
776c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pBufferList->pNextBuf = NULL;
777c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pBufferList->pBufHdr = pBufferHdr;
778c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pBufferList->pOrigBufHdr = pBufferHdr;
779c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
780c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (pPortDef->eDir == OMX_DirInput)
781c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
782c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			printf("\npBufferHdr->nOutputPortIndex = %d\n",
783c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    pBufferHdr->nOutputPortIndex);
784c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			printf("\npBufferHdr->nInputPortIndex = %d\n",
785c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    pBufferHdr->nInputPortIndex);
786c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pBufferHdr->nOutputPortIndex = OMX_NOPORT;
787c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			if (pContext->pInBufferList == NULL)
788c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			{
789c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				pContext->pInBufferList = pBufferList;
790c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			} else
791c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			{
792c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				pTemp = pContext->pInBufferList;
793c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				while (pTemp->pNextBuf)
794c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev					pTemp = pTemp->pNextBuf;
795c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				pTemp->pNextBuf = pBufferList;
796c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			}
797c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		} else
798c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
799c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pBufferHdr->nInputPortIndex = OMX_NOPORT;
800c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			printf("\npBufferHdr->nOutputPortIndex = %d\n",
801c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    pBufferHdr->nOutputPortIndex);
802c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			printf("\npBufferHdr->nInputPortIndex = %d\n",
803c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    pBufferHdr->nInputPortIndex);
804c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			if (pContext->pOutBufferList == NULL)
805c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			{
806c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				pContext->pOutBufferList = pBufferList;
807c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			} else
808c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			{
809c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				pTemp = pContext->pOutBufferList;
810c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				while (pTemp->pNextBuf)
811c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev					pTemp = pTemp->pNextBuf;
812c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				pTemp->pNextBuf = pBufferList;
813c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			}
814c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
815c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
816c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
817c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      OMX_TEST_BAIL:
818c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef OMX_SAMPLE_TILER_TEST
819c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (pBlock != NULL)
820c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		TIMM_OSAL_Free(pBlock);
821c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
822c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (eError != OMX_ErrorNone)
823c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
824c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (pBufferList)
825c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
826c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			TIMM_OSAL_Free(pBufferList);
827c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
828c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
829c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
830c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
831c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
832c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
833c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*========================================================*/
834c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* @ fn SampleTest_DeInitBuffers ::   Destroy the resources  */
835c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*========================================================*/
836c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE SampleTest_DeInitBuffers(SampleCompTestCtxt * pContext)
837c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
838c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone;
839c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U8 *pBuffer;
840c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	BufferList *pBufferList;
841c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	BufferList *pTemp;
842c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
843c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U32 nRetVal = 0;
844c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
845c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pTemp = pContext->pInBufferList;
846c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
847c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	while (pTemp)
848c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
849c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pBufferList = (BufferList *) pTemp;
850c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pBuffer = (OMX_U8 *) pTemp->pOrigBufHdr->pBuffer;
851c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
852c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		printf("\nCalling Free Buffer on port no. %d\n",
853c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    pTemp->pOrigBufHdr->nInputPortIndex);
854c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
855c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		eError =
856c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    OMX_FreeBuffer(pContext->hComp,
857c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    pTemp->pOrigBufHdr->nInputPortIndex, pTemp->pOrigBufHdr);
858c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		OMX_TEST_BAIL_IF_ERROR(eError);
859c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
860c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if (pContext->bClientAllocBuf)
861c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
862c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
863c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef OMX_SAMPLE_TILER_TEST
864c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        nRetVal = MemMgr_Free(pBuffer);
865c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        if (nRetVal)
866c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        {
867c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                printf("\nError in MemMgr free\n");
868c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        }
869c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#else
870c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        TIMM_OSAL_Free(pBuffer);
871c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
872c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
873c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
874c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pTemp = pTemp->pNextBuf;
875c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (pBufferList)
876c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			TIMM_OSAL_Free(pBufferList);
877c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
878c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
879c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pContext->pInBufferList = NULL;
880c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
881c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pTemp = pContext->pOutBufferList;
882c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	while (pTemp)
883c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
884c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pBufferList = (BufferList *) pTemp;
885c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pBuffer = (OMX_U8 *) pTemp->pOrigBufHdr->pBuffer;
886c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		printf("\nCalling Free Buffer on port no. %d\n",
887c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    pTemp->pOrigBufHdr->nOutputPortIndex);
888c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
889c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		eError =
890c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    OMX_FreeBuffer(pContext->hComp,
891c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    pTemp->pOrigBufHdr->nOutputPortIndex, pTemp->pOrigBufHdr);
892c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		OMX_TEST_BAIL_IF_ERROR(eError);
893c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if (pContext->bClientAllocBuf)
894c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
895c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef OMX_SAMPLE_TILER_TEST
896c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        nRetVal = MemMgr_Free(pBuffer);
897c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        if (nRetVal)
898c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        {
899c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                printf("\nError in MemMgr free\n");
900c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        }
901c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#else
902c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        TIMM_OSAL_Free(pBuffer);
903c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
904c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
905c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
906c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pTemp = pTemp->pNextBuf;
907c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (pBufferList)
908c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			TIMM_OSAL_Free(pBufferList);
909c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
910c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
911c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
912c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pContext->pOutBufferList = NULL;
913c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
914c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      OMX_TEST_BAIL:
915c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
916c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
917c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
918c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*========================================================*/
919c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* @ fn SampleTest_TransitionWait ::   Waits for the transition to be completed ,
920c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *  incase of loaded to idle Allocates the Resources and while idle to loaded
921c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *  destroys the resources */
922c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*========================================================*/
923c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE SampleTest_TransitionWait(OMX_STATETYPE eToState,
924c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    SampleCompTestCtxt * pContext)
925c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
926c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone;
927c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_PARAM_PORTDEFINITIONTYPE tPortDef;
928c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U32 i, j;
929c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
930c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eError = OMX_SendCommand(pContext->hComp, OMX_CommandStateSet,
931c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    eToState, NULL);
932c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_TEST_BAIL_IF_ERROR(eError);
933c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
934c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if ((eToState == OMX_StateIdle) &&
935c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    (pContext->eState == OMX_StateLoaded))
936c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
937c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		for (i = 0; i < NUM_DOMAINS; i++)
938c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
939c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			for (j = pContext->sPortParam[i].nStartPortNumber;
940c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    j < pContext->sPortParam[i].nStartPortNumber
941c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    + pContext->sPortParam[i].nPorts; j++)
942c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			{
943c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
944c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				OMX_TEST_INIT_STRUCT(tPortDef,
945c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				    OMX_PARAM_PORTDEFINITIONTYPE);
946c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				tPortDef.nPortIndex = j;
947c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev//printf("\nCalling GetParam before UseBuf on port %d\n",j);
948c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				eError = OMX_GetParameter(pContext->hComp,
949c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				    OMX_IndexParamPortDefinition,
950c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				    (OMX_PTR) & tPortDef);
951c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				OMX_TEST_BAIL_IF_ERROR(eError);
952c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
953c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev//                    if(tPortDef.bEnabled)//AD
954c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				eError =
955c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				    SampleTest_AllocateBuffers(pContext,
956c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				    &tPortDef);
957c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
958c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				OMX_TEST_BAIL_IF_ERROR(eError);
959c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			}
960c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
961c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	} else if ((eToState == OMX_StateLoaded) &&
962c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    (pContext->eState == OMX_StateIdle))
963c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
964c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
965c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		eError = SampleTest_DeInitBuffers(pContext);
966c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		OMX_TEST_BAIL_IF_ERROR(eError);
967c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
968c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
969c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	printf("\nWaiting for state set event\n");
970c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	TIMM_OSAL_SemaphoreObtain(pContext->hStateSetEvent,
971c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    TIMM_OSAL_SUSPEND);
972c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	printf("\nState set event recd.\n");
973c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
974c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (pContext->eState != eToState)
975c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		OMX_TEST_SET_ERROR_BAIL(OMX_ErrorUndefined,
976c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    " InComplete Transition \n");
977c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
978c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      OMX_TEST_BAIL:
979c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
980c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
981c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
982c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
983c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*========================================================*/
984c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* @ fn OMX_Sample_UT0001 ::  Initializes, move to Idle and then to executing, process
985c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev*    buffers and then destroy the component by moving back to idle, loaded, invalid */
986c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*========================================================*/
987c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid main(void)
988c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
989c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone;
990c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_HANDLETYPE hComp = NULL;
991c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_CALLBACKTYPE oCallbacks;
992c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	SampleCompTestCtxt *pContext;
993c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	SampleCompTestCtxt oAppData;
994c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
995c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	int ch1, ch2;
996c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	int pass;
997c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	int while_pass = 0, loc_diff = 0;
998c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
999c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1000c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pContext = &oAppData;
1001c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	printf(" Entering : %s \n", __FUNCTION__);
1002c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	memset(pContext, 0x0, sizeof(SampleCompTestCtxt));
1003c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1004c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	oCallbacks.EventHandler = SampleTest_EventHandler;
1005c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	oCallbacks.EmptyBufferDone = SampleTest_EmptyBufferDone;
1006c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	oCallbacks.FillBufferDone = SampleTest_FillBufferDone;
1007c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	printf("\nCalling sem create\n");
1008c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/* Initialize Events to Track callbacks  */
1009c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	TIMM_OSAL_SemaphoreCreate(&pContext->hStateSetEvent, 0);
1010c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	TIMM_OSAL_SemaphoreCreate(&pContext->hPortDisableEvent, 0);
1011c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	//TIMM_OSAL_MutexObtain(pContext->hStateSetEvent, TIMM_OSAL_SUSPEND);
1012c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	printf("\nSem created\n");
1013c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1014c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1015c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pContext->pInputfile = fopen(INPUT_FILE, "rb");
1016c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (NULL == pContext->pInputfile)
1017c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
1018c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		eError = OMX_ErrorInsufficientResources;
1019c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		//goto OMX_TEST_BAIL;
1020c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
1021c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	printf("\nInput file opened\n");
1022c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pContext->pOutputFile = fopen(NON_TUN_OUTPUT_FILE, "wb");
1023c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (NULL == pContext->pOutputFile)
1024c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
1025c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		eError = OMX_ErrorInsufficientResources;
1026c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		//goto OMX_TEST_BAIL;
1027c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
1028c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1029c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1030c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/* Initialize OpenMAX */
1031c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	printf("\nInitialize OpenMAX\n");
1032c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eError = OMX_Init();
1033c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_TEST_BAIL_IF_ERROR(eError);
1034c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/* Load a component  */
1035c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	printf("\nLoad a component\n");
1036c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eError =
1037c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    OMX_GetHandle(&hComp, (OMX_STRING) "OMX.TI.DUCATI1.MISC.SAMPLE",
1038c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    pContext, &oCallbacks);
1039c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_TEST_BAIL_IF_ERROR(eError);
1040c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pContext->hComp = hComp;
1041c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevprintf ("\neError = 0x%x\n", eError);
1042c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevif(hComp)
1043c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	printf("\nhComp = 0x%x\n", hComp);
1044c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/* Verify that the component is in Loaded state */
1045c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	printf("\nVerify that the component is in Loaded state\n");
1046c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1047c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eError = OMX_GetState(pContext->hComp, &pContext->eState);
1048c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_TEST_BAIL_IF_ERROR(eError);
1049c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (OMX_StateLoaded != pContext->eState)
1050c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
1051c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		OMX_TEST_SET_ERROR_BAIL(OMX_ErrorUndefined,
1052c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    "not in loaded state \n");
1053c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
1054c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1055c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/* detect all Audio ports on the component */
1056c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_TEST_INIT_STRUCT(pContext->sPortParam[0], OMX_PORT_PARAM_TYPE);
1057c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eError = OMX_GetParameter(hComp, OMX_IndexParamAudioInit,
1058c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    (OMX_PTR) & pContext->sPortParam[0]);
1059c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_TEST_BAIL_IF_ERROR(eError);
1060c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1061c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/* detect all video ports on the component */
1062c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_TEST_INIT_STRUCT(pContext->sPortParam[1], OMX_PORT_PARAM_TYPE);
1063c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eError = OMX_GetParameter(hComp, OMX_IndexParamVideoInit,
1064c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    (OMX_PTR) & pContext->sPortParam[1]);
1065c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_TEST_BAIL_IF_ERROR(eError);
1066c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1067c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/* detect all image ports on the component */
1068c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_TEST_INIT_STRUCT(pContext->sPortParam[2], OMX_PORT_PARAM_TYPE);
1069c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eError = OMX_GetParameter(hComp, OMX_IndexParamImageInit,
1070c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    (OMX_PTR) & pContext->sPortParam[2]);
1071c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_TEST_BAIL_IF_ERROR(eError);
1072c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1073c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/* detect all other ports on the component */
1074c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_TEST_INIT_STRUCT(pContext->sPortParam[3], OMX_PORT_PARAM_TYPE);
1075c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eError = OMX_GetParameter(hComp, OMX_IndexParamOtherInit,
1076c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    (OMX_PTR) & pContext->sPortParam[3]);
1077c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_TEST_BAIL_IF_ERROR(eError);
1078c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1079c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pContext->nPorts = pContext->sPortParam[0].nPorts +
1080c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    pContext->sPortParam[1].nPorts +
1081c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    pContext->sPortParam[2].nPorts + pContext->sPortParam[3].nPorts;
1082c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1083c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1084c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pContext->bClientAllocBuf = OMX_SAMPLE_USEBUF;
1085c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (pContext->bClientAllocBuf == OMX_TRUE)
1086c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
1087c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		printf(" Client does Allocation of buffers \n");
1088c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	} else
1089c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
1090c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		printf(" Component does Allocation of buffers \n");
1091c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
1092c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1093c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/* Transition to Idle state */
1094c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1095c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eError = SampleTest_TransitionWait(OMX_StateIdle, pContext);
1096c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_TEST_BAIL_IF_ERROR(eError);
1097c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/* Transition to Executing state */
1098c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eError = SampleTest_TransitionWait(OMX_StateExecuting, pContext);
1099c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_TEST_BAIL_IF_ERROR(eError);
1100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	printf("\nAbout to start processing buffers\n");
1101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/*  process buffers   */
1104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	while (pContext->nBufDoneCalls < OMX_TEST_BUFFERS_OF_TRAFFIC)
1106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
1107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		eError = SampleTest_WriteInBuffers(pContext);
1109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		OMX_TEST_BAIL_IF_ERROR(eError);
1110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		eError = SampleTest_ReadOutBuffers(pContext);
1112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		OMX_TEST_BAIL_IF_ERROR(eError);
1113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		while_pass++;
1114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		//printf("\n WHILE PROCESS LOOP COUNT:  BufDoneCount = %d %d",
1115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		//    while_pass, pContext->nBufDoneCalls);
1116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		//printf("\n Waiting on Sample component to respond");
1118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
1120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	gTest = 0;
1123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/* Transition back to Idle state  */
1125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eError = SampleTest_TransitionWait(OMX_StateIdle, pContext);
1126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_TEST_BAIL_IF_ERROR(eError);
1127c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1128c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/* Trasnition back to Loaded state */
1129c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eError = SampleTest_TransitionWait(OMX_StateLoaded, pContext);
1130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_TEST_BAIL_IF_ERROR(eError);
1131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1132c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1133c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      OMX_TEST_BAIL:
1134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	fclose(pContext->pInputfile);
1136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	fclose(pContext->pOutputFile);
1137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (eError == OMX_ErrorNone)
1139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
1140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		eError = OMX_FreeHandle(pContext->hComp);
1141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		eError = OMX_Deinit();
1142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	} else
1143c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
1144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		SampleTest_TransitionWait(OMX_StateInvalid, pContext);
1145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		SampleTest_DeInitBuffers(pContext);
1146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		OMX_FreeHandle(pContext->hComp);
1148c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		OMX_Deinit();
1149c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
1150c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1151c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	TIMM_OSAL_SemaphoreDelete(pContext->hStateSetEvent);
1152c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	TIMM_OSAL_SemaphoreDelete(pContext->hPortDisableEvent);
1153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1154c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/* emit the Test Result */
1155c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (OMX_ErrorNone != eError)
1156c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
1157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		printf(" TestCase Failed and returned an error:: %s \n",
1158c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    OMX_TEST_ErrorToString(eError));
1159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	} else
1160c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
1161c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		printf
1162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    ("\nTest case has ended, now comparing input and output files\n");
1163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pContext->pInputfile = fopen(INPUT_FILE, "rb");
1164c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (NULL == pContext->pInputfile)
1165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
1166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			printf("\n Error in opening INPUT_FILE");
1167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			eError = OMX_ErrorInsufficientResources;
1168c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
1169c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1170c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pContext->pOutputFile = fopen(NON_TUN_OUTPUT_FILE, "rb");
1171c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (NULL == pContext->pOutputFile)
1172c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
1173c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			printf("\n Error in opening NON_TUN_OUTPUT_FILE");
1174c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			eError = OMX_ErrorInsufficientResources;
1175c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
1176c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pass = 1;
1177c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		while (1)
1178c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
1179c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			if (eError != OMX_ErrorNone)
1180c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			{
1181c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				pass = 0;
1182c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				break;
1183c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			}
1184c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			ch1 = fgetc(pContext->pInputfile);
1185c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			ch2 = fgetc(pContext->pOutputFile);
1186c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			loc_diff++;
1187c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			if (ch1 == EOF || ch2 == EOF)
1188c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			{
1189c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				break;
1190c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			}
1191c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			if (ch1 != ch2)
1192c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			{
1193c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				pass = 0;
1194c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				printf("\n \n");
1195c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				printf
1196c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				    ("\n FILE SIZE = 320 KB - NUMBER OF ITERATIONS = 20 (10 for INPUT AND 10 FOR OUTPUT buffers\n");
1197c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				printf
1198c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				    ("\n ################### LOCATION OF DIFFERENCE: %d ################### \n",
1199c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				    loc_diff);
1200c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				break;
1201c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			}
1202c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
1203c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		fclose(pContext->pInputfile);
1204c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		fclose(pContext->pOutputFile);
1205c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (pass == 1)
1206c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			printf(" Test Case has Passed\n");
1207c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		else
1208c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
1209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			printf("\nTest case has failed. (EOF not reached)\n");
1210c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			eError = OMX_ErrorUndefined;
1211c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
1212c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
1213c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1214c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (eError == OMX_ErrorNone)
1215c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
1216c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		printf(" Test Case has Passed :) \n");
1217c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	} else
1218c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
1219c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		printf("\nTest case has failed.(OMX Error)\n");
1220c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
1221c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1222c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1223