1 主要文件在opencore/codecs_v2/omx/omx_mp3中
omx_mp3_component.cpp
mp3_dec.cpp
omx_mp3中的内容与audio下的mp3会被编译为库文件libomx_mp3dec_sharedlibrary.so
在文件 omx_mp3_component.cpp中,函数*PVGetInterface():
OSCL_EXPORT_REF OsclAny* PVGetInterface()
{
return (OsclAny*) OSCL_NEW(Mp3OmxSharedLibraryInterface, ());
}
在通过dlopen()打开libomx_mp3dec_sharedlibrary.so后会再调用函数dlsym()获取库中函数*PVGetInterface()的地址,并调用。可见此函数会返回指向类Mp3OmxSharedLibraryInterface的指针,于是接下来的操作就会根据这个指针来进行。
2 类Mp3OmxSharedLibraryInterface
继承:类OsclSharedLibraryInterface, OmxSharedLibraryInterface
包含两个函数:
1)OsclAny *QueryOmxComponentInterface(const OsclUuid& aOmxTypeId, const OsclUuid& aInterfaceId)
参数:aOmxTypeId 用于判断是不是mp3组件,PV_OMX_MP3DEC_UUID,输入参数
aInterfaceId 接口ID,用来指明是返回组件创建函数的指针(PV_OMX_CREATE_INTERFACE) 还是 销毁函数的指针(PV_OMX_DESTROY_INTERFACE)
返回值:指针类型。
2)OsclAny *SharedLibraryLookup(const OsclUuid& aInterfaceId)
参数:aInterfaceId,输入参数 为PV_OMX_SHARED_INTERFACE
作用:将当前的指向Mp3OmxSharedLibraryInterface的指针转换为OmxSharedLibraryInterface类型。
3 函数
OSCL_EXPORT_REF OMX_ERRORTYPE Mp3OmxComponentFactory (OMX_OUT OMX_HANDLETYPE* pHandle, OMX_IN OMX_PTR pAppData, OMX_PTR pProxy, OMX_STRING aOmxLibName, OMX_PTR &aOmxLib, OMX_PTR aOsclUuid, OMX_U32 &aRefCount)
前面提到过,组件的工厂函数会在函数OmxComponentFactoryDynamicCreate中被调用。
1)实现一个类OpenmaxMp3AO,
2)调用OpenmaxMp3AO:ConstructComponent,构建组件
3)调用OpenmaxMp3AO:GetOmxHandle,获取指向OMX_HANDLETYPE的指针
组件中的函数不涉及逻辑,需要被上层来调用完成操作。