1类OMXMasterCoreGlobalData
成员:
OMX_U32 iNumMasterOMXInstances;初值为0
void *iInterface;
void *iOMXLibrary;
void *iMasterRegistry; 指向类型PVOMXMasterRegistryStruct,对应每一个组件,保存组件的名字,role,输入第几个core
void *iOMXCompHandles; 指向每个组件的句柄,初始化空;
OMX_U32 iTotalNumOMXComponents; 组件的总数
OMX_U32 iNumOMXCores;core的数目,等于配置文件的数目;
2 函数OMX_ERRORTYPE _OMX_MasterInit(OMXMasterCoreGlobalData *data)
1)根据配置文件获得库的列表;
2)加载库文件:libomx_sharedlibrary.so,有一个类型OsclSharedLibrary的指针lib,包含so库的内容信息,类OsclSharedLibrary就是针对so库抽象出来的的一个对象;
3)根据lib调用函数获取so库的接口指针:根据ID,进入库中,获取指向函数PVGetInterface的指针,再根据此函数获得库的指针,对应libomx_sharedlibrary.so库的代码在文件pv_omx_interface.cpp中,
4)在将指向库的指针lib,保存在一个数组中,而且数组中的顺序号对应的是库的coreNUM,pLibrary[(data->iNumOMXCores)] = lib,同时将库的接口指针也保存到一个数组中,pInterface[(data->iNumOMXCores)] = coreIntPtr;
这两个数组分别对应data中的iOMXLibrary和iInterface;
5)依次(根据core数目)根据库的接口指针调用函数GetpOMX_Init(),初始化对应库的组件;
6)GetpOMX_ComponentNameEnum枚举库中组件的名字;
7)GetpOMX_GetRolesOfComponent根据名字查询组件的role;并保存到role数组(临时数组);
8)最后将组件名和对应的role,放到iMasterRegistry中;
可以看出最后在OMXMasterCoreGlobalData 中保存了:组件名和role名;