/*
* Copyright (c) 2010, Texas Instruments Incorporated
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of Texas Instruments Incorporated nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#define COMPONENT_NAME "OMX.TI.DUCATI1.MISC.SAMPLE" // needs to be specific for every configuration wrapper
#define OMX_SAMPLE_USEBUF OMX_TRUE
/****************************************************************
* INCLUDE FILES
****************************************************************/
/* ----- system and platform files ----------------------------*/
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
/*-------program files ----------------------------------------*/
#include <OMX_Core.h>
#include <OMX_Component.h>
#include "timm_osal_interfaces.h"
#define OMX_SAMPLE_TILER_TEST
#ifdef OMX_SAMPLE_TILER_TEST
#include "memmgr.h"
#endif
#define OMX_SAMPLE_INPUT_PORT 0
#define OMX_SAMPLE_OUTPUT_PORT 1
#ifdef OMX_SAMPLE_TILER_TEST
#define OMX_SAMPLE_IN_2DYHEIGHT 4
#define OMX_SAMPLE_IN_2DYWIDTH 8
#define OMX_SAMPLE_IN_2DUVHEIGHT 2
#define OMX_SAMPLE_IN_2DUVWIDTH 4
/*
#define STRIDE_8BIT (16 * 1024)
#define STRIDE_16BIT (32 * 1024)
*/
#define OMX_SAMPLE_IN_HEIGHT 6
#define OMX_SAMPLE_IN_WIDTH 8
#define STRIDE_LINUX (4 * 1024)
#define OMX_SAMPLE_BUFFER_SIZE 48
void Test_Util_Memcpy_1Dto2D(TIMM_OSAL_PTR pDst2D, TIMM_OSAL_PTR pSrc1D,
TIMM_OSAL_U32 nSize1D, TIMM_OSAL_U32 nHeight2D, TIMM_OSAL_U32 nWidth2D,
TIMM_OSAL_U32 nStride2D)
{
TIMM_OSAL_U8 *pInBuffer;
TIMM_OSAL_U8 *pOutBuffer;
TIMM_OSAL_U32 nSizeLeft, i;
nSizeLeft = nSize1D;
pInBuffer = (TIMM_OSAL_U8 *) pSrc1D;
pOutBuffer = (TIMM_OSAL_U8 *) pDst2D;
//The lower limit is copied. If nSize1D < H*W then 1Dsize is copied else H*W is copied
for (i = 0; i < nHeight2D; i++)
{
if (nSizeLeft >= nWidth2D)
{
TIMM_OSAL_Memcpy(pOutBuffer, pInBuffer, nWidth2D);
} else
{
TIMM_OSAL_Memcpy(pOutBuffer, pInBuffer, nSizeLeft);
break;
}
nSizeLeft -= nWidth2D;
pInBuffer =
(TIMM_OSAL_U8 *) ((TIMM_OSAL_U32) pInBuffer + nWidth2D);
pOutBuffer =
(TIMM_OSAL_U8 *) ((TIMM_OSAL_U32) pOutBuffer + nStride2D);
}
}
#endif
/****************************************************************
* EXTERNAL REFERENCES NOTE : only use if not found in header file
****************************************************************/
/*--------data declarations -----------------------------------*/
/*--------function prototypes ---------------------------------*/
/****************************************************************
* PRIVATE DECLARATIONS Defined and used only here
****************************************************************/
/*--------function declarations -------------------------------*/
/*--------data declarations -----------------------------------*/
#define NUM_DOMAINS 0x4
#define OMX_NOPORT 0xfffffffe
//#define INPUT_FILE "../../omx/omx_il_1_x/omx_base/test/patterns/chikita.mp3"
#define INPUT_FILE "sample_input.mp3"
#define NON_TUN_OUTPUT_FILE "nt_output.mp3"
static int gTest = 1;
#define TIMM_OSAL_MallocaBuffer(_size, bContigous, nBlockAlignment) \
TIMM_OSAL_Malloc (_size, TIMM_OSAL_TRUE, 0, TIMMOSAL_MEM_SEGMENT_EXT)
#define OMX_TEST_BUFFERS_OF_TRAFFIC 20
#define OMX_TEST_BAIL_IF_ERROR(_eError) \
if(OMX_ErrorNone != (eError = _eError)){ \
goto OMX_TEST_BAIL; \
}
#define OMX_TEST_SET_ERROR_BAIL(_eCode, _desc) \
{ \
eError = _eCode; \
printf(_desc);\
goto OMX_TEST_BAIL; \
}
#define OMX_TEST_INIT_STRUCT(_s_, _name_) \
memset(&(_s_), 0x0, sizeof(_name_)); \
(_s_).nSize = sizeof(_name_); \
(_s_).nVersion.s.nVersionMajor = 0x1; \
(_s_).nVersion.s.nVersionMinor = 0x1; \
(_s_).nVersion.s.nRevision = 0x0; \
(_s_).nVersion.s.nStep = 0x0
#define BUFFER_LIST_CLEAR_ENTRY(_pL, _pB)\
_pB = _pL->pBufHdr; \
_pL->pBufHdr = NULL; \
_pL = _pL->pNextBuf;
#define BUFFER_LIST_SET_ENTRY(_pL, _pB) \
{ \
BufferList *_pT = _pL; \
while(_pT && _pT->pBufHdr){ \
_pT = _pT->pNextBuf; \
} \
if(_pT) \
_pT->pBufHdr = _pB; \
}
#define BUFFERLIST_CLEAR_ENTRY(_pL, _pB)\
_pB = _pL->pBufHdr; \
_pL->pBufHdr = NULL; \
_pL = _pL->pNextBuf;
typedef struct _BufferList BufferList;
struct _BufferList
{
OMX_BUFFERHEADERTYPE *pBufHdr;
OMX_BUFFERHEADERTYPE *pOrigBufHdr;
BufferList *pNextBuf;
};
typedef struct SampleCompTestCtxt
{
OMX_HANDLETYPE hComp;
OMX_STATETYPE eState;
OMX_U32 nPorts;
OMX_HANDLETYPE hStateSetEvent;
OMX_HANDLETYPE hPortDisableEvent;
OMX_HANDLETYPE hPortEnableEvent;
OMX_STRING inFilePath;
OMX_STRING outFilePath;
FILE *pOutputFile;
FILE *pInputfile;
OMX_BOOL bEOS;
BufferList *pInBufferList;
BufferList *pOutBufferList;
OMX_BOOL bClientAllocBuf;
OMX_U32 nBufDoneCalls;
OMX_PORT_PARAM_TYPE sPortParam[NUM_DOMAINS];
} SampleCompTestCtxt;
//this test compiles only for ducati SYS
typedef struct TestCtxt
{
OMX_HANDLETYPE hComp;
OMX_STATETYPE eState;
OMX_U32 nPorts;
OMX_HANDLETYPE hStateSetEvent;
OMX_HANDLETYPE hPortDisableEvent;
OMX_HANDLETYPE hPortEnableEvent;
OMX_STRING inFilePath;
OMX_STRING outFilePath;
FILE *pOutputFile;
FILE *pInputfile;
OMX_BOOL bEOS;
BufferList *pInBufferList;
BufferList *pOutBufferList;
OMX_BOOL bClientAllocBuf;
OMX_U32 nBufDoneCalls;
//OMX_PORT_PARAM_TYPE sPortParam[NUM_DOMAINS];
} TestCtxt;
static OMX_U32 nInBufCount = 0;
static OMX_U32 nOutBufCount = 0;
//Semaphore_Handle EBDSem;
//Semaphore_Params EBDsemParams;
//Semaphore_Handle FBDSem;
//Semaphore_Params FBDsemParams;
/*========================================================*/
/* @ fn OMX_TEST_ErrorToString :: ERROR to STRING */
/*========================================================*/
OMX_STRING OMX_TEST_ErrorToString(OMX_ERRORTYPE eError)
{
OMX_STRING errorString;
switch (eError)
{
case OMX_ErrorNone:
errorString = "ErrorNone";
break;
case OMX_ErrorInsufficientResources:
errorString = "ErrorInsufficientResources";
break;
case OMX_ErrorUndefined:
errorString = "ErrorUndefined";
break;
case OMX_ErrorInvalidComponentName:
errorString = "ErrorInvalidComponentName";
break;
case OMX_ErrorComponentNotFound:
errorString = "ErrorComponentNotFound";
break;
case OMX_ErrorInvalidComponent:
errorString = "ErrorInvalidComponent";
break;
case OMX_ErrorBadParameter:
errorString = "ErrorBadParameter";
break;
case OMX_ErrorNotImplemented:
errorString = "ErrorNotImplemented";
break;
case OMX_ErrorUnderflow: