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 /* ====================================================================== */ 93 typedef 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 */ 106 typedef 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 */ 258 OMX_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 */ 265 typedef 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