OMX_Core.c revision b44cdb1b44b144d09e8ec950d1e8e4c280064056
1fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ==================================================================== 2fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Texas Instruments OMAP(TM) Platform Software 3fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* (c) Copyright Texas Instruments, Incorporated. All Rights Reserved. 4fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 5fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Use of this software is controlled by the terms and conditions found 6fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* in the license agreement under which this software has been supplied. 7fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* ==================================================================== */ 8fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 9fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <dlfcn.h> /* For dynamic loading */ 10fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <stdio.h> 11fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <string.h> 12fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <stdlib.h> 13fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <pthread.h> 14fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <utils/Log.h> 15fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 16fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 17fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* #include "OMX_RegLib.h" */ 18fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "OMX_Component.h" 19fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "OMX_Core.h" 20fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "OMX_ComponentRegistry.h" 21fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin//#include "pvlogger.h" 22fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 23fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "ti_omx_config_parser.h" 24fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 25fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** size for the array of allocated components. Sets the maximum 26fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * number of components that can be allocated at once */ 27fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define MAXCOMP (50) 28fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define MAXNAMESIZE (130) 29fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define EMPTY_STRING "\0" 30fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 31fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** Determine the number of elements in an array */ 32fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define COUNTOF(x) (sizeof(x)/sizeof(x[0])) 33fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 34fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** Array to hold the DLL pointers for each allocated component */ 35fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic void* pModules[MAXCOMP] = {0}; 36fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 37fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** Array to hold the component handles for each allocated component */ 38fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic void* pComponents[COUNTOF(pModules)] = {0}; 39fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 40fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* count for call OMX_Init() */ 41fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint count = 0; 42fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinpthread_mutex_t mutex; 43fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 44fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint tableCount = 0; 45fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinComponentTable componentTable[MAX_TABLE_SIZE]; 46fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinchar * sRoleArray[60][20]; 47fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinchar compName[60][200]; 48fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 49fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 50fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinchar *tComponentName[MAXCOMP][2] = { 51fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*video and image components */ 52fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.JPEG.decode", "image_decoder.jpeg" }, 53fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.JPEG.encoder", "image_encoder.jpeg"}, 54fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.Video.Decoder", "video_decoder.h263"}, 55fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.Video.Decoder", "video_decoder.avc"}, 56fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.Video.Decoder", "video_decoder.mpeg2"}, 57fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.Video.Decoder", "video_decoder.mpeg4"}, 58fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.Video.Decoder", "video_decoder.wmv"}, 59fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.Video.encoder", "video_encoder.mpeg4"}, 60fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.Video.encoder", "video_encoder.h263"}, 61fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.Video.encoder", "video_encoder.avc"}, 62fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.VPP", "iv_renderer.yuv.overlay"}, 63fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.Camera", "camera.yuv"}, 64fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 65fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Speech components */ 66fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* {"OMX.TI.G729.encode", NULL}, 67fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.G729.decode", NULL}, 68fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.G722.encode", NULL}, 69fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.G722.decode", NULL}, 70fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.G711.encode", NULL}, 71fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.G711.decode", NULL}, 72fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.G723.encode", NULL}, 73fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.G723.decode", NULL}, 74fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.G726.encode", NULL}, 75fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.G726.decode", NULL}, 76fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.GSMFR.encode", NULL}, 77fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.GSMFR.decode", NULL}, */ 78fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.AMR.encode", "audio_encoder.amrnb"}, 79fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.AMR.decode", "audio_decoder.amrnb"}, 80fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.WBAMR.encode", "audio_encoder.amrwb"}, 81fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.WBAMR.decode", "audio_decoder.amrwb"}, 82fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 83fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Audio components */ 84fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.MP3.decode", "audio_decoder.mp3"}, 85fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.AAC.encode", "audio_encoder.aac"}, 86fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.AAC.decode", "audio_decoder.aac"}, 87fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* {"OMX.TI.PCM.encode", NULL}, 88fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.PCM.decode", NULL}, */ 89fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.WMA.decode", "audio_decoder.wma"}, 90fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* {"OMX.TI.RAG.decode", "audio_decoder.ra"}, 91fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.IMAADPCM.decode", NULL}, 92fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {"OMX.TI.IMAADPCM.encode", NULL}, */ 93fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 94fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* terminate the table */ 95fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin {NULL, NULL}, 96fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}; 97fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 98fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 99fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/******************************Public*Routine******************************\ 100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* OMX_Init() 101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Description:This method will initialize the OMX Core. It is the 103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* responsibility of the application to call OMX_Init to ensure the proper 104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* set up of core resources. 105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Returns: OMX_NOERROR Successful 107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Note 109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin\**************************************************************************/ 111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE TIOMX_Init() 112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin //__android_log_print(ANDROID_LOG_VERBOSE, __FILE__,"%s %d::TI:OMX_Init ",__FUNCTION__, __LINE__); 115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin count++; 117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (count == 1) 119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_init(&mutex, NULL); 121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin //__android_log_print(ANDROID_LOG_VERBOSE, __FILE__, "calling BuildComponentTable\n"); 122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = TIOMX_BuildComponentTable(); 123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin //__android_log_print(ANDROID_LOG_VERBOSE, __FILE__, "buildCOmpoentTable done\n"); 124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin //__android_log_print(ANDROID_LOG_VERBOSE, __FILE__,"%s %d:: ",__FUNCTION__, __LINE__); 126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/******************************Public*Routine******************************\ 129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* OMX_GetHandle 130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Description: This method will create the handle of the COMPONENTTYPE 132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* If the component is currently loaded, this method will reutrn the 133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* hadle of existingcomponent or create a new instance of the component. 134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* It will call the OMX_ComponentInit function and then the setcallback 135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* method to initialize the callback functions 136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Parameters: 137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param[out] pHandle Handle of the loaded components 138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param[in] cComponentName Name of the component to load 139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param[in] pAppData Used to identify the callbacks of component 140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param[in] pCallBacks Application callbacks 141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @retval OMX_ErrorUndefined 143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @retval OMX_ErrorInvalidComponentName 144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @retval OMX_ErrorInvalidComponent 145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @retval OMX_ErrorInsufficientResources 146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @retval OMX_NOERROR Successful 147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Note 149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin\**************************************************************************/ 151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE TIOMX_GetHandle( OMX_HANDLETYPE* pHandle, OMX_STRING cComponentName, 153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PTR pAppData, OMX_CALLBACKTYPE* pCallBacks) 154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin static const char prefix[] = "lib"; 156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin static const char postfix[] = ".so"; 157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE (*pComponentInit)(OMX_HANDLETYPE*); 158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE err = OMX_ErrorNone; /* This was ErrorUndefined */ 159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *componentType; 160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int i; 161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char buf[sizeof(prefix) + MAXNAMESIZE +sizeof(postfix)]; 162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin const char* pErr = dlerror(); 163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin // PVLOGGER2ANDROID((0,"OMX_Core::GetHandle IN")); 165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pthread_mutex_lock(&mutex) != 0) 166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin printf("%d :: Core: Error in Mutex lock\n",__LINE__); 168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((NULL == cComponentName) || (NULL == pHandle) || (NULL == pCallBacks)) { 171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = OMX_ErrorBadParameter; 172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Verify that the name is not too long and could cause a crash. Notice 176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * that the comparison is a greater than or equals. This is to make 177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * sure that there is room for the terminating NULL at the end of the 178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * name. */ 179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if( strlen(cComponentName) >= MAXNAMESIZE) { 180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = OMX_ErrorInvalidComponentName; 182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Locate the first empty slot for a component. If no slots 185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * are available, error out */ 186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for(i=0; i< COUNTOF(pModules); i++) { 187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pModules[i] == NULL) break; 188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(i == COUNTOF(pModules)) { 190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = OMX_ErrorInsufficientResources; 191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* load the component and check for an error. If filename is not an 195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * absolute path (i.e., it does not begin with a "/"), then the 196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * file is searched for in the following locations: 197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * The LD_LIBRARY_PATH environment variable locations 199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * The library cache, /etc/ld.so.cache. 200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * /lib 201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * /usr/lib 202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * If there is an error, we can't go on, so set the error code and exit */ 204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy(buf, prefix); /* the lengths are defined herein or have been */ 205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcat(buf, cComponentName); /* checked already, so strcpy and strcat are */ 206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcat(buf, postfix); /* are safe to use in this context. */ 207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pModules[i] = dlopen(buf, RTLD_LAZY | RTLD_GLOBAL); 208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if( pModules[i] == NULL ) { 209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf (stderr, "Failed because %s\n", dlerror()); 210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = OMX_ErrorComponentNotFound; 211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Get a function pointer to the "OMX_ComponentInit" function. If 215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * there is an error, we can't go on, so set the error code and exit */ 216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentInit = dlsym(pModules[i], "OMX_ComponentInit"); 217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if( (pErr != NULL) || (pComponentInit == NULL) ) { 218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = OMX_ErrorInvalidComponent; 219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* We now can access the dll. So, we need to call the "OMX_ComponentInit" 224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * method to load up the "handle" (which is just a list of functions to 225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * call) and we should be all set.*/ 226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *pHandle = malloc(sizeof(OMX_COMPONENTTYPE)); 227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(*pHandle == NULL) { 228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = OMX_ErrorInsufficientResources; 229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin printf("%d:: malloc of pHandle* failed\n", __LINE__); 230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponents[i] = *pHandle; 233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin componentType = (OMX_COMPONENTTYPE*) *pHandle; 234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin componentType->nSize = sizeof(OMX_COMPONENTTYPE); 235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = (*pComponentInit)(*pHandle); 236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (OMX_ErrorNone == err) { 237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = (componentType->SetCallbacks)(*pHandle, pCallBacks, pAppData); 238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (err != OMX_ErrorNone) { 239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin printf("%d :: Core: Error Returned From Component\ 240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin SetCallBack\n",__LINE__); 241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* when the component fails to initialize, release the 246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin component handle structure */ 247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin free(*pHandle); 248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* mark the component handle as NULL to prevent the caller from 249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin actually trying to access the component with it, should they 250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ignore the return code */ 251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *pHandle = NULL; 252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponents[i] = NULL; 253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dlclose(pModules[i]); 254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* err = OMX_ErrorComponentNotFound; */ 255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = OMX_ErrorNone; 258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pthread_mutex_unlock(&mutex) != 0) 260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin printf("%d :: Core: Error in Mutex unlock\n",__LINE__); 262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin // PVLOGGER2ANDROID((0,"OMX_Core::GetHandle OUT")); 264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return (err); 265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/******************************Public*Routine******************************\ 269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* OMX_FreeHandle() 270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Description:This method will unload the OMX component pointed by 272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* OMX_HANDLETYPE. It is the responsibility of the calling method to ensure that 273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* the Deinit method of the component has been called prior to unloading component 274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Parameters: 276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param[in] hComponent the component to unload 277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Returns: OMX_NOERROR Successful 279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Note 281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin\**************************************************************************/ 283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE TIOMX_FreeHandle (OMX_HANDLETYPE hComponent) 284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE retVal = OMX_ErrorUndefined; 287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)hComponent; 288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int i; 289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pthread_mutex_lock(&mutex) != 0) 291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin printf("%d :: Core: Error in Mutex lock\n",__LINE__); 293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Locate the component handle in the array of handles */ 296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for(i=0; i< COUNTOF(pModules); i++) { 297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponents[i] == hComponent) break; 298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(i == COUNTOF(pModules)) { 302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin retVal = OMX_ErrorBadParameter; 303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin retVal = pHandle->ComponentDeInit(hComponent); 307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (retVal != OMX_ErrorNone) { 308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin printf("%d :: Error From ComponentDeInit..\n",__LINE__); 309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* release the component and the component handle */ 313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dlclose(pModules[i]); 314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pModules[i] = NULL; 315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin free(pComponents[i]); 316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponents[i] = NULL; 318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin retVal = OMX_ErrorNone; 319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* The unload is now complete, so set the error code to pass and exit */ 322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pthread_mutex_unlock(&mutex) != 0) 323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin printf("%d :: Core: Error in Mutex unlock\n",__LINE__); 325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return retVal; 328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/******************************Public*Routine******************************\ 331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* OMX_DeInit() 332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Description:This method will release the resources of the OMX Core. It is the 334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* responsibility of the application to call OMX_DeInit to ensure the clean up of these 335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* resources. 336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Returns: OMX_NOERROR Successful 338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Note 340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin\**************************************************************************/ 342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE TIOMX_Deinit() 343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin count--; 345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pthread_mutex_lock(&mutex) != 0) 347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin printf("%d :: Core: Error in Mutex lock\n",__LINE__); 348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(count == 0) 350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pthread_mutex_unlock(&mutex) != 0) 352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin printf("%d :: Core: Error in Mutex unlock\n",__LINE__); 353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pthread_mutex_destroy(&mutex) != 0) { 354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*printf("%d :: Core: Error in Mutex destroy\n",__LINE__);*/ 355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else{ 358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pthread_mutex_unlock(&mutex) != 0) 359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin printf("%d :: Core: Error in Mutex unlock\n",__LINE__); 360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return OMX_ErrorNone; 363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/************************************************************************* 366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* OMX_SetupTunnel() 367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Description: Setup the specified tunnel the two components 369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Parameters: 371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param[in] hOutput Handle of the component to be accessed 372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param[in] nPortOutput Source port used in the tunnel 373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param[in] hInput Component to setup the tunnel with. 374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param[in] nPortInput Destination port used in the tunnel 375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Returns: OMX_NOERROR Successful 377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Note 379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin**************************************************************************/ 381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* OMX_SetupTunnel */ 382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_API OMX_ERRORTYPE OMX_APIENTRY TIOMX_SetupTunnel( 383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_HANDLETYPE hOutput, 384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_U32 nPortOutput, 385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_HANDLETYPE hInput, 386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_U32 nPortInput) 387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNotImplemented; 389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pCompIn, *pCompOut; 390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TUNNELSETUPTYPE oTunnelSetup; 391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (hOutput == NULL && hInput == NULL) 393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return OMX_ErrorBadParameter; 394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin oTunnelSetup.nTunnelFlags = 0; 396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin oTunnelSetup.eSupplier = OMX_BufferSupplyUnspecified; 397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompOut = (OMX_COMPONENTTYPE*)hOutput; 399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (hOutput) 401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = pCompOut->ComponentTunnelRequest(hOutput, nPortOutput, hInput, nPortInput, &oTunnelSetup); 403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError == OMX_ErrorNone && hInput) 407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompIn = (OMX_COMPONENTTYPE*)hInput; 409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = pCompIn->ComponentTunnelRequest(hInput, nPortInput, hOutput, nPortOutput, &oTunnelSetup); 410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone && hOutput) 411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* cancel tunnel request on output port since input port failed */ 413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompOut->ComponentTunnelRequest(hOutput, nPortOutput, NULL, 0, NULL); 414fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/************************************************************************* 421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* OMX_ComponentNameEnum() 422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Description: This method will provide the name of the component at the given nIndex 424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*Parameters: 426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param[out] cComponentName The name of the component at nIndex 427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param[in] nNameLength The length of the component name 428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param[in] nIndex The index number of the component 429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Returns: OMX_NOERROR Successful 431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Note 433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin**************************************************************************/ 435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_API OMX_ERRORTYPE OMX_APIENTRY TIOMX_ComponentNameEnum( 436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_OUT OMX_STRING cComponentName, 437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_U32 nNameLength, 438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_U32 nIndex) 439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nIndex >= tableCount) 443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNoMore; 445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy(cComponentName, componentTable[nIndex].name); 449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/************************************************************************* 456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* OMX_GetRolesOfComponent() 457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Description: This method will query the component for its supported roles 459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*Parameters: 461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param[in] cComponentName The name of the component to query 462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param[in] pNumRoles The number of roles supported by the component 463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param[in] roles The roles of the component 464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Returns: OMX_NOERROR Successful 466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* OMX_ErrorBadParameter Faliure due to a bad input parameter 467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Note 469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin**************************************************************************/ 471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_API OMX_ERRORTYPE TIOMX_GetRolesOfComponent ( 472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_STRING cComponentName, 473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_INOUT OMX_U32 *pNumRoles, 474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_OUT OMX_U8 **roles) 475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 i = 0; 479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 j = 0; 480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BOOL bFound = OMX_FALSE; 481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (cComponentName == NULL) 483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while(!bFound && i < tableCount) 490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (strcmp(cComponentName, componentTable[i].name) == 0) 492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin bFound = OMX_TRUE; 494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin i++; 498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (roles == NULL) 501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *pNumRoles = componentTable[i].nRoles; 503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (bFound && (*pNumRoles == componentTable[i].nRoles)) 508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (j = 0; j<componentTable[i].nRoles; j++) 510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy((OMX_STRING)roles[j], componentTable[i].pRoleArray[j]); 512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT: 516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/************************************************************************* 520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* OMX_GetComponentsOfRole() 521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Description: This method will query the component for its supported roles 523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*Parameters: 525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param[in] role The role name to query for 526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param[in] pNumComps The number of components supporting the given role 527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param[in] compNames The names of the components supporting the given role 528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Returns: OMX_NOERROR Successful 530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Note 532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin**************************************************************************/ 534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_API OMX_ERRORTYPE TIOMX_GetComponentsOfRole ( 535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_STRING role, 536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_INOUT OMX_U32 *pNumComps, 537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_INOUT OMX_U8 **compNames) 538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 i = 0; 541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 j = 0; 542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 k = 0; 543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (role == NULL) 545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* This implies that the componentTable is not filled */ 551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (componentTable[i].pRoleArray[j] == NULL) 552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i = 0; i < tableCount; i++) 559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (j = 0; j<componentTable[i].nRoles; j++) 561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (strcmp(componentTable[i].pRoleArray[j], role) == 0) 563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 564fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* the first call to this function should only count the number 565fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin of roles so that for the second call compNames can be allocated 566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin with the proper size for that number of roles */ 567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (compNames != NULL) 568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin compNames[k] = (OMX_U8*)componentTable[i].name; 570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin k++; 572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *pNumComps = k; 575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT: 578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE TIOMX_BuildComponentTable() 583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CALLBACKTYPE sCallbacks; 586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef STATIC_TABLE 587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_HANDLETYPE hComp = 0; 588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8 cRole[MAXNAMESIZE]; 589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_STRING tempName = NULL; 590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_STRING temp = NULL; 591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin static OMX_STRING namePrefix = "OMX"; 592fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin static OMX_STRING filePrefix = "libOMX."; 593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin static OMX_STRING suffix = ".so"; 594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int j = 0; 596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int numFiles = 0; 597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int i; 598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin // PVLOGGER2ANDROID((0,"OMX_Core::BuildComponentTable: IN")); 599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* set up dummy call backs */ 600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sCallbacks.EventHandler = ComponentTable_EventHandler; 601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sCallbacks.EmptyBufferDone = ComponentTable_EmptyBufferDone; 602fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sCallbacks.FillBufferDone = ComponentTable_FillBufferDone; 603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 604fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef STATIC_TABLE 605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* allocate the name table */ 606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* 607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin compName = (OMX_STRING *) malloc(MAX_TABLE_SIZE * sizeof(OMX_STRING)); 608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sRoleArray = (OMX_STRING**) malloc(MAX_TABLE_SIZE * sizeof(OMX_STRING)); 609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 610fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* scan the target/lib directory and create a list of files in the directory */ 612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin numFiles= scandir(libdir, &namelist, 0, 0); 613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tableCount = 0; 614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while (numFiles--){ 615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* check if the file is an OMX component */ 616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (strncmp(namelist[numFiles]->d_name, filePrefix, strlen(filePrefix)) == 0){ 617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* if the file is an OMX component, trim the prefix and suffix */ 619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tempName = (OMX_STRING) malloc(sizeof(namelist[numFiles]->d_name) + 1); /* adding one ensures */ 620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memset(tempName, 0x00, sizeof(namelist[numFiles]->d_name) + 1); /* that a null terminator will */ 621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* always be present */ 622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* copy only the name without the suffix */ 623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strncpy(tempName, namelist[numFiles]->d_name,strlen(namelist[numFiles]->d_name) - strlen(suffix)); 624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* set a pointer to be after the lib prefix, i.e the beginning of the component name */ 625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin temp = strstr(tempName, namePrefix); 626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* then copy the component name to the table */ 628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* 629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin compName[tableCount]= (OMX_STRING) malloc(MAXNAMESIZE); 630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strncpy(compName[tableCount], temp, strlen(temp) + 1); 632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin componentTable[tableCount].name = compName[tableCount]; 633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* get the handle for the component and query for the roles of each component */ 635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_GetHandle(&hComp, componentTable[tableCount].name, 0x0, &sCallbacks); 636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError == OMX_ErrorNone){ 637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin j = 0; 638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while (eError != OMX_ErrorNoMore){ 639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = ((OMX_COMPONENTTYPE *) hComp)->ComponentRoleEnum(hComp, cRole, j++); 640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError == OMX_ErrorNotImplemented){ 641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin j = 1; 642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nRoles = j-1; 646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin componentTable[tableCount].nRoles = nRoles; 647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* sRoleArray[tableCount] = (OMX_STRING *) malloc(nRoles * sizeof(OMX_STRING)); */ 648fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nRoles > 0){ 649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* sRoleArray[tableCount] = (OMX_STRING *) malloc(nRoles * sizeof(OMX_STRING)); */ 650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (j = 0; j<nRoles; j++) { 651fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sRoleArray[tableCount][j] = (OMX_STRING) malloc( sizeof(OMX_U8) * MAXNAMESIZE); 652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((OMX_COMPONENTTYPE *) hComp)->ComponentRoleEnum(hComp, (OMX_U8*)sRoleArray[tableCount][j], j); 653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin componentTable[tableCount].pRoleArray[j] =sRoleArray[tableCount][j]; 654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 658fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* sRoleArray[tableCount] = (OMX_STRING *) malloc(sizeof(OMX_STRING)); */ 659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sRoleArray[tableCount][j] = (OMX_STRING) malloc(sizeof(OMX_U8) * MAXNAMESIZE); 660fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy(sRoleArray[tableCount][j], EMPTY_STRING); 661fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin componentTable[tableCount].pRoleArray[j] = sRoleArray[tableCount][j]; 662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (hComp) 665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* free the component handle */ 667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_FreeHandle(hComp); 668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone){ 669fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 670fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* increment the table counter index only if above was successful */ 673fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tableCount++; 674fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (tempName != NULL) 675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 676fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin free(tempName); 677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i = 0, numFiles = 0; i < MAXCOMP; i ++) { 685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (tComponentName[i][0] == NULL) { 686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 687fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 688fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 689fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (j = 0; j < numFiles; j ++) { 690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!strcmp(componentTable[j].name, tComponentName[i][0])) { 691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* insert the role */ 692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (tComponentName[i][1] != NULL) 693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 694fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin componentTable[j].pRoleArray[componentTable[j].nRoles] = tComponentName[i][1]; 695fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin componentTable[j].nRoles ++; 696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 697fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (j == numFiles) { /* new component */ 702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (tComponentName[i][1] != NULL){ 703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin componentTable[numFiles].pRoleArray[0] = tComponentName[i][1]; 704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin componentTable[numFiles].nRoles = 1; 705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 706fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy(compName[numFiles], tComponentName[i][0]); 707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin componentTable[numFiles].name = compName[numFiles]; 708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin numFiles ++; 709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tableCount = numFiles; 712fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 713fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone){ 715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin printf("Error: Could not build Component Table\n"); 716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin // PVLOGGER2ANDROID((0,"OMX_Core::BuildComponentTable: OUT")); 718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE ComponentTable_EventHandler( 722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_HANDLETYPE hComponent, 723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_PTR pAppData, 724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_EVENTTYPE eEvent, 725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_U32 nData1, 726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_U32 nData2, 727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_PTR pEventData) 728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return OMX_ErrorNotImplemented; 730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE ComponentTable_EmptyBufferDone( 733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_OUT OMX_HANDLETYPE hComponent, 734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_OUT OMX_PTR pAppData, 735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_OUT OMX_BUFFERHEADERTYPE* pBuffer) 736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return OMX_ErrorNotImplemented; 738fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE ComponentTable_FillBufferDone( 741fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_OUT OMX_HANDLETYPE hComponent, 742fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_OUT OMX_PTR pAppData, 743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_OUT OMX_BUFFERHEADERTYPE* pBuffer) 744fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 745fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return OMX_ErrorNotImplemented; 746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_BOOL TIOMXConfigParserRedirect( 749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PTR aInputParameters, 750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PTR aOutputParameters) 751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 752fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BOOL Status = OMX_FALSE; 754b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 755fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin Status = TIOMXConfigParser(aInputParameters, aOutputParameters); 756b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return Status; 758fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 759