static struct list *construct_components(void) { struct list *head = NULL, *preload_entry; ComponentHandlePtr component_handle; /* In Chromium OS, the OMX IL Client will call preload_components() * so that the preload_list is already populated. In non-chrome case, * we need to create the list here */ if (!preload_list) { if (!create_preload_list()) { omx_verboseLog("error: Preload list cannot be populated"); } } list_foreach(preload_list, preload_entry) { CModule *cmodule; struct list *entry; OMX_ERRORTYPE ret; component_handle = (ComponentHandlePtr) preload_entry->data; /* skip libraries starting with # */ if (component_handle->comp_name[0] == '#') continue; cmodule = new CModule(component_handle->comp_name); if (!cmodule) continue; omx_verboseLog("found component library %s", component_handle->comp_name); ret = cmodule->Load(MODULE_NOW, component_handle->comp_handle); if (ret != OMX_ErrorNone) goto delete_cmodule; ret = cmodule->SetParser(component_handle->parser_handle); if (ret != OMX_ErrorNone) goto delete_cmodule; ret = cmodule->QueryComponentNameAndRoles(); if (ret != OMX_ErrorNone) goto unload_cmodule; entry = list_alloc(cmodule); if (!entry) goto unload_cmodule; head = __list_add_tail(head, entry); omx_verboseLog("module %s:%s added to component list", cmodule->GetLibraryName(), cmodule->GetComponentName()); continue; unload_cmodule: cmodule->Unload(); delete_cmodule: delete cmodule; }
static struct list *construct_components(const char *config_file_name) { FILE *config_file; char library_name[OMX_MAX_STRINGNAME_SIZE]; char config_file_path[256]; struct list *head = NULL; strncpy(config_file_path, "/etc/", 256); strncat(config_file_path, config_file_name, 256); config_file = fopen(config_file_path, "r"); if (!config_file) { strncpy(config_file_path, "./", 256); strncat(config_file_path, config_file_name, 256); config_file = fopen(config_file_path, "r"); if (!config_file) { ALOGE("not found file %s\n", config_file_name); return NULL; } } while (fscanf(config_file, "%s", library_name) > 0) { CModule *cmodule; struct list *entry; OMX_ERRORTYPE ret; library_name[OMX_MAX_STRINGNAME_SIZE-1] = '\0'; /* skip libraries starting with # */ if (library_name[0] == '#') continue; cmodule = new CModule(&library_name[0]); if (!cmodule) continue; ALOGI("found component library %s\n", library_name); ret = cmodule->Load(MODULE_LAZY); if (ret != OMX_ErrorNone) goto delete_cmodule; ret = cmodule->QueryComponentNameAndRoles(); if (ret != OMX_ErrorNone) goto unload_cmodule; entry = list_alloc(cmodule); if (!entry) goto unload_cmodule; head = __list_add_tail(head, entry); cmodule->Unload(); ALOGI("module %s:%s added to component list\n", cmodule->GetLibraryName(), cmodule->GetComponentName()); continue; unload_cmodule: cmodule->Unload(); delete_cmodule: delete cmodule; } fclose(config_file); return head; }