stagefright 架构分析(七) 动态加载libstagefrighthw.so
来源:互联网 发布:华云数据最新消息 编辑:程序博客网 时间:2024/05/18 06:16
在加载软解码库的代码中,可以看到有加载libstagefrighthw.so的代码,其是加载硬件解码plugin,每个平台都有自己libstagefrighthw.so的实现,以实现硬编解码,以高通平台为例:
OMXMaster::OMXMaster()
: mVendorLibHandle(NULL) {
//加入硬解码Plugin
addVendorPlugin();
addPlugin(new SoftOMXPlugin);
}
void OMXMaster::addVendorPlugin() {
addPlugin("libstagefrighthw.so");
}
void OMXMaster::addPlugin(const char *libname) {
//dlopen库
mVendorLibHandle = dlopen(libname, RTLD_NOW);
if (mVendorLibHandle == NULL) {
return;
}
typedef OMXPluginBase *(*CreateOMXPluginFunc)();
CreateOMXPluginFunc createOMXPlugin =
(CreateOMXPluginFunc)dlsym(
mVendorLibHandle, "createOMXPlugin");
if (!createOMXPlugin)
createOMXPlugin = (CreateOMXPluginFunc)dlsym(
mVendorLibHandle, "_ZN7android15createOMXPluginEv");
//调用libstagefrighthw.so库中的createOMXPlugin
if (createOMXPlugin) {
addPlugin((*createOMXPlugin)());
}
}
在高通的平台下,OMXPlugin的实现在QComOMXPlugin.h
//接口继承OMXPluginBase
struct QComOMXPlugin : public OMXPluginBase {
}
OMXPluginBase *createOMXPlugin() {
return new QComOMXPlugin;
}
QComOMXPlugin::QComOMXPlugin()
//Omx核心实现是libOmxCore.so
: mLibHandle(dlopen("libOmxCore.so", RTLD_NOW)),
mInit(NULL),
mDeinit(NULL),
mComponentNameEnum(NULL),
mGetHandle(NULL),
mFreeHandle(NULL),
mGetRolesOfComponentHandle(NULL) {
if (mLibHandle != NULL) {
//下面是OMX提供的标准接口函数
mInit = (InitFunc)dlsym(mLibHandle, "OMX_Init");
mDeinit = (DeinitFunc)dlsym(mLibHandle, "OMX_Deinit");
mComponentNameEnum =
(ComponentNameEnumFunc)dlsym(mLibHandle, "OMX_ComponentNameEnum");
mGetHandle = (GetHandleFunc)dlsym(mLibHandle, "OMX_GetHandle");
mFreeHandle = (FreeHandleFunc)dlsym(mLibHandle, "OMX_FreeHandle");
mGetRolesOfComponentHandle =
(GetRolesOfComponentFunc)dlsym(
mLibHandle, "OMX_GetRolesOfComponent");
(*mInit)();
}
}
- stagefright 架构分析(七) 动态加载libstagefrighthw.so
- [StageFright分析] StageFright的总体架构
- stagefright 架构分析(一) stagefright 介绍
- stagefright 架构分析(二) TimedEventQueue
- stagefright 架构分析(四) MediaExtractor
- stagefright 架构分析(三) stagefright 功能和调用流程
- stagefright 架构分析(五) 初始化 VideoDecoder
- 动态加载so
- 动态加载so
- Android动态加载so
- Android 动态加载so
- android 动态加载.so
- 动态加载so文件
- 动态加载so库
- stagefright架构
- so 动态加载库 Hotpatch
- android动态加载so库
- 动态加载so库文件
- 辞职也要讲技巧
- 使用OpenSSL生成私钥(Private Key)以及根据Private Key创建证书
- flex 文件下载和上传
- c++ template 函数模板
- dp uva-116-Unidirectional TSP
- stagefright 架构分析(七) 动态加载libstagefrighthw.so
- 线程与进程的区别
- O(n) 求 最长回文子串
- 初写页游游戏的记录
- Excel通用导出List<Object>对象到excel文件
- Mastering OpenCV with Practical Computer Vision Projects
- Cocoa简单的excel生成多语言strings文件工具
- android学习之路:开始
- VC6.0实现鼠标光标形状及大小的定制