写在前面:
在学习高通多媒体架构的代码的过程中间,很多地方跑着跑着,就找不到调用的地方了,通过堆栈发现,很多找不到的东西,就被如下几个不开源的库文件给打包调用了,所以这里记录下,高通Android是如何封装调用的,以及最重要的,这个封装的包到底是什么。
封装库文件:
vendor/qcom/proprietary/prebuilt_HY11/target/product/msm8909/system/vendor/lib/下面:
libExtendedExtractor.so
libmmparser_lite.so
libmmparser.so
libavenhancements.so(会调用上面三个库文件)
。。。
下面以libavenhancements.so库为例,分析这个封装的包里面到底是什么?:
//frameworks/av/media/libavextensions/common/AVExtensionsCommon.h
typedef void *(*createFunction_t)(void);//函数指针
template <typename T>
struct ExtensionsLoader {
//根据封装库中的工厂方法名字,创建被封装的扩展类实例,返回类型是 T
static T *createInstance(const char *createFunctionName);
private:
static void loadLib();
//从封装库中间,通过名字映射方法,返回一个盒函数指针
static createFunction_t loadCreateFunction(const char *createFunctionName);
static void *mLibHandle;
};
//==============================================
//模板类,声明一个单态的模版类
/*
* Boiler-plate to declare the class as a singleton (with a static getter)
* which can b