Android MultiMedia框架——OMX服务启动
Android MultiMedia框架——OMXPlugin
Android MultiMedia框架——MediaCodec编码(上)
Android MultiMedia框架——MediaCodec编码(下)
上一篇OMX服务启动有 提到OMXMaster添加两个Plugin,一个是SoftOMXPlugin,另一个是供应商实现的硬件Plugin,其父类是OMXPluginBase。
OMXPluginBase
路径:frameworks/native/headers/media_plugin/media/hardware/OMXPluginBase.h
OMXPluginBase 主要包含四个虚拟方法。硬件厂商接入自己的编解码器,需要继承OMXPluginBase 类,并实现抽象方法。
struct OMXPluginBase {
OMXPluginBase() {
}
virtual ~OMXPluginBase() {
}
virtual OMX_ERRORTYPE makeComponentInstance(
const char *name,
const OMX_CALLBACKTYPE *callbacks,
OMX_PTR appData,
OMX_COMPONENTTYPE **component) = 0;
virtual OMX_ERRORTYPE destroyComponentInstance(
OMX_COMPONENTTYPE *component) = 0;
virtual OMX_ERRORTYPE enumerateComponents(
OMX_STRING name,
size_t size,
OMX_U32 index) = 0;
virtual OMX_ERRORTYPE getRolesOfComponent(
const char *name,
Vector<String8> *roles) = 0;
private:
OMXPluginBase(const OMXPluginBase &);
OMXPluginBase &operator=(const OMXPluginBase &);
};
先看下硬件厂商实现的Plugin
QComOMXPlugin
路径:hardware/qcom/media/**/libstagefrighthw/QComOMXPlugin.cpp
QComOMXPlugin继承自OMXPluginBase,是高通实现的硬编解码。
OMXPluginBase *createOMXPlugin() {
return new QComOMXPlugin;
}
QComOMXPlugin::QComOMXPlugin()
: mLibHandle(dlopen("libOmxCore.so", RTLD_NOW)),
mInit(NULL),
mDeinit(NULL),
mComponentNameEnum(NULL),
mGetHandle(NULL),
mFreeHandle(NULL),
mGetRolesOfComponentHandle(NULL) {
if (mLibHandle != NULL) {
mInit = (InitFunc)