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