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