/* * Copyright (c) Hisilicon Technologies Co., Ltd. 2012-2019. All rights reserved. * Description: interface for the IPlugin class. * Author: DTV stack software group * Create: 2012-09-18 */ #ifndef IPLUGIN_H #define IPLUGIN_H #include #include "IPluginCallback.h" #define PLUGIN_NOT_IMPLIMENT (-2) #define DTV_PLUGIN_PATH_LENGTH 256 class IPlugin : public android::RefBase { public: virtual SVR_S32 invoke(const android::Parcel &request, android::Parcel *reply) const = 0; virtual SVR_U32 getStartCmd() const = 0; virtual SVR_U32 getEndCmd() const = 0; virtual SVR_S32 regMsgHandler(IPluginCallback *callback) = 0; virtual SVR_S32 unRegMsgHandler(IPluginCallback *callback) = 0; virtual ~IPlugin(){}; }; typedef IPlugin *(*PFN_CREATE_PLUGIN)(); typedef SVR_S32 (*PFN_DESTROY_PLUGIN)(IPlugin *plugin); typedef struct { IPlugin *pInstance; /* Q: do we need multi-instance ? */ PFN_CREATE_PLUGIN fnCreateInstance; /* constructor */ PFN_DESTROY_PLUGIN fnDestroyInstance; /* destructor */ SVR_VOID *pHandle; /* save dlopen handle */ SVR_CHAR acLibName[DTV_PLUGIN_PATH_LENGTH]; /* save plugin name, can not init twice */ } DOL_DTV_PLUGIN_S; extern "C" { IPlugin *createInstance(); SVR_S32 destroyInstance(IPlugin *plugin); } #endif // __PLUGIN_H__