OmxComponentFactoryDynamicCreate()函数的实现

OmxComponentFactoryDynamicCreate()函数的上一层是FunctionPtrCreateComponent()函数,用于创建对应格式的编解码组件。

参数:OMX_OUT OMX_HANDLETYPE* pHandle,作为输出参数,指向创建的组件handle。

        OMX_IN  OMX_PTR pAppData, OMX_IN OMX_PTR pProxy, OMX_STRING aOmxLibName,指向组件的so库名。

        OMX_PTR &aOmxLib,指向so库的指针。

        OMX_PTR aOsclUuid, 指向库的UUID

        OMX_U32 &aRefCount,成功加载so库,会将此参数加1.

返回:为OMX_ERRORTYPE类型,成功无错 ,失败有错。

流程:

1)判断参数aOmxLib是否空,若为空说明为第一次调用此函数,根据so库的名字创建一个OsclSharedLibrary,用lib保存;

                                    若不为空,则直接将其值传递给lib。

2)调用lib->LoadLib(),实际为OsclSharedLibrary::LoadLib()

OSCL_EXPORT_REF OsclLibStatus OsclSharedLibrary::LoadLib()
{
    return LoadLib (iLibPath);//根据路径加载库文件。

}

3)若加载成功,将aRefCount加1,调用lib->QueryInterface(PV_OMX_SHARED_INTERFACE , (OsclAny*&)interfacePtr)

返回指针interfacePtr是指向具体格式组件共享库的接口类的。如MP3格式会指向类Mp3OmxSharedLibraryInterface。

将指针interfacePtr强制类型转换为OmxSharedLibraryInterface,用omxIntPtr保存。

4)调用omxIntPtr->QueryOmxComponentInterface(*temp(UUID), PV_OMX_CREATE_INTERFACE),进入具体格式共享库的接口类,

以MP3为例,QueryOmxComponentInterface的定义如下:

OsclAny *QueryOmxComponentInterface(const OsclUuid& aOmxTypeId, const OsclUuid& aInterfaceId)
        {
            if (PV_OMX_MP3DEC_UUID == aOmxTypeId)
            {
                if (PV_OMX_CREATE_INTERFACE == aInterfaceId)
                {
                    return ((OsclAny*)(&Mp3OmxComponentFactory ));
                }
                else if (PV_OMX_DESTROY_INTERFACE == aInterfaceId)
                {
                    return ((OsclAny*)(&Mp3OmxComponentDestructor));
                }
            }
            return NULL;
        };

可以看出根据参数,最终返回指向组件工厂函数的指针。

5)调用上面返回的组件工厂函数,创建具体格式的组件。

    (*createComp)(pHandle,作为 输出参数,类型是OMX_HANDLETYPE,如果要移植新的组件,此处应要保持一致。

                                  pAppData, pProxy, aOmxLibName, aOmxLib, aOsclUuid, aRefCount)

6)将lib传递给aOmxLib。

7)无错返回。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值