blob: 47ec1df9c43f8721513b36f0b108d31fa38f287f [file] [log] [blame]
/*
* Copyright (C) Texas Instruments - http://www.ti.com/
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/* =============================================================================
* Texas Instruments OMAP(TM) Platform Software
* (c) Copyright Texas Instruments, Incorporated. All Rights Reserved.
*
* Use of this software is controlled by the terms and conditions found
* in the license agreement under which this software has been supplied.
* ============================================================================ */
/**
* @file OMX_WmaDecUtils.h
*
* This is an header file for an audio WMA Decoder that is fully
* compliant with the Khronos OpenMAX 1.0 specification.
* This the file that the application that uses OMX would include
* in its code.
*
* @path $(CSLPATH)\
*
* @rev 1.0
*/
/* --------------------------------------------------------------------------- */
#ifndef OMX_WMADEC_UTILS__H
#define OMX_WMADEC_UTILS__H
#define OMX_WMADECODER_H
#include <pthread.h>
#include <OMX_TI_Common.h>
#include <TIDspOmx.h>
#include "LCML_DspCodec.h"
#define _ERROR_PROPAGATION__
#ifdef __PERF_INSTRUMENTATION__
#include "perf.h"
#endif
#ifdef RESOURCE_MANAGER_ENABLED
#include <ResourceManagerProxyAPI.h>
#endif
#include <OMX_Component.h>
#ifndef ANDROID
#define ANDROID
#endif
#ifdef ANDROID
#undef LOG_TAG
#define LOG_TAG "OMX_WMADEC"
/* PV opencore capability custom parameter index */
#define PV_OMX_COMPONENT_CAPABILITY_TYPE_INDEX 0xFF7A347
#endif
#ifdef UNDER_CE
#ifndef _OMX_EVENT_
#define _OMX_EVENT_
typedef struct OMX_Event {
HANDLE event;
} OMX_Event;
#endif
int OMX_CreateEvent(OMX_Event *event);
int OMX_SignalEvent(OMX_Event *event);
int OMX_WaitForEvent(OMX_Event *event);
int OMX_DestroyEvent(OMX_Event *event);
typedef struct OMXBufferStatus /*BUFFERSTATUS*/
{
DWORD EmptyBufferSent;
DWORD FillBufferSent;
DWORD EmptyBufferDone;
DWORD FillBufferDone;
} OMXBufferStatus;
#endif
/* PV opencore capability custom parameter index */
#define PV_OMX_COMPONENT_CAPABILITY_TYPE_INDEX 0xFF7A347
#ifndef ANDROID
#define ANDROID
#endif
#define OBJECTTYPE_LC 2
#define OBJECTTYPE_HE 5
#define OBJECTTYPE_HE2 29
/* ======================================================================= */
/**
* @def WMADEC_COMPONENT_THREAD
*/
/* ======================================================================= */
#define EXIT_COMPONENT_THRD 10
/* ======================================================================= */
/**
* @def WMADEC_XXX_VER Component version
*/
/* ======================================================================= */
#define WMADEC_MAJOR_VER 0xF1
#define WMADEC_MINOR_VER 0xF2
/* ======================================================================= */
/**
* @def INPUT_WMADEC_BUFFER_SIZE Default input buffer size
*
*/
/* ======================================================================= */
#define INPUT_WMADEC_BUFFER_SIZE 16384
/* ======================================================================= */
/**
* @def OUTPUT_WMADEC_BUFFER_SIZE Default output buffer size
*/
/* ======================================================================= */
#define OUTPUT_WMADEC_BUFFER_SIZE 40960
/* ======================================================================= */
/**
* @def NUM_WMADEC_INPUT_BUFFERS Default number of input buffers
*/
/* ======================================================================= */
#define NUM_WMADEC_INPUT_BUFFERS 2
/* ======================================================================= */
/**
* @def NUM_WMADEC_OUTPUT_BUFFERS Default number of output buffers
*/
/* ======================================================================= */
#ifdef UNDER_CE
#define NUM_WMADEC_OUTPUT_BUFFERS 4
#else
#define NUM_WMADEC_OUTPUT_BUFFERS 4
#endif
/* ======================================================================= */
/**
* @def NOT_USED Defines a value for "don't care" parameters
*/
/* ======================================================================= */
#define NOT_USED 10
/* ======================================================================= */
/**
* @def NORMAL_BUFFER Defines the flag value with all flags turned off
*/
/* ======================================================================= */
#define NORMAL_BUFFER 0
/* ======================================================================= */
/**
* @def OMX_WMADEC_DEFAULT_SEGMENT Default segment ID for the LCML
*/
/* ======================================================================= */
#define OMX_WMADEC_DEFAULT_SEGMENT (0)
/* ======================================================================= */
/**
* @def OMX_WMADEC_SN_TIMEOUT Timeout value for the socket node
*/
/* ======================================================================= */
#define OMX_WMADEC_SN_TIMEOUT (-1)
/* ======================================================================= */
/**
* @def OMX_WMADEC_SN_PRIORITY Priority for the socket node
*/
/* ======================================================================= */
#define OMX_WMADEC_SN_PRIORITY (10)
/* ======================================================================= */
/**
* @def WMAD_TIMEOUT Timeout value for the component thread
*/
/* ======================================================================= */
#define WMAD_TIMEOUT (1000) /* millisecs */
/* ======================================================================= */
/**
* @def NUM_WMADEC_OUTPUT_BUFFERS_DASF Number of output buffers for DASF
*/
/* ======================================================================= */
#define NUM_WMADEC_OUTPUT_BUFFERS_DASF 2
/* ======================================================================= */
/**
* @def WMADEC_STREAM_COUNT Number of streams
*/
/* ======================================================================= */
#define WMADEC_STREAM_COUNT 2
/* ======================================================================= */
/**
* @def WMADEC_DEFAULT_SAMPLING_FREQUENCY Sampling frequency
*/
/* ======================================================================= */
#define WMADEC_DEFAULT_SAMPLING_FREQUENCY 8000
/* ======================================================================= */
/**
* @def WMADEC_MAX_NUM_OF_BUFS Maximum number of buffers
*/
/* ======================================================================= */
#define MAX_NUM_OF_BUFS 10
#define WMA_CPU 45
/* ======================================================================= */
/**
* @def WMADEC_DEFAULT_PACKETS_DWLO Default Packets Number
*/
/* ======================================================================= */
#define WMADEC_DEFAULT_PACKETS_DWLO 178
/* ======================================================================= */
/**
* @def WMADEC_DEFAULT_PLAYDURATION_DWLO Default Play Duration
*/
/* ======================================================================= */
#define WMADEC_DEFAULT_PLAYDURATION_DWLO 917760000
/* ======================================================================= */
/**
* @def WMADEC_DEFAULT_MAXPACKETSIZE Default Maximum Packet Size
*/
/* ======================================================================= */
#define WMADEC_DEFAULT_MAXPACKETSIZE 349
/* ======================================================================= */
/**
* @def WMADEC_DEFAULT_STREAMTYPE_DATA1 Default Stream Data Type values
*/
/* ======================================================================= */
//Macros for WMA
#define GetUnalignedWord( pb, w ) \
(w) = ((OMX_U16) *(pb + 1) << 8) + *pb;
#define GetUnalignedDword( pb, dw ) \
(dw) = ((OMX_U32) *(pb + 3) << 24) + \
((OMX_U32) *(pb + 2) << 16) + \
((OMX_U16) *(pb + 1) << 8) + *pb;
#define GetUnalignedWordEx( pb, w ) GetUnalignedWord( pb, w ); (pb) += sizeof(OMX_U16);
#define GetUnalignedDwordEx( pb, dw ) GetUnalignedDword( pb, dw ); (pb) += sizeof(OMX_U32);
#define LoadWORD( w, p ) GetUnalignedWordEx( p, w )
#define LoadDWORD( dw, p ) GetUnalignedDwordEx( p, dw )
#define WMADEC_DEFAULT_STREAMTYPE_DATA1 -127295936
#define WMADEC_DEFAULT_STREAMTYPE_DATA2 23373
#define WMADEC_DEFAULT_STREAMTYPE_DATA3 4559
#define WMADEC_DEFAULT_STREAMTYPE_DATA40 168
#define WMADEC_DEFAULT_STREAMTYPE_DATA41 253
#define WMADEC_DEFAULT_STREAMTYPE_DATA42 0
#define WMADEC_DEFAULT_STREAMTYPE_DATA43 128
#define WMADEC_DEFAULT_STREAMTYPE_DATA44 95
#define WMADEC_DEFAULT_STREAMTYPE_DATA45 92
#define WMADEC_DEFAULT_STREAMTYPE_DATA46 68
#define WMADEC_DEFAULT_STREAMTYPE_DATA47 43
/* ======================================================================= */
/**
* @def WMADEC_DEFAULT_TYPESPECIFIC Default Specific Type
*/
/* ======================================================================= */
#define WMADEC_DEFAULT_TYPESPECIFIC 28
/* ======================================================================= */
/**
* @def WMADEC_DEFAULT_STREAMNUM Default Stream Number
*/
/* ======================================================================= */
#define WMADEC_DEFAULT_STREAMNUM 1
/* ======================================================================= */
/**
* @def WMADEC_DEFAULT_FORMATTAG Default Format tag
*/
/* ======================================================================= */
#define WMADEC_DEFAULT_FORMATTAG 353
/* ======================================================================= */
/**
* @def WMADEC_DEFAULT_SAMPLEPERSEC Default samples per second
*/
/* ======================================================================= */
#define WMADEC_DEFAULT_SAMPLEPERSEC 8000
/* ======================================================================= */
/**
* @def WMADEC_DEFAULT_AVGBYTESPERSEC Default average bytes per second
*/
/* ======================================================================= */
#define WMADEC_DEFAULT_AVGBYTESPERSEC 625
/* ======================================================================= */
/**
* @def WMADEC_DEFAULT_BLOCKALIGN Default block alignment
*/
/* ======================================================================= */
#define WMADEC_DEFAULT_BLOCKALIGN 40
/* ======================================================================= */
/**
* @def WMADEC_DEFAULT_CHANNEL Default channels number
*/
/* ======================================================================= */
#define WMADEC_DEFAULT_CHANNEL 1
/* ======================================================================= */
/**
* @def WMADEC_DEFAULT_VALIDBITSPERSAMPLE Default valid bits per sample
*/
/* ======================================================================= */
#define WMADEC_DEFAULT_VALIDBITSPERSAMPLE 16
/* ======================================================================= */
/**
* @def WMADEC_DEFAULT_SIZEWAVEHEADER Default wave header size
*/
/* ======================================================================= */
#define WMADEC_DEFAULT_SIZEWAVEHEADER 10
/* ======================================================================= */
/**
* @def WMADEC_DEFAULT_CHANNELMASK Default channel mask
*/
/* ======================================================================= */
#define WMADEC_DEFAULT_CHANNELMASK 0
/* ======================================================================= */
/**
* @def WMADEC_DEFAULT_ENCODEOPTV Default encode option
*/
/* ======================================================================= */
#define WMADEC_DEFAULT_ENCODEOPTV 0
/* ======================================================================= */
/**
* @def WMADEC_DEFAULT_VALIDBITSPERSAMPLE Default valid bits per sample
*/
/* ======================================================================= */
#define WMADEC_DEFAULT_VALIDBITSPERSAMPLE 16
/* ======================================================================= */
/**
* @def WMADEC_DEFAULT_SAMPLEPERBLOCK Default samples per block
*/
/* ======================================================================= */
#define WMADEC_DEFAULT_SAMPLEPERBLOCK 8704
/**
* @def WMADEC_DEBUG Turns debug messaging on and off
*/
/* ======================================================================= */
#undef WMADEC_DEBUG
/* ======================================================================= */
/**
* @def WMADEC_MEMCHECK Turns memory messaging on and off
*/
/* ======================================================================= */
#undef WMADEC_MEMCHECK
/* ======================================================================= */
/**
* @def WMADEC_USN_DLL_NAME USN DLL name
*/
/* ======================================================================= */
#ifdef UNDER_CE
#define WMADEC_USN_DLL_NAME "\\windows\\usn.dll64P"
#else
#define WMADEC_USN_DLL_NAME "usn.dll64P"
#endif
/* ======================================================================= */
/**
* @def WMADEC_DLL_NAME WMA Decoder socket node dll name
*/
/* ======================================================================= */
#ifdef UNDER_CE
#define WMADEC_DLL_NAME "\\windows\\wmadec_sn.dll64P"
#else
#define WMADEC_DLL_NAME "wmadec_sn.dll64P"
#endif
/* ======================================================================= */
/**
* @def WMADEC_EPRINT Error print macro
*/
/* ======================================================================= */
#ifndef UNDER_CE
#define WMADEC_EPRINT ALOGE
#else
#define WMADEC_EPRINT printf
#endif
/* ======================================================================= */
/**
* @def WMADEC_DPRINT Debug print macro
*/
/* ======================================================================= */
#ifndef UNDER_CE
#ifdef WMADEC_DEBUG
#define WMADEC_DPRINT ALOGI
#else
#define WMADEC_DPRINT(...)
#endif
#ifdef WMADEC_MEMCHECK
#define WMADEC_MEMPRINT(...) fprintf(stderr,__VA_ARGS__)
#else
#define WMADEC_MEMPRINT(...)
#endif
#ifdef WMADEC_DEBUG_MCP
#define WMADEC_MCP_DPRINT(...) fprintf(stderr,__VA_ARGS__)
#else
#define WMADEC_MCP_DPRINT(...)
#endif
#else /*UNDER_CE*/
#ifdef WMADEC_DEBUG
#define WMADEC_DPRINT(STR, ARG...) printf()
#else
#define WMADEC_DPRINT
#endif
/* ======================================================================= */
/**
* @def WMADEC_MEMCHECK Memory print macro
*/
/* ======================================================================= */
#ifdef WMADEC_MEMCHECK
#define WMADEC_MEMPRINT(STR, ARG...) printf()
#else
#define WMADEC_MEMPRINT
#endif
#endif
/* ======================================================================= */
/**
* @def WMADEC_NUM_OF_PORTS Number of ports
*/
/* ======================================================================= */
#define WMADEC_NUM_OF_PORTS 2
/* ======================================================================= */
/**
* W M A T Y P E S
*/
/* ======================================================================= */
#define WAVE_FORMAT_MSAUDIO1 0x0160
#define WAVE_FORMAT_WMAUDIO2 0x0161
#define WAVE_FORMAT_WMAUDIO3 0x0162
#define WAVE_FORMAT_WMAUDIO_LOSSLESS 0x0163
#define WAVE_FORMAT_WMAUDIO2_ES 0x0165
#define WAVE_FORMAT_WMASPDIF 0x164
#define WAVE_FORMAT_WMAUDIO3_ES 0x0166
#define WAVE_FORMAT_WMAUDIO_LOSSLESS_ES 0x0167
#define WAVE_FORMAT_MSSPEECH 10
/* According with the ASF Specification:*/
#define WAVE_FORMAT_MSAUDIO 0x0161 /*Versions 7,8 and 9 Series*/
#define WAVE_FORMAT_MSAUDIO_9 0x0162 /* 9 series */
#define WAVE_FORMAT_MSAUDIO_9_LOOSELESS 0x0163 /* 9 series */
/* ======================================================================= */
/** COMP_PORT_TYPE Port types
*
* @param INPUT_PORT Input port
*
* @param OUTPUT_PORT Output port
*/
/* ==================================================================== */
typedef enum COMP_PORT_TYPE {
INPUT_PORT = 0,
OUTPUT_PORT
}COMP_PORT_TYPE;
/* ======================================================================= */
/** StreamType Stream types
*
* @param DMM DMM
*
* @param INSTRM Input stream
*
* @param OUTSTRM Output stream
*/
/* ==================================================================== */
enum StreamType
{
DMM,
INSTRM,
OUTSTRM
};
typedef OMX_ERRORTYPE (*fpo)(OMX_HANDLETYPE);
/* =================================================================================== */
/**
* Socket node input parameters.
*/
/* ================================================================================== */
typedef struct WMADEC_AudioCodecParams
{
unsigned long iSamplingRate;
unsigned long iStrmId;
unsigned short iAudioFormat;
}WMADEC_AudioCodecParams;
typedef enum {
WMA_IAUDIO_BLOCK=0,
WMA_IAUDIO_INTERLEAVED
} WMAAUDIO_PcmFormat;
#define WMA_MONO_CHANNEL 0x0001
#define WMA_STEREO_INTERLEAVED 0x0002
#define WMA_STEREO_NON_INTERLEAVED 0x0003
#define WMA_MONO_DUPLICATED 0x0004
typedef enum {
WMA_IUALG_CMD_STOP = 0,
WMA_IUALG_CMD_PAUSE = 1,
WMA_IUALG_CMD_GETSTATUS = 2,
WMA_IUALG_CMD_SETSTATUS = 3,
WMA_IUALG_CMD_USERCMDSTART = 100
}WMA_IUALGUALG_Cmd;
typedef struct {
OMX_U16 bLastBuffer;
}WMADEC_UAlgInBufParamStruct;
typedef struct
{
OMX_U32 size;
OMX_S32 iOutputFormat;
} WMADEC_UALGParams;
typedef struct {
/* Number of frames in a buffer */
unsigned long ulFrameCount;
bool ulIsLastBuffer;
}WMADEC_UAlgOutBufParamStruct;
/* =================================================================================== */
/**
* WMA Buffer Header Type
*/
/* ================================================================================== */
typedef struct LCML_WMADEC_BUFHEADERTYPE {
OMX_DIRTYPE eDir;
OMX_BUFFERHEADERTYPE* buffer;
WMADEC_UAlgInBufParamStruct *pIpParam;
/* Output Parameter Information structure */
WMADEC_UAlgOutBufParamStruct *pOpParam;
}LCML_WMADEC_BUFHEADERTYPE;
/* =================================================================================== */
/**
* Structure for buffer list
*/
/* ================================================================================== */
typedef struct _BUFFERLIST BUFFERLIST;
struct _BUFFERLIST{
OMX_U16 numBuffers;
OMX_BUFFERHEADERTYPE *pBufHdr[MAX_NUM_OF_BUFS]; /* records buffer header send by client */
OMX_U32 bufferOwner[MAX_NUM_OF_BUFS];
OMX_U32 bBufferPending[MAX_NUM_OF_BUFS];
OMX_U8 EosFlagSent;
};
typedef struct PV_OMXComponentCapabilityFlagsType
{
////////////////// OMX COMPONENT CAPABILITY RELATED MEMBERS (for opencore compatability)
OMX_BOOL iIsOMXComponentMultiThreaded;
OMX_BOOL iOMXComponentSupportsExternalOutputBufferAlloc;
OMX_BOOL iOMXComponentSupportsExternalInputBufferAlloc;
OMX_BOOL iOMXComponentSupportsMovableInputBuffers;
OMX_BOOL iOMXComponentSupportsPartialFrames;
OMX_BOOL iOMXComponentNeedsNALStartCode;
OMX_BOOL iOMXComponentCanHandleIncompleteFrames;
} PV_OMXComponentCapabilityFlagsType;
/* =================================================================================== */
/**
* RCA_HEADER. Rca data that goes to SN with the first data packet received from test app.
*/
/* ================================================================================== */
typedef struct RCA_HEADER
{
QWORD iPackets;
QWORD iPlayDuration;
OMX_U32 iMaxPacketSize;
WMADECGUID iStreamType;
OMX_U32 iTypeSpecific;
OMX_U16 iStreamNum;
OMX_U16 iFormatTag;
OMX_U16 iChannel;
OMX_U32 iSamplePerSec;
OMX_U32 iAvgBytesPerSec;
OMX_U16 iBlockAlign;
OMX_U16 iValidBitsPerSample;
OMX_U16 iNotUsed;
OMX_U32 iSamplesPerBlock;
OMX_U16 iEncodeOptV;
OMX_U32 iNotUsed2;
OMX_U8 iReplicatedDataSize;
OMX_U32 iPayload;
} RCA_HEADER;
/* =================================================================================== */
/**
* Component private data
*/
/* ================================================================================== */
typedef struct WMADEC_COMPONENT_PRIVATE
{
/** Input buffer list */
BUFFERLIST *pInputBufferList;
/** Number of input buffers at runtime */
OMX_U32 nRuntimeInputBuffers;
/** Number of output buffers at runtime */
OMX_U32 nRuntimeOutputBuffers;
/** Output buffer list */
BUFFERLIST *pOutputBufferList;
/** Structure of callback pointers */
OMX_CALLBACKTYPE cbInfo;
/** Handle for use with async callbacks */
OMX_PORT_PARAM_TYPE sPortParam;
/** Input port parameters */
OMX_AUDIO_PARAM_PORTFORMATTYPE sInPortFormat;
/** Output port parameters */
OMX_AUDIO_PARAM_PORTFORMATTYPE sOutPortFormat;
/** This will contain info like how many buffers
are there for input/output ports, their size etc, but not
BUFFERHEADERTYPE POINTERS. */
OMX_PARAM_PORTDEFINITIONTYPE* pPortDef[WMADEC_NUM_OF_PORTS];
/** WMA Component Parameters */
OMX_AUDIO_PARAM_WMATYPE* wmaParams[WMADEC_NUM_OF_PORTS];
/** This is component handle */
OMX_COMPONENTTYPE* pHandle;
/** Current state of this component */
OMX_STATETYPE curState;
/** The component thread handle */
pthread_t ComponentThread;
/** The pipes for sending buffers to the thread */
int dataPipe[2];
/** The pipes for sending buffers to the thread */
int cmdPipe[2];
/** The pipes for sending buffers to the thread */
int cmdDataPipe[2];
/** Set to indicate component is stopping */
OMX_U32 bIsStopping;
/** Flag set when the EOS marker is sent */
OMX_U32 bIsEOFSent;
/** LCML input buffers received */
OMX_U32 lcml_nCntIp;
/** LCML output buffers received */
OMX_U32 lcml_nCntOpReceived;
#ifdef __PERF_INSTRUMENTATION__
PERF_OBJHANDLE pPERF, pPERFcomp;
OMX_U32 nLcml_nCntIp;
OMX_U32 nLcml_nCntOpReceived;
#endif
/** LCML Handle */
OMX_HANDLETYPE pLcmlHandle;
/** LCML Buffer Header */
LCML_WMADEC_BUFHEADERTYPE *pLcmlBufHeader[2];
/** Sampling frequency */
int iWmaSamplingFrequeny;
/** Number of channels */
int iWmaChannels;
/** Flag for DASF mode */
int dasfmode;
/** Flag set when port definitions are allocated */
OMX_U32 bPortDefsAllocated;
/** Flag set when component thread is started */
OMX_U32 bCompThreadStarted;
/** Mark data */
OMX_PTR pMarkData;
/** Mark buffer */
OMX_MARKTYPE *pMarkBuf;
/** Mark target component */
OMX_HANDLETYPE hMarkTargetComponent;
/** Flag set when buffer should not be queued to the DSP */
OMX_U32 bBypassDSP;
/** LCML stream attributes */
LCML_STRMATTR *strmAttr;
/** Component version */
OMX_U32 nVersion;
/** WMA Header Info */
WMA_HeadInfo* pHeaderInfo;
/** WMA Header Info */
TI_OMX_DSP_DEFINITION* pDspDefinition;
/** Flag set when LCML handle is opened */
int bLcmlHandleOpened;
/** Keeps track of the number of EmptyThisBuffer() calls */
OMX_U32 nEmptyThisBufferCount;
/** Keeps track of the number of EmptyBufferDone() calls */
OMX_U32 nEmptyBufferDoneCount;
/** Flag set when init params have been initialized */
OMX_U32 bInitParamsInitialized;
/** Stores input buffers while paused */
OMX_BUFFERHEADERTYPE *pInputBufHdrPending[MAX_NUM_OF_BUFS];
/** Number of input buffers received while paused */
OMX_U32 nNumInputBufPending;
/** Stores output buffers while paused */
OMX_BUFFERHEADERTYPE *pOutputBufHdrPending[MAX_NUM_OF_BUFS];
/** Number of output buffers received while paused */
OMX_U32 nNumOutputBufPending;
/** Keeps track of the number of invalid frames that come from the LCML */
OMX_U32 nInvalidFrameCount;
/** Flags to control port enable command **/
OMX_U32 bEnableCommandPending;
/** Flag set when a disable command is pending */
OMX_U32 bDisableCommandPending;
/** Parameter for pending disable command */
OMX_U32 bEnableCommandParam;
/** Parameter for pending disable command */
OMX_U32 bDisableCommandParam;
/** Flag to set when socket node stop callback should not transition
component to OMX_StateIdle */
OMX_U32 bNoIdleOnStop;
/** Flag set when idle command is pending */
OMX_U32 bIdleCommandPending;
/** Flag set when socket node is stopped */
OMX_U32 bDspStoppedWhileExecuting;
/** Number of outstanding FillBufferDone() calls */
OMX_S32 nOutStandingFillDones;
/** ID of stream */
OMX_U32 streamID;
/** Flag set when get status is pending */
OMX_U32 bGetStatusPending;
/** Pointer to the last output buffer header queued */
OMX_BUFFERHEADERTYPE* LastOutputBufferHdrQueued;
/** Pointer to WMADEC_AudioCodecParams */
WMADEC_AudioCodecParams *pParams;
/* Pointer to WMADEC_UALGParams */
WMADEC_UALGParams *pDynParams;
/* Device string */
OMX_STRING* sDeviceString;
/**Keep buffer tickcount*/
OMX_U32 arrBufIndexTick[MAX_NUM_OF_BUFS];
/** Keep buffer timestamps **/
OMX_S64 arrBufIndex[MAX_NUM_OF_BUFS];
/** Index to arrBufIndex[], used for input buffer timestamps */
OMX_U8 IpBufindex;
/** Index to arrBufIndex[], used for output buffer timestamps */
OMX_U8 OpBufindex;
/** Flag to flush SN after EOS in order to process more buffers after EOS**/
OMX_U8 SendAfterEOS;
OMX_U8 InputEosSet;
OMX_BOOL bPreempted;
#ifdef RESOURCE_MANAGER_ENABLED
RMPROXY_CALLBACKTYPE rmproxyCallback;
#endif
/* Removing sleep() calls. Definition. */
#ifndef UNDER_CE
pthread_mutex_t AlloBuf_mutex;
pthread_cond_t AlloBuf_threshold;
OMX_U8 AlloBuf_waitingsignal;
pthread_mutex_t InLoaded_mutex;
pthread_cond_t InLoaded_threshold;
OMX_U8 InLoaded_readytoidle;
pthread_mutex_t InIdle_mutex;
pthread_cond_t InIdle_threshold;
OMX_U8 InIdle_goingtoloaded;
pthread_mutex_t codecStop_mutex;
pthread_cond_t codecStop_threshold;
OMX_U8 codecStop_waitingsignal;
pthread_mutex_t codecFlush_mutex;
pthread_cond_t codecFlush_threshold;
OMX_U8 codecFlush_waitingsignal;
OMX_U8 nUnhandledFillThisBuffers;
OMX_U8 nUnhandledEmptyThisBuffers;
OMX_BOOL bFlushOutputPortCommandPending;
OMX_BOOL bFlushInputPortCommandPending;
#else
OMX_Event AlloBuf_event;
OMX_U8 AlloBuf_waitingsignal;
OMX_Event InLoaded_event;
OMX_U8 InLoaded_readytoidle;
OMX_Event InIdle_event;
OMX_U8 InIdle_goingtoloaded;
#endif
OMX_BOOL bIsInvalidState;
void* PtrCollector[6];
/* Removing sleep() calls. Definition. */
OMX_BOOL bLoadedCommandPending;
OMX_PARAM_COMPONENTROLETYPE componentRole;
/** Count of number of buffers outstanding with bridge */
OMX_U32 lcml_nIpBuf;
/** Count of number of buffers outstanding with bridge */
OMX_U32 lcml_nOpBuf;
OMX_U32 app_nBuf;
OMX_U32 num_Reclaimed_Op_Buff;
PV_OMXComponentCapabilityFlagsType iPVCapabilityFlags;
OMX_BOOL reconfigInputPort;
OMX_BOOL reconfigOutputPort;
OMX_BOOL bConfigData;
OMX_AUDIO_PARAM_WMATYPE *wma_ip;
OMX_AUDIO_PARAM_PCMMODETYPE *wma_op;
OMX_U8 first_buffer;
RCA_HEADER *rcaheader;
struct OMX_TI_Debug dbg;
OMX_BUFFERHEADERTYPE *lastout;
} WMADEC_COMPONENT_PRIVATE;
/* =========================================================== */
/**
* OMX_ComponentInit() Initializes component
*
*
* @param hComp OMX Handle
*
* @return OMX_ErrorNone = Successful
* Other error code = fail
*
*/
/*================================================================== */
OMX_ERRORTYPE OMX_ComponentInit (OMX_HANDLETYPE hComp);
/* =========================================================== */
/**
* WMADEC_StartComponentThread() Starts component thread
*
*
* @param hComp OMX Handle
*
* @return OMX_ErrorNone = Successful
* Other error code = fail
*
*/
/*================================================================== */
OMX_ERRORTYPE WMADEC_StartComponentThread(OMX_HANDLETYPE pHandle);
/* =========================================================== */
/**
* WMADEC_StopComponentThread() Stops component thread
*
*
* @param hComp OMX Handle
*
* @return OMX_ErrorNone = Successful
* Other error code = fail
*
*/
/*================================================================== */
OMX_ERRORTYPE WMADEC_StopComponentThread(OMX_HANDLETYPE pHandle);
/* =========================================================== */
/**
* WMADEC_FreeCompResources() Frees allocated memory
*
*
* @param hComp OMX Handle
*
* @return OMX_ErrorNone = Successful
* Other error code = fail
*
*/
/*================================================================== */
OMX_ERRORTYPE WMADEC_FreeCompResources(OMX_HANDLETYPE pComponent);
/* =========================================================== */
/**
* WMADEC_GetCorresponding_LCMLHeader() Returns LCML header
* that corresponds to the given buffer
*
* @param pComponentPrivate Component private data
*
* @return OMX_ErrorNone = Successful
* Other error code = fail
*/
/*================================================================== */
OMX_ERRORTYPE WMADECGetCorresponding_LCMLHeader(WMADEC_COMPONENT_PRIVATE *pComponentPrivate,
OMX_U8 *pBuffer,
OMX_DIRTYPE eDir,
LCML_WMADEC_BUFHEADERTYPE **ppLcmlHdr);
/* =========================================================== */
/**
* WMADEC_LCML_Callback() Callback from LCML
*
* @param event Codec Event
*
* @param args Arguments from LCML
*
* @return OMX_ErrorNone = Successful
* Other error code = fail
*/
/*================================================================== */
OMX_ERRORTYPE WMADECLCML_Callback (TUsnCodecEvent event,void * args [10]);
/* =========================================================== */
/**
* WMADEC_Fill_LCMLInitParams() Fills the parameters needed
* to initialize the LCML
*
* @param pHandle OMX Handle
*
* @param plcml_Init LCML initialization parameters
*
* @return OMX_ErrorNone = Successful
* Other error code = fail
*
*/
/*================================================================== */
OMX_ERRORTYPE WMADECFill_LCMLInitParams(OMX_COMPONENTTYPE* pComponent,
LCML_DSP *plcml_Init, OMX_U16 arr[]);
/* =========================================================== */
/**
* WMADEC_GetBufferDirection() Returns direction of pBufHeader
*
* @param pBufHeader Buffer header
*
* @param eDir Buffer direction
*
* @param pComponentPrivate Component private data
*
* @return OMX_ErrorNone = Successful
* Other error code = fail
*/
/*================================================================== */
OMX_ERRORTYPE WMADECGetBufferDirection(OMX_BUFFERHEADERTYPE *pBufHeader, OMX_DIRTYPE *eDir);
/* =========================================================== */
/**
* WMADECHandleCommand() Handles commands sent via SendCommand()
*
* @param pComponentPrivate Component private data
*
* @return OMX_ErrorNone = Successful
* Other error code = fail
* @return OMX_ErrorNone = Successful
* Other error code = fail
*/
/*================================================================== */
OMX_U32 WMADECHandleCommand (WMADEC_COMPONENT_PRIVATE *pComponentPrivate);
/* =========================================================== */
/**
* WMADECFreeLCMLHandle() Frees the handle to the LCML
*
* @param pComponentPrivate Component private data
*
* @return OMX_ErrorNone = Successful
* Other error code = fail
* @return OMX_ErrorNone = Successful
* Other error code = fail
*/
/*================================================================== */
OMX_ERRORTYPE WMADECFreeLCMLHandle(WMADEC_COMPONENT_PRIVATE *pComponentPrivate);
/* =========================================================== */
/**
* WMADECHandleDataBuf_FromApp() Handles data buffers received
* from the IL Client
*
* @param pComponentPrivate Component private data
*
* @return OMX_ErrorNone = Successful
* Other error code = fail
* @return OMX_ErrorNone = Successful
* Other error code = fail
*/
/*================================================================== */
OMX_ERRORTYPE WMADECHandleDataBuf_FromApp(OMX_BUFFERHEADERTYPE *pBufHeader,
WMADEC_COMPONENT_PRIVATE *pComponentPrivate);
/* =========================================================== */
/**
* WMADECHandleDataBuf_FromLCML() Handles data buffers received
* from LCML
*
* @param pComponentPrivate Component private data
*
* @return OMX_ErrorNone = Successful
* Other error code = fail
* @return OMX_ErrorNone = Successful
* Other error code = fail
*/
/*================================================================== */
OMX_ERRORTYPE WMADECHandleDataBuf_FromLCML(WMADEC_COMPONENT_PRIVATE* pComponentPrivate,
LCML_WMADEC_BUFHEADERTYPE* msgBuffer);
/* =========================================================== */
/**
* WMADEC_FreeLCMLHandle() Frees the handle to the LCML
*
*
* @return OMX_ErrorNone = Successful
* Other error code = fail
*/
/*================================================================== */
OMX_HANDLETYPE WMADECGetLCMLHandle(WMADEC_COMPONENT_PRIVATE *pComponentPrivate);
/* =========================================================== */
/**
* WMADEC_CleanupInitParams() Starts component thread
*
* @param pComponent OMX Handle
*
* @return OMX_ErrorNone = Successful
* Other error code = fail
*/
/*================================================================== */
OMX_ERRORTYPE WMADEC_CleanupInitParams(OMX_HANDLETYPE pComponent);
/* =========================================================== */
/**
* WMADEC_SetPending() Called when the component queues a buffer
* to the LCML
*
* @param pComponentPrivate Component private data
*
* @param pBufHdr Buffer header
*
* @param eDir Direction of the buffer
*
* @return None
*/
/*================================================================== */
void WMADEC_SetPending(WMADEC_COMPONENT_PRIVATE *pComponentPrivate,
OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir);
/* =========================================================== */
/**
* WMADEC_ClearPending() Called when a buffer is returned
* from the LCML
*
* @param pComponentPrivate Component private data
*
* @param pBufHdr Buffer header
*
* @param eDir Direction of the buffer
*
* @return None
*/
/*================================================================== */
void WMADEC_ClearPending(WMADEC_COMPONENT_PRIVATE *pComponentPrivate,
OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir) ;
/* =========================================================== */
/**
* WMADEC_CommandToIdle() Called when the component is commanded
* to idle
*
* @param pComponentPrivate Component private data
*
* @return OMX_ErrorNone = Successful
* Other error code = fail
*/
/*================================================================== */
OMX_ERRORTYPE WMADEC_CommandToIdle(WMADEC_COMPONENT_PRIVATE *pComponentPrivate);
/* =========================================================== */
/**
* WMADEC_CommandToIdle() Called when the component is commanded
* to idle
*
* @param pComponentPrivate Component private data
*
* @return OMX_ErrorNone = Successful
* Other error code = fail
*/
/*================================================================== */
OMX_ERRORTYPE WMADEC_CommandToLoaded(WMADEC_COMPONENT_PRIVATE *pComponentPrivate);
/* =========================================================== */
/**
* WMADEC_CommandToExecuting() Called when the component is commanded
* to executing
*
* @param pComponentPrivate Component private data
*
* @return OMX_ErrorNone = Successful
* Other error code = fail
*/
/*================================================================== */
OMX_ERRORTYPE WMADEC_CommandToExecuting(WMADEC_COMPONENT_PRIVATE *pComponentPrivate);
/* =========================================================== */
/**
* WMADEC_CommandToPause() Called when the component is commanded
* to paused
*
* @param pComponentPrivate Component private data
*
* @return OMX_ErrorNone = Successful
* Other error code = fail
*/
/*================================================================== */
OMX_ERRORTYPE WMADEC_CommandToPause(WMADEC_COMPONENT_PRIVATE *pComponentPrivate);
/* =========================================================== */
/**
* WMADEC_CommandToWaitForResources() Called when the component is commanded
* to WaitForResources
*
* @param pComponentPrivate Component private data
*
* @return OMX_ErrorNone = Successful
* Other error code = fail
*/
/*================================================================== */
OMX_ERRORTYPE WMADEC_CommandToWaitForResources(WMADEC_COMPONENT_PRIVATE *pComponentPrivate);
/* =========================================================== */
/**
* WMADEC_IsPending()
*
*
* @param pComponentPrivate Component private data
*
* @return OMX_ErrorNone = Successful
* Other error code = fail
*/
/*================================================================== */
OMX_U32 WMADEC_IsPending(WMADEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir);
/* =========================================================== */
/**
* WMADEC_Fill_LCMLInitParamsEx() Fills the parameters needed
* to initialize the LCML without recreating the socket node
*
* @param pComponent OMX Handle
*
* @return None
*/
/*================================================================== */
OMX_ERRORTYPE WMADECFill_LCMLInitParamsEx(OMX_HANDLETYPE pComponent,OMX_U32 indexport);
/* =========================================================== */
/**
* WMADEC_IsValid() Returns whether a buffer is valid
*
*
* @param pComponentPrivate Component private data
*
* @param pBuffer Data buffer
*
* @param eDir Buffer direction
*
* @return OMX_True = Valid
* OMX_False= Invalid
*/
/*================================================================== */
OMX_U32 WMADEC_IsValid(WMADEC_COMPONENT_PRIVATE *pComponentPrivate,
OMX_U8 *pBuffer, OMX_DIRTYPE eDir) ;
/* =========================================================== */
/**
* WMADEC_TransitionToIdle() Transitions component to idle
*
*
* @param pComponentPrivate Component private data
*
* @return OMX_ErrorNone = No error
* OMX Error code = Error
*/
/*================================================================== */
OMX_ERRORTYPE WMADEC_TransitionToIdle(WMADEC_COMPONENT_PRIVATE *pComponentPrivate);
/* =========================================================== */
/**
* WMADEC_ComponentThread() Component thread
*
* @param pThreadData Thread data
*
* @cbData CallBack for ResourceManagerProxy
* @return None
*
*/
/*================================================================== */
void* WMADEC_ComponentThread (void* pThreadData);
/* ======================================================================= */
/** OMX_WMADEC_INDEXAUDIOTYPE Defines the custom configuration settings
* for the component
*pHeaderInfo
* @param OMX_IndexCustomWMADECModeDasfConfig Sets the DASF mode
*
*
*/
/* ==================================================================== */
typedef enum OMX_WMADEC_INDEXAUDIOTYPE {
OMX_IndexCustomWMADECModeDasfConfig = 0xFF000001,
OMX_IndexCustomWMADECHeaderInfoConfig,
OMX_IndexCustomWmaDecLowLatencyConfig,
OMX_IndexCustomWmaDecStreamIDConfig,
OMX_IndexCustomWmaDecDataPath,
OMX_IndexCustomDebug
}OMX_WMADEC_INDEXAUDIOTYPE;
/* =========================================================================*/
/* func GetBits */
/* */
/* desc Gets aBits number of bits from position aPosition of one buffer */
/* and returns the value in a TUint value. */
/* =========================================================================*/
OMX_U32 WMADEC_GetBits(OMX_U32* nPosition, OMX_U8 nBits, OMX_U8* pBuffer, OMX_BOOL bIcreasePosition);
/* =========================================================================*/
/* func WMADEC_Parser */
/* */
/* desc Gets the info from the Buffer to build a RCA header */
/* and returns the RCA Header filled with the data. */
/*@return OMX_ErrorNone = No error */
/* OMX Error code = Error */
/* =========================================================================*/
OMX_ERRORTYPE WMADEC_Parser(OMX_U8* pBuffer, RCA_HEADER *pStreamData, struct OMX_TI_Debug dbg);
/* =========================================================================*/
/* func WMADEC_HandleUSNError */
/* */
/* desc Handles error messages returned by the dsp */
/* */
/*@return n/a */
/* */
/* =========================================================================*/
void WMADEC_HandleUSNError (WMADEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U32 arg);
#ifdef RESOURCE_MANAGER_ENABLED
void WMAD_ResourceManagerCallback(RMPROXY_COMMANDDATATYPE cbData);
#endif
#endif