美文网首页
android OMX相关1:omx加载编码器流程

android OMX相关1:omx加载编码器流程

作者: 土贝口小土孩 | 来源:发表于2020-03-12 12:07 被阅读0次

    转载请注明:https://www.jianshu.com/p/2c378623d93c

    以RK3399平台为例,加载流程如下:

    new OMX -> new OMXMaster
    -> addVendorPlugin -> addPlugin(libstagefrighthw.so, libffmpeg_omx.so) -> addPlugin(new SoftOMXPlugin)
    -> mVendorLibHandle = dlopen(libname)
    -> createOMXPlugin = dlsym(mVendorLibHandle, "createOMXPlugin")
    -> 调用上一步从so中找到的函数(*createOMXPlugin)(), libstagefrighthw.so对应源码位于hardware_rockchip\librkvpu\libstagefrighthw
    -> 在添加libstagefrighthw.so这个插件的时候调用到了RKOMXPlugin: OMXPluginBase *createOMXPlugin()
    -> new RKOMXPlugin -> AddCore("libOMX_Core.so")  这个so对应源码位于 hardware_rockchip\omx_il\core
    -> 通过dlopen, dlsym初始化RKOMXCore* core
    -> (*(core->mInit))(); 初始化
    -> Rockchip_OMX_Core: RKOMX_Init 
    -> Rockchip_OMX_Component_Register, 通过如下数组,初始化gComponentList和gComponentNum 一共2个元素
        { "rk.omx_dec", "libomxvpu_dec.so" },
        { "rk.omx_enc", "libomxvpu_enc.so" },
    -> Rockchip_OMX_ResourceManager_Init,构建ghVideoRMComponentListMutex互斥量
    -> Rockchip_OSAL_MutexCreate(&ghLoadComponentListMutex) 构建ghLoadComponentListMutex互斥量
    -> 将构建好的加入可用plugin队列  Vector<RKOMXCore*> mCores
    -> 返回OMXMaster::addPlugin,将构建好的plugin入列 mPlugins.push_back(plugin),保存plugin的名字mPluginByComponentName.add(name8, plugin);
    

    相关文章

      网友评论

          本文标题:android OMX相关1:omx加载编码器流程

          本文链接:https://www.haomeiwen.com/subject/wdfujhtx.html