1 2/* 3 * Copyright (C) Texas Instruments - http://www.ti.com/ 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Lesser General Public 7 * License as published by the Free Software Foundation; either 8 * version 2.1 of the License, or (at your option) any later version. 9 * 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * 17 * You should have received a copy of the GNU Lesser General Public 18 * License along with this library; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20 */ 21/* ==================================================================== 22* Texas Instruments OMAP(TM) Platform Software 23* (c) Copyright Texas Instruments, Incorporated. All Rights Reserved. 24* 25* Use of this software is controlled by the terms and conditions found 26* in the license agreement under which this software has been supplied. 27* ==================================================================== */ 28 29/** LCML_dspcodec.h 30 * The LCML header file contains the definitions used by both the 31 * application and the component to access common items. 32 */ 33 34 35#ifndef __LCML_DSPCODEC_H__ 36#define __LCML_DSPCODEC_H__ 37 38#define MAX_OBJS 10 39#define MAX_STREAMS 10 40 41/* 720p implementation */ 42#define MAX_DMM_BUFFERS 20 43 44/*DSP specific*/ 45#define DSP_DOF_IMAGE "baseimage.dof" 46#define TI_PROCESSOR_DSP 0 47#define LCML_MAX_NUM_OF_DLLs 10 48#define END_OF_CR_PHASE_ARGS 0xFC25 49#define LCML_DATA_SIZE 42 50#define DMM_PAGE_SIZE 4096 51#define QUEUE_SIZE 20 52#define ROUND_TO_PAGESIZE(n) ((((n)+4095)/DMM_PAGE_SIZE)*DMM_PAGE_SIZE) 53 54#define __ERROR_PROPAGATION__ 55 56 57/*switch on/off here */ 58#ifndef UNDER_CE 59#ifdef ANDROID 60 #include <utils/Log.h> 61#endif 62#else 63 #include <oaf_osal.h> 64 #include <oaf_debug.h> 65#endif 66 67 68#ifdef __PERF_INSTRUMENTATION__ 69#include "perf.h" 70#endif 71 72#include <LCML_Types.h> 73#include <LCML_CodecInterface.h> 74#include <pthread.h> 75 76/*DSP specific*/ 77 78#define DSP_ERROR_EXIT(err, msg, label) \ 79 if (DSP_FAILED (err)) { \ 80 printf("\n****************LCML ERROR : DSP ************************\n");\ 81 printf("Error: %s : Err Num = %lx", msg, err); \ 82 eError = OMX_ErrorHardware; \ 83 printf("\n****************LCML ERROR : DSP ************************\n");\ 84 goto label; \ 85 } /**/ 86 87/* ======================================================================= */ 88/** 89 * This enum is mean to abtract the enumerations of messages that are 90 * sent to dsp processor. 91 */ 92/* ====================================================================== */ 93typedef enum { 94 DSPMSG_AUDIO_UID = 1, 95 DSPMSG_AUDIO_PARAMETERS, 96 DSPMSG_PLAY, 97 DSPMSG_PAUSE, 98 DSPMSG_STOP, 99 DSPMSG_MODE, 100 DSPMSG_PLAYCOMPLETED 101} DSP_Messages; 102 103/** 104 * USN structure 105 */ 106typedef struct 107{ 108 OMX_U32 iBufferPtr; /* storing buffer pointer MAPPED */ 109 OMX_U32 iBufferSize; /*buffer size */ 110 OMX_U32 iParamPtr;/*storing param pointer MAPPED */ 111 OMX_U32 iParamSize;/*param size */ 112 OMX_U32 iBufSizeUsed; /* Modified as USN chnages*/ 113 OMX_U32 iEOSFlag; 114 OMX_U32 tBufState; 115 OMX_U32 bBufActive; 116 OMX_U32 unBufID; 117 OMX_U32 ulReserved; 118 OMX_U32 iArmArg;/* storing dsp mapped address of structure*/ 119 OMX_U32 iArmbufferArg;/* ARM side buffer pointer*/ 120 OMX_U32 iArmParamArg;/*ARM side Param pointer*/ 121 OMX_U32 Bufoutindex;/* buffer index*/ 122 OMX_U32 BufInindex;/*buffer i/p index*/ 123 OMX_U32 iUsrArg;/*Usr argument*/ 124 OMX_U32 iStreamID; 125} TArmDspCommunicationStruct; 126 127 128 129/*API needs to be exposed to application*/ 130 131/** ======================================================================== 132* Initialise the OMX Component specific handle to LCML. The memory is 133* allocated and the dsp node is created. Add notification object to listener 134* thread. 135* 136* @param hInterface - Handle to LCML which is allocated and filled 137* @param codecName - not used 138* @param toCodecInitParams - not used yet 139* @param fromCodecInfoStruct - not used yet 140* @param pCallbacks - List of callback that uses to call OMX 141* ==========================================================================*/ 142#define LCML_InitMMCodec( \ 143 hInterface, \ 144 codecName, \ 145 toCodecInitParams, \ 146 fromCodecInfoStruct , \ 147 pCallbacks \ 148 ) \ 149 ((LCML_CODEC_INTERFACE*)hInterface)->InitMMCodec( \ 150 hInterface, \ 151 codecName, \ 152 toCodecInitParams, \ 153 fromCodecInfoStruct , \ 154 pCallbacks \ 155 ) /* Macro End */ 156 157 158#define LCML_InitMMCodecEx( \ 159 hInterface, \ 160 codecName, \ 161 toCodecInitParams, \ 162 fromCodecInfoStruct , \ 163 pCallbacks, \ 164 Args) \ 165 ((LCML_CODEC_INTERFACE*)hInterface)->InitMMCodecEx( \ 166 hInterface, \ 167 codecName, \ 168 toCodecInitParams, \ 169 fromCodecInfoStruct , \ 170 pCallbacks, \ 171 Args) /* Macro End */ 172 173/** ======================================================================== 174* The LCML_WaitForEvent Wait for a event sychronously 175* @param hInterface - Handle of the component to be accessed. This is the 176* component handle returned by the call to the GetHandle function. 177* @param event - Event occured 178* @param args - Array of "void *" that contains the associated arguments for 179* occured event 180* 181* @return OMX_ERRORTYPE 182* If the command successfully executes, the return code will be 183* OMX_NoError. Otherwise the appropriate OMX error will be returned. 184** ==========================================================================*/ 185#define LCML_WaitForEvent( \ 186 hInterface, \ 187 event, \ 188 args) \ 189 ((LCML_CODEC_INTERFACE*)hInterface)->ControlCodec( \ 190 hInterface, \ 191 event, \ 192 args) /* Macro End */ 193 194 195/** ======================================================================== 196* The LCML_QueueBuffer send data to DSP convert it into USN format and send 197* it to DSP via setbuff 198* @param [in] hInterface - Handle of the component to be accessed. This is 199* the component handle returned by the call to the GetHandle function. 200* @param bufType - type of buffer 201* @param buffer - pointer to buffer 202* @param bufferLen - length of buffer 203* @param bufferSizeUsed - length of used buffer 204* @param auxInfo - pointer to parameter 205* @param auxInfoLen - length of parameter 206* @param usrArg - not used 207* @return OMX_ERRORTYPE 208* If the command successfully executes, the return code will be 209* OMX_NoError. Otherwise the appropriate OMX error will be returned. 210* ==========================================================================*/ 211#define LCML_QueueBuffer( \ 212 hInterface, \ 213 bufType, \ 214 buffer, \ 215 bufferLen, \ 216 bufferSizeUsed, \ 217 auxInfo, \ 218 auxInfoLen, \ 219 usrArg) \ 220 ((LCML_CODEC_INTERFACE*)hInterface)->QueueBuffer( \ 221 hInterface, \ 222 bufType, \ 223 buffer, \ 224 bufferLen, \ 225 bufferSizeUsed, \ 226 auxInfo, \ 227 auxInfoLen, \ 228 usrArg) 229 230/** ======================================================================== 231* The LCML_ControlCodec send command to DSP convert it into USN format and 232* send it to DSP 233* @param hInterface - Handle of the component to be accessed. This is the 234* component handle returned by the call to the GetHandle function. 235* @param bufType - type of buffer 236* @param iCodecCmd - command refer TControlCmd 237* @param args - pointer to send some specific command to DSP 238* 239* @return OMX_ERRORTYPE 240* If the command successfully executes, the return code will be 241* OMX_NoError. Otherwise the appropriate OMX error will be returned. 242** ==========================================================================*/ 243#define LCML_ControlCodec( \ 244 hInterface, \ 245 iCodecCmd, \ 246 args) \ 247 ((LCML_CODEC_INTERFACE*)hInterface)->ControlCodec( \ 248 hInterface, \ 249 iCodecCmd, \ 250 args) /* Macro End */ 251 252 253 254 255/** 256* First function needs to be called by application 257*/ 258OMX_ERRORTYPE GetHandle (OMX_HANDLETYPE* hInterface ); 259 260/** 261* Struct derives codec interface which have interface to implement for using 262* generic codec and also have pointer to DSP specific data and have queues for 263* storing input and output data 264*/ 265typedef struct LCML_DSP_INTERFACE 266{ 267 OMX_HANDLETYPE pCodecinterfacehandle; /* handle to interface struct LCML_CODEC_INTERFACE *dspcodecinterface */ 268 struct LCML_DSP *dspCodec; 269 OMX_PTR pComponentPrivate; 270 void * iUsrArg; 271 /*queue to store USN structure*/ 272 TArmDspCommunicationStruct* Armoutputstorage[QUEUE_SIZE]; 273 TArmDspCommunicationStruct* Arminputstorage[QUEUE_SIZE]; 274 TArmDspCommunicationStruct * commStruct; 275 OMX_U32 iBufinputcount; 276 OMX_U32 iBufoutputcount; 277 OMX_U32 pshutdownFlag; 278#ifdef __ERROR_PROPAGATION__ 279 struct DSP_NOTIFICATION * g_aNotificationObjects[3]; 280#else 281 struct DSP_NOTIFICATION * g_aNotificationObjects[1]; 282#endif 283 pthread_t g_tidMessageThread; 284 OMX_U32 algcntlmapped[QUEUE_SIZE]; 285 DMM_BUFFER_OBJ *pAlgcntlDmmBuf[QUEUE_SIZE]; 286 OMX_U32 strmcntlmapped[QUEUE_SIZE]; 287 DMM_BUFFER_OBJ *pStrmcntlDmmBuf[QUEUE_SIZE]; 288 pthread_mutex_t mutex; 289 OMX_U32 flush_pending[4]; 290 OMX_BOOL bUsnEos; 291 292#ifdef __PERF_INSTRUMENTATION__ 293 PERF_OBJHANDLE pPERF, pPERFcomp; 294#endif 295 DMM_BUFFER_OBJ mapped_dmm_buffers[MAX_DMM_BUFFERS]; 296 OMX_U32 mapped_buffer_count; 297 OMX_BOOL ReUseMap; 298 pthread_mutex_t m_isStopped_mutex; 299 300}LCML_DSP_INTERFACE; 301 302#endif /* __MMDSPCODEC_H__ */ 303 304 305