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