1dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly/*--------------------------------------------------------------------------
2dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyCopyright (c) 2009, Code Aurora Forum. All rights reserved.
3dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
4dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyRedistribution and use in source and binary forms, with or without
5dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pellymodification, are permitted provided that the following conditions are met:
6dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    * Redistributions of source code must retain the above copyright
7dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      notice, this list of conditions and the following disclaimer.
8dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    * Redistributions in binary form must reproduce the above copyright
9dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      notice, this list of conditions and the following disclaimer in the
10dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      documentation and/or other materials provided with the distribution.
11dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    * Neither the name of Code Aurora nor
12dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      the names of its contributors may be used to endorse or promote
13dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      products derived from this software without specific prior written
14dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      permission.
15dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
16dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyIMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyNON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
20dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyPROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
23dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyOR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
25dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyOTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
26dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly--------------------------------------------------------------------------*/
28dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly/*============================================================================
29dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly                            O p e n M A X   w r a p p e r s
30dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly                             O p e n  M A X   C o r e
31dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
32dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  This module contains the implementation of the OpenMAX core.
33dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
34dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly*//*========================================================================*/
35dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
36dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly//////////////////////////////////////////////////////////////////////////////
37dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly//                             Include Files
38dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly//////////////////////////////////////////////////////////////////////////////
39dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
40dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly#include <dlfcn.h>           // dynamic library
41dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly#include <sys/types.h>
42dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly#include <sys/stat.h>
43dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly#include <unistd.h>
44dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly#include <string.h>
45dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly#include <stdio.h>
46dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
47dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly#include "qc_omx_core.h"
48dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly#include "omx_core_cmp.h"
49dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
50d31c34204bae71982ed9e5425cb110ebcb176f45Nick Pelly#define DEBUG_PRINT_ERROR printf
51d31c34204bae71982ed9e5425cb110ebcb176f45Nick Pelly#define DEBUG_PRINT       printf
52d31c34204bae71982ed9e5425cb110ebcb176f45Nick Pelly#define DEBUG_DETAIL      printf
53d31c34204bae71982ed9e5425cb110ebcb176f45Nick Pelly
54dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pellyextern omx_core_cb_type core[];
55dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pellyextern const unsigned int SIZE_OF_CORE;
56dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
57dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
58dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly/* ======================================================================
59dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyFUNCTION
60dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  omx_core_load_cmp_library
61dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
62dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyDESCRIPTION
63dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  Loads up the libary name mentioned in the argument
64dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
65dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyPARAMETERS
66dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  None
67dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
68dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyRETURN VALUE
69dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  Constructor for creating component instances.
70dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly========================================================================== */
71dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pellystatic create_qc_omx_component
72dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pellyomx_core_load_cmp_library(char *libname, void **handle_ptr)
73dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly{
74dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  create_qc_omx_component fn_ptr = NULL;
75dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  if(handle_ptr)
76dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  {
77dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    DEBUG_PRINT("Dynamically Loading the library : %s\n",libname);
78dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    *handle_ptr = dlopen(libname,RTLD_NOW);
79dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    if(*handle_ptr)
80dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    {
81dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      fn_ptr = dlsym(*handle_ptr, "get_omx_component_factory_fn");
82dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
83dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      if(fn_ptr == NULL)
84dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      {
85dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        DEBUG_PRINT("Error: Library %s incompatible as QCOM OMX component loader - %s\n",
86dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly                  libname, dlerror());
87dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        *handle_ptr = NULL;
88dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      }
89dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    }
90dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    else
91dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    {
92dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      DEBUG_PRINT("Error: Couldn't load %s: %s\n",libname,dlerror());
93dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    }
94dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  }
95dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  return fn_ptr;
96dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly}
97dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
98dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly/* ======================================================================
99dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyFUNCTION
100dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  OMX_Init
101dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
102dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyDESCRIPTION
103dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  This is the first function called by the application.
104dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  There is nothing to do here since components shall be loaded
105dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  whenever the get handle method is called.
106dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
107dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyPARAMETERS
108dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  None
109dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
110dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyRETURN VALUE
111dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  None.
112dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly========================================================================== */
113dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyOMX_API OMX_ERRORTYPE OMX_APIENTRY
114dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyOMX_Init()
115dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly{
116dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  DEBUG_PRINT("OMXCORE API - OMX_Init \n");
117dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  /* Nothing to do here ; shared objects shall be loaded at the get handle method */
118dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  return OMX_ErrorNone;
119dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly}
120dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
121dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly/* ======================================================================
122dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyFUNCTION
123dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  get_cmp_index
124dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
125dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyDESCRIPTION
126dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  Obtains the  index associated with the name.
127dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
128dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyPARAMETERS
129dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  None
130dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
131dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyRETURN VALUE
132dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  Error None.
133dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly========================================================================== */
134dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pellystatic int get_cmp_index(char *cmp_name)
135dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly{
136dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  int rc = -1,i=0;
137dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  DEBUG_PRINT("before get_cmp_index **********%d\n", rc);
138dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
139dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  for(i=0; i< (int)SIZE_OF_CORE; i++)
140dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  {
141dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly   DEBUG_PRINT("get_cmp_index: cmp_name = %s , core[i].name = %s ,count = %d \n",cmp_name,core[i].name,i);
142dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
143dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    if(!strcmp(cmp_name, core[i].name))
144dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    {
145dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        rc = i;
146dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        break;
147dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    }
148dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  }
149dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  DEBUG_PRINT("returning index %d\n", rc);
150dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  return rc;
151dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly}
152dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
153dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly/* ======================================================================
154dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyFUNCTION
155dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  clear_cmp_handle
156dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
157dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyDESCRIPTION
158dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  Clears the component handle from the component table.
159dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
160dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyPARAMETERS
161dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  None
162dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
163dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyRETURN VALUE
164dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  None.
165dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly========================================================================== */
166dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pellystatic void clear_cmp_handle(OMX_HANDLETYPE inst)
167dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly{
168dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  unsigned i = 0,j=0;
169dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
170dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  if(NULL == inst)
171dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly     return;
172dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
173dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  for(i=0; i< SIZE_OF_CORE; i++)
174dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  {
175dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    for(j=0; j< OMX_COMP_MAX_INST; j++)
176dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    {
177dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      if(inst == core[i].inst[j])
178dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      {
179dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        core[i].inst[j] = NULL;
180dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        return;
181dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      }
182dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    }
183dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  }
184dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  return;
185dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly}
186dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly/* ======================================================================
187dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyFUNCTION
188dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  is_cmp_handle_exists
189dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
190dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyDESCRIPTION
191dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  Check if the component handle already exists or not.
192dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
193dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyPARAMETERS
194dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  None
195dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
196dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyRETURN VALUE
197dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  index pointer if the handle exists
198dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  negative value otherwise
199dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly========================================================================== */
200dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pellystatic int is_cmp_handle_exists(OMX_HANDLETYPE inst)
201dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly{
202dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  unsigned i=0,j=0;
203dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  int rc = -1;
204dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
205dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  if(NULL == inst)
206dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly     return rc;
207dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
208dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  for(i=0; i< SIZE_OF_CORE; i++)
209dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  {
210dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    for(j=0; j< OMX_COMP_MAX_INST; j++)
211dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    {
212dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      if(inst == core[i].inst[j])
213dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      {
214dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        rc = i;
215dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        return rc;
216dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      }
217dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    }
218dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  }
219dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  return rc;
220dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly}
221dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
222dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly/* ======================================================================
223dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyFUNCTION
224dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  get_comp_handle_index
225dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
226dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyDESCRIPTION
227dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  Gets the index to store the next handle for specified component name.
228dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
229dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyPARAMETERS
230dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  cmp_name : Component Name
231dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
232dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyRETURN VALUE
233dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  Index of next handle to be stored
234dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly========================================================================== */
235dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pellystatic int get_comp_handle_index(char *cmp_name)
236dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly{
237dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  unsigned i=0,j=0;
238dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  int rc = -1;
239dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  for(i=0; i< SIZE_OF_CORE; i++)
240dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  {
241dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    if(!strcmp(cmp_name, core[i].name))
242dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    {
243dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      for(j=0; j< OMX_COMP_MAX_INST; j++)
244dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      {
245dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        if(NULL == core[i].inst[j])
246dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        {
247dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          rc = j;
248dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          DEBUG_PRINT("free handle slot exists %d\n", rc);
249dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          return rc;
250dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        }
251dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      }
252dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      break;
253dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    }
254dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  }
255dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  return rc;
256dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly}
257dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
258dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly/* ======================================================================
259dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyFUNCTION
260dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  check_lib_unload
261dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
262dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyDESCRIPTION
263dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  Check if any component instance is using the library
264dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
265dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyPARAMETERS
266dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  index: Component Index in core array.
267dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
268dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyRETURN VALUE
269dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  1: Library Unused and can be unloaded.
270dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  0:  Library used and shouldnt be unloaded.
271dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly========================================================================== */
272dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pellystatic int check_lib_unload(int index)
273dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly{
274dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  unsigned i=0;
275dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  int rc = 1;
276dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
277dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  for(i=0; i< OMX_COMP_MAX_INST; i++)
278dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  {
279dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    if(core[index].inst[i])
280dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    {
281dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      rc = 0;
282dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      DEBUG_PRINT("Library Used \n");
283dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      break;
284dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    }
285dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  }
286dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  return rc;
287dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly}
288dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly/* ======================================================================
289dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyFUNCTION
290dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  is_cmp_already_exists
291dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
292dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyDESCRIPTION
293dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  Check if the component already exists or not. Used in the
294dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  management of component handles.
295dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
296dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyPARAMETERS
297dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  None
298dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
299dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyRETURN VALUE
300dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  Error None.
301dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly========================================================================== */
302dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pellystatic int is_cmp_already_exists(char *cmp_name)
303dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly{
304dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  unsigned i    =0,j=0;
305dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  int rc = -1;
306dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  for(i=0; i< SIZE_OF_CORE; i++)
307dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  {
308dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    if(!strcmp(cmp_name, core[i].name))
309dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    {
310dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      for(j=0; j< OMX_COMP_MAX_INST; j++)
311dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      {
312dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        if(core[i].inst[j])
313dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        {
314dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          rc = i;
315dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          DEBUG_PRINT("Component exists %d\n", rc);
316dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          return rc;
317dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        }
318dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      }
319dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      break;
320dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    }
321dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  }
322dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  return rc;
323dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly}
324dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
325dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly/* ======================================================================
326dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyFUNCTION
327dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  get_cmp_handle
328dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
329dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyDESCRIPTION
330dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  Get component handle.
331dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
332dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyPARAMETERS
333dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  None
334dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
335dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyRETURN VALUE
336dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  Error None.
337dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly========================================================================== */
338dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pellyvoid* get_cmp_handle(char *cmp_name)
339dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly{
340dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  unsigned i    =0,j=0;
341dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
342dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  DEBUG_PRINT("get_cmp_handle \n");
343dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  for(i=0; i< SIZE_OF_CORE; i++)
344dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  {
345dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    if(!strcmp(cmp_name, core[i].name))
346dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    {
347dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      for(j=0; j< OMX_COMP_MAX_INST; j++)
348dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      {
349dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        if(core[i].inst[j])
350dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        {
351dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          DEBUG_PRINT("get_cmp_handle match\n");
352dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          return core[i].inst[j];
353dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        }
354dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      }
355dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    }
356dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  }
357dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  DEBUG_PRINT("get_cmp_handle returning NULL \n");
358dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  return NULL;
359dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly}
360dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
361dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly/* ======================================================================
362dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyFUNCTION
363dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  OMX_DeInit
364dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
365dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyDESCRIPTION
366dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  DeInitialize all the the relevant OMX components.
367dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
368dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyPARAMETERS
369dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  None
370dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
371dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyRETURN VALUE
372dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  Error None.
373dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly========================================================================== */
374dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyOMX_API OMX_ERRORTYPE OMX_APIENTRY
375dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyOMX_Deinit()
376dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly{
377dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  int err;
378dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  unsigned i=0,j=0;
379dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  OMX_ERRORTYPE eRet;
380dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
381dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  /* Free the dangling handles here if any */
382dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  for(i=0; i< SIZE_OF_CORE; i++)
383dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  {
384dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    for(j=0; j< OMX_COMP_MAX_INST; j++)
385dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    {
386dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      if(core[i].inst[j])
387dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      {
388dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        DEBUG_PRINT("OMX DeInit: Freeing handle for %s\n",
389dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly                     core[i].name);
390dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
391dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        /* Release the component and unload dynmaic library */
392dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        eRet = OMX_FreeHandle(core[i].inst[j]);
393dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        if(eRet != OMX_ErrorNone)
394dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          return eRet;
395dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      }
396dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    }
397dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  }
398dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  return OMX_ErrorNone;
399dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly}
400dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
401dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly/* ======================================================================
402dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyFUNCTION
403dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  OMX_GetHandle
404dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
405dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyDESCRIPTION
406dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  Constructs requested component. Relevant library is loaded if needed.
407dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
408dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyPARAMETERS
409dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  None
410dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
411dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyRETURN VALUE
412dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  Error None  if everything goes fine.
413dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly========================================================================== */
414dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
415dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly OMX_API OMX_ERRORTYPE OMX_APIENTRY
416dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyOMX_GetHandle(OMX_OUT OMX_HANDLETYPE*     handle,
417dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly              OMX_IN OMX_STRING    componentName,
418dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly              OMX_IN OMX_PTR             appData,
419dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly              OMX_IN OMX_CALLBACKTYPE* callBacks)
420dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly{
421dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  OMX_ERRORTYPE  eRet = OMX_ErrorNone;
422dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  int cmp_index = -1;
423dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  int hnd_index = -1;
424dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
425dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  DEBUG_PRINT("OMXCORE API :  Get Handle %x %s %x\n",(unsigned) handle,
426dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly                                                     componentName,
427dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly                                                     (unsigned) appData);
428dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  if(handle)
429dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  {
430dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    struct stat sd;
431dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
432dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    *handle = NULL;
43330a73034f38ba1cf31de98ce2560109ce6e535a6Nick Pelly    if(stat("/dev/pmem_adsp",&sd) != 0)
434dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        return OMX_ErrorInsufficientResources;
435dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
436dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    cmp_index = get_cmp_index(componentName);
437dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
438dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    if(cmp_index >= 0)
439dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    {
440dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly       DEBUG_PRINT("getting fn pointer\n");
441dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
442dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      // dynamically load the so
443dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      core[cmp_index].fn_ptr =
444dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        omx_core_load_cmp_library(core[cmp_index].so_lib_name,
445dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly                                  &core[cmp_index].so_lib_handle);
446dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
447dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      if(core[cmp_index].fn_ptr)
448dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      {
449dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        // Construct the component requested
450dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        // Function returns the opaque handle
451dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        void* pThis = (*(core[cmp_index].fn_ptr))();
452dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        if(pThis)
453dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        {
454dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          void *hComp = NULL;
455dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          hComp = qc_omx_create_component_wrapper((OMX_PTR)pThis);
456dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          if((eRet = qc_omx_component_init(hComp, core[cmp_index].name)) !=
457dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly                           OMX_ErrorNone)
458dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          {
459dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly              DEBUG_PRINT("Component not created succesfully\n");
460dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly              return eRet;
461dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
462dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          }
463dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          qc_omx_component_set_callbacks(hComp,callBacks,appData);
464dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          hnd_index = get_comp_handle_index(componentName);
465dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          if(hnd_index >= 0)
466dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          {
467dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly            core[cmp_index].inst[hnd_index]= *handle = (OMX_HANDLETYPE) hComp;
468dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          }
469dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          else
470dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          {
471dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly            DEBUG_PRINT("OMX_GetHandle:NO free slot available to store Component Handle\n");
472dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly            return OMX_ErrorInsufficientResources;
473dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          }
474dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          DEBUG_PRINT("Component %x Successfully created\n",(unsigned)*handle);
475dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        }
476dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        else
477dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        {
478dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          eRet = OMX_ErrorInsufficientResources;
479dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          DEBUG_PRINT("Component Creation failed\n");
480dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        }
481dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      }
482dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      else
483dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      {
484dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        eRet = OMX_ErrorNotImplemented;
485dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        DEBUG_PRINT("library couldnt return create instance fn\n");
486dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      }
487dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
488dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    }
489dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    else
490dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    {
491dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      eRet = OMX_ErrorNotImplemented;
492dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      DEBUG_PRINT("ERROR: Already another instance active  ;rejecting \n");
493dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    }
494dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  }
495dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  else
496dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  {
497dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    eRet =  OMX_ErrorBadParameter;
498dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    DEBUG_PRINT("\n OMX_GetHandle: NULL handle \n");
499dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  }
500dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  return eRet;
501dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly}
502dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly/* ======================================================================
503dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyFUNCTION
504dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  OMX_FreeHandle
505dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
506dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyDESCRIPTION
507dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  Destructs the component handles.
508dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
509dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyPARAMETERS
510dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  None
511dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
512dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyRETURN VALUE
513dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  Error None.
514dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly========================================================================== */
515dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyOMX_API OMX_ERRORTYPE OMX_APIENTRY
516dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyOMX_FreeHandle(OMX_IN OMX_HANDLETYPE hComp)
517dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly{
518dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  OMX_ERRORTYPE eRet = OMX_ErrorNone;
519dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  int err = 0, i = 0;
520dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  DEBUG_PRINT("OMXCORE API :  Free Handle %x\n",(unsigned) hComp);
521dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
522dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  // 0. Check that we have an active instance
523dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  if((i=is_cmp_handle_exists(hComp)) >=0)
524dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  {
525dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    // 1. Delete the component
526dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    if ((eRet = qc_omx_component_deinit(hComp)) == OMX_ErrorNone)
527dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    {
528dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        /* Unload component library */
529090b8e2b897c4f59d0bbafe983390c2e22c972feNick Pelly    if( ((unsigned int)i < SIZE_OF_CORE) && core[i].so_lib_handle)
530dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    {
531dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly           if(check_lib_unload(i))
532dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly           {
533dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly              DEBUG_PRINT_ERROR(" Unloading the dynamic library for %s\n",
534dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly                                  core[i].name);
535dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly              err = dlclose(core[i].so_lib_handle);
536dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly              if(err)
537dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly              {
538dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly                  DEBUG_PRINT_ERROR("Error %d in dlclose of lib %s\n",
539dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly                                     err,core[i].name);
540dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly              }
541dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly              core[i].so_lib_handle = NULL;
542dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly           }
543dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    }
544dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    clear_cmp_handle(hComp);
545dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    }
546dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    else
547dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    {
548dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    DEBUG_PRINT(" OMX_FreeHandle failed on %x\n",(unsigned) hComp);
549dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        return eRet;
550dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    }
551dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  }
552dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  else
553dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  {
554dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    DEBUG_PRINT_ERROR("OMXCORE Warning: Free Handle called with no active instances\n");
555dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  }
556dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  return OMX_ErrorNone;
557dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly}
558dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly/* ======================================================================
559dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyFUNCTION
560dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  OMX_SetupTunnel
561dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
562dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyDESCRIPTION
563dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  Not Implemented.
564dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
565dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyPARAMETERS
566dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  None
567dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
568dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyRETURN VALUE
569dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  None.
570dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly========================================================================== */
571dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyOMX_API OMX_ERRORTYPE OMX_APIENTRY
572dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyOMX_SetupTunnel(OMX_IN OMX_HANDLETYPE outputComponent,
573dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly                OMX_IN OMX_U32             outputPort,
574dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly                OMX_IN OMX_HANDLETYPE  inputComponent,
575dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly                OMX_IN OMX_U32              inputPort)
576dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly{
577dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  /* Not supported right now */
578dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  DEBUG_PRINT("OMXCORE API: OMX_SetupTunnel Not implemented \n");
579dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  return OMX_ErrorNotImplemented;
580dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly}
581dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly/* ======================================================================
582dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyFUNCTION
583dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  OMX_GetContentPipe
584dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
585dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyDESCRIPTION
586dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  Not Implemented.
587dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
588dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyPARAMETERS
589dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  None
590dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
591dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyRETURN VALUE
592dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  None.
593dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly========================================================================== */
594dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyOMX_API OMX_ERRORTYPE
595dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyOMX_GetContentPipe(OMX_OUT OMX_HANDLETYPE* pipe,
596dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly                   OMX_IN OMX_STRING        uri)
597dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly{
598dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  /* Not supported right now */
599dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  DEBUG_PRINT("OMXCORE API: OMX_GetContentPipe Not implemented \n");
600dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  return OMX_ErrorNotImplemented;
601dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly}
602dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
603dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly/* ======================================================================
604dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyFUNCTION
605dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  OMX_GetComponentNameEnum
606dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
607dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyDESCRIPTION
608dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  Returns the component name associated with the index.
609dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
610dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyPARAMETERS
611dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  None
612dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
613dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyRETURN VALUE
614dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  None.
615dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly========================================================================== */
616dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyOMX_API OMX_ERRORTYPE OMX_APIENTRY
617dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyOMX_ComponentNameEnum(OMX_OUT OMX_STRING componentName,
618dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly                      OMX_IN  OMX_U32          nameLen,
619dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly                      OMX_IN  OMX_U32            index)
620dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly{
621dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  OMX_ERRORTYPE eRet = OMX_ErrorNone;
622dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  DEBUG_PRINT("OMXCORE API - OMX_ComponentNameEnum %x %d %d\n",(unsigned) componentName
623dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly                                                              ,(unsigned)nameLen
624dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly                                                              ,(unsigned)index);
625dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  if(index < SIZE_OF_CORE)
626dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  {
627dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    #ifdef _ANDROID_
628dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    strlcpy(componentName, core[index].name,nameLen);
629dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    #else
630dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    strncpy(componentName, core[index].name,nameLen);
631dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    #endif
632dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  }
633dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  else
634dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  {
635dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    eRet = OMX_ErrorNoMore;
636dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  }
637dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  return eRet;
638dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly}
639dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
640dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly/* ======================================================================
641dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyFUNCTION
642dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  OMX_GetComponentsOfRole
643dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
644dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyDESCRIPTION
645dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  Returns the component name which can fulfill the roles passed in the
646dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  argument.
647dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
648dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyPARAMETERS
649dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  None
650dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
651dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyRETURN VALUE
652dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  None.
653dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly========================================================================== */
654dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyOMX_API OMX_ERRORTYPE
655dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyOMX_GetComponentsOfRole(OMX_IN OMX_STRING      role,
656dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly                        OMX_INOUT OMX_U32* numComps,
657dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly                        OMX_INOUT OMX_U8** compNames)
658dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly{
659dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  OMX_ERRORTYPE eRet = OMX_ErrorNone;
660dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  unsigned i,j,namecount=0;
661dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
662dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  printf(" Inside OMX_GetComponentsOfRole \n");
663dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
664dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  /*If CompNames is NULL then return*/
665dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  if (compNames == NULL)
666dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  {
667dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      if (numComps == NULL)
668dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      {
669dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          eRet = OMX_ErrorBadParameter;
670dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      }
671dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      else
672dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  {
673dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    *numComps          = 0;
674dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    for (i=0; i<SIZE_OF_CORE;i++)
675dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    {
676dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      for(j=0; j<OMX_CORE_MAX_CMP_ROLES && core[i].roles[j] ; j++)
677dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      {
678dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        if(!strcmp(role,core[i].roles[j]))
679dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        {
680dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly                  (*numComps)++;
681dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly              }
682dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly            }
683dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          }
684dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      }
685dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      return eRet;
686dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  }
687dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
688dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  if(numComps)
689dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  {
690dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      namecount = *numComps;
691dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
692dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      if (namecount == 0)
693dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      {
694dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          return OMX_ErrorBadParameter;
695dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      }
696dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
697dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    *numComps          = 0;
698dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
699dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    for (i=0; i<SIZE_OF_CORE;i++)
700dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    {
701dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      for(j=0; j<OMX_CORE_MAX_CMP_ROLES && core[i].roles[j] ; j++)
702dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      {
703dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        if(!strcmp(role,core[i].roles[j]))
704dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          {
705dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly            #ifdef _ANDROID_
706dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly            strlcpy((char *)compNames[*numComps],core[i].name, OMX_MAX_STRINGNAME_SIZE);
707dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly            #else
708dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly            strncpy((char *)compNames[*numComps],core[i].name, OMX_MAX_STRINGNAME_SIZE);
709dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly            #endif
710dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          (*numComps)++;
711dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          break;
712dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        }
713dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      }
714dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          if (*numComps == namecount)
715dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          {
716dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          break;
717dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        }
718dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    }
719dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  }
720dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  else
721dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  {
722dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    eRet = OMX_ErrorBadParameter;
723dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  }
724dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
725dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  printf(" Leaving OMX_GetComponentsOfRole \n");
726dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  return eRet;
727dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly}
728dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly/* ======================================================================
729dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyFUNCTION
730dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  OMX_GetRolesOfComponent
731dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
732dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyDESCRIPTION
733dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  Returns the primary role of the components supported.
734dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
735dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyPARAMETERS
736dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  None
737dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
738dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyRETURN VALUE
739dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  None.
740dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly========================================================================== */
741dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyOMX_API OMX_ERRORTYPE
742dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyOMX_GetRolesOfComponent(OMX_IN OMX_STRING compName,
743dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly                        OMX_INOUT OMX_U32* numRoles,
744dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly                        OMX_OUT OMX_U8** roles)
745dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly{
746dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  /* Not supported right now */
747dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  OMX_ERRORTYPE eRet = OMX_ErrorNone;
748dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  unsigned i,j,numofroles = 0;;
749dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  DEBUG_PRINT("GetRolesOfComponent %s\n",compName);
750dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
751dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  if (roles == NULL)
752dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  {
753dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      if (numRoles == NULL)
754dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      {
755dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly         eRet = OMX_ErrorBadParameter;
756dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      }
757dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      else
758dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      {
759dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly         *numRoles = 0;
760dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly         for(i=0; i< SIZE_OF_CORE; i++)
761dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly         {
762dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly           if(!strcmp(compName,core[i].name))
763dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly           {
764dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly             for(j=0; (j<OMX_CORE_MAX_CMP_ROLES) && core[i].roles[j];j++)
765dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly             {
766dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly                (*numRoles)++;
767dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly             }
768dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly             break;
769dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly           }
770dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly         }
771dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
772dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      }
773dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      return eRet;
774dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  }
775dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
776dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  if(numRoles)
777dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  {
778dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    if (*numRoles == 0)
779dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    {
780dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        return OMX_ErrorBadParameter;
781dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    }
782dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
783dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    numofroles = *numRoles;
784dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    *numRoles = 0;
785dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    for(i=0; i< SIZE_OF_CORE; i++)
786dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    {
787dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      if(!strcmp(compName,core[i].name))
788dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      {
789dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        for(j=0; (j<OMX_CORE_MAX_CMP_ROLES) && core[i].roles[j];j++)
790dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        {
791dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          if(roles && roles[*numRoles])
792dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          {
793dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly            #ifdef _ANDROID_
794dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly            strlcpy((char *)roles[*numRoles],core[i].roles[j],OMX_MAX_STRINGNAME_SIZE);
795dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly            #else
796dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly            strncpy((char *)roles[*numRoles],core[i].roles[j],OMX_MAX_STRINGNAME_SIZE);
797dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly            #endif
798dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          }
799dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          (*numRoles)++;
800dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          if (numofroles == *numRoles)
801dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          {
802dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly              break;
803dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly          }
804dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        }
805dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly        break;
806dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly      }
807dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    }
808dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  }
809dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  else
810dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  {
811dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    DEBUG_PRINT("ERROR: Both Roles and numRoles Invalid\n");
812dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    eRet = OMX_ErrorBadParameter;
813dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  }
814dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly  return eRet;
815dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly}
816dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
817dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyOMX_API OMX_BOOL
818dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick PellyOMXConfigParser(
819dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    OMX_PTR aInputParameters,
820dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    OMX_PTR aOutputParameters)
821dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly{
822dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    OMX_BOOL Status = OMX_TRUE;
823dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    VideoOMXConfigParserOutputs *aOmxOutputParameters;
824dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    OMXConfigParserInputs *aOmxInputParameters;
825dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    aOmxOutputParameters = (VideoOMXConfigParserOutputs *)aOutputParameters;
826dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    aOmxInputParameters = (OMXConfigParserInputs *)aInputParameters;
827dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
828dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    aOmxOutputParameters->width = 176; //setting width to QCIF
829dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    aOmxOutputParameters->height = 144; //setting height to QCIF
830dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
831dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    //TODO
832dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    //Qcom component do not use the level/profile from IL client .They are parsing the first buffer
833dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    //sent in ETB so for now setting the defalut values . Going farward we can call
834dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    //QC parser here.
835dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    if (0 == strcmp(aOmxInputParameters->cComponentRole, (OMX_STRING)"video_decoder.avc"))
836dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    {
837dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly       aOmxOutputParameters->profile = 66; //minimum supported h264 profile - setting to baseline profile
838dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly       aOmxOutputParameters->level = 0;  // minimum supported h264 level
839dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    }
840dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    else if ((0 == strcmp(aOmxInputParameters->cComponentRole, (OMX_STRING)"video_decoder.mpeg4")) || (0 == strcmp(aOmxInputParameters ->cComponentRole, (OMX_STRING)"video_decoder.h263")))
841dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    {
842dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly       aOmxOutputParameters->profile = 8; //minimum supported h263/mpeg4 profile
843dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly       aOmxOutputParameters->level = 0; // minimum supported h263/mpeg4 level
844dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    }
845dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly
846dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly    return Status;
847dcbe497a7b22a4e1e52189ea70bf75227f55aa8eNick Pelly}
848