#ifndef _MGR_MODULE_HH__
|
#define _MGR_MODULE_HH__
|
|
#include <ctime>
|
#include "typedefs.h"
|
#include "errcode.h"
|
#include "frame.hpp"
|
|
|
#define __runtime_check_begin() \
|
ufloat clock_start,clock_stop; \
|
clock_start = clock()
|
|
#define __runtime_check_end(secs) \
|
clock_stop = clock();\
|
secs = ((ufloat) (clock_stop - clock_start))/ CLOCKS_PER_SEC
|
|
|
class IModule
|
{
|
private:
|
u32 mID;
|
|
u16 mTag;
|
u16 mType ;
|
protected:
|
u16 mInputPortNum; //Ä£¿éÊäÈë¶Ë¿ÚÊýÁ¿
|
u16 mOutputPortNum; //ģʽÊä³ö¶Ë¿ÚÊýÁ¿
|
|
//Ä£¿éÊäÈë¶Ë¿Ú¶ÔÓ¦µÄÒôƵbufferÖ¸Õ룬²»¿ÉÐÞ¸ÄÄÚÈÝ
|
//Èç¹ûÖ¸ÕëΪ¿Õ£¬ËµÃ÷¸Ã¶Ë¿ÚûÓÐÊäÈë
|
const Frame** mDataIn;
|
|
//Ä£¿éÊä³ö¶Ë¿Ú¶ÔÓ¦µÄÒôƵbufferÖ¸Õë ,¿ÉÒÔÐÞ¸ÄÄÚÈÝ
|
//Èç¹ûÖ¸ÕëΪ¿Õ£¬ËµÃ÷¸Ã¶Ë¿ÚûÓÐÊä³ö
|
Frame** mDataOut;
|
|
u32 mSampleRate;
|
u32 mSampleNum;
|
|
ufloat mSecs;
|
|
public:
|
inline uvoid SetModuleInfo(u32 ID, u16 type , u16 tag) {
|
mID = ID;mTag = tag;mType = type;
|
}
|
|
inline u32 GetModuleID() {return mID;}
|
inline u32 GetModuleType() {return mType;}
|
inline u32 GetModuleTag() {return mTag;}
|
inline u16 GetModuleInputNum() {return mInputPortNum ;}
|
inline u16 GetModuleOutputNum() {return mOutputPortNum ;}
|
|
inline ErrStatus SetOutputChannelDataPtr(u16 index, Frame* data)
|
{
|
if (index >= mOutputPortNum) {
|
return ERR_PARAM;
|
}
|
mDataOut[index] = data;
|
return ErrStatus::SUCCESS;
|
}
|
|
inline ErrStatus SetInputChannelDataPtr(u16 index, const Frame* data)
|
{
|
if (index >= mInputPortNum) {
|
return ERR_PARAM;
|
}
|
mDataIn[index] = data;
|
return ErrStatus::SUCCESS;
|
}
|
|
IModule(u32 sampleRate, u32 framNum, u16 inputNum, u16 outputNum)
|
{
|
mInputPortNum = inputNum;
|
mOutputPortNum = outputNum;
|
mSampleRate = sampleRate;
|
mSampleNum = framNum;
|
mDataIn = (const Frame**)unull;
|
mDataOut = (Frame**)unull;
|
mSecs =0;
|
mID =0;
|
mTag = 0 ;
|
mType =0 ;
|
if (inputNum > 0) {
|
mDataIn = new const Frame * [inputNum];
|
for(u32 i=0;i<inputNum;i++) {
|
mDataIn[i] = (const Frame*)unull;
|
}
|
}
|
if (outputNum > 0) {
|
mDataOut = new Frame * [outputNum] ;
|
for(u32 i=0;i<outputNum;i++) {
|
mDataOut[i] = (Frame*)unull;
|
}
|
}
|
}
|
virtual ~IModule()
|
{
|
if (mDataIn) {
|
delete[] mDataIn;
|
}
|
if (mDataOut) {
|
delete[] mDataOut;
|
}
|
}
|
//²ÎÊý´«ÈëÄ£¿éÊäÈëÊä³öÁ¬ÐøÄÚ´æµØÖ·Ö¸Õë
|
virtual ErrStatus Init()
|
{
|
return ErrStatus::SUCCESS;
|
}
|
|
virtual ErrStatus Ctrl(u32 pID, const s16* val, u32 num) = 0;
|
/// <summary>
|
/// Ä£¿é´¦Àíº¯Êý
|
/// </summary>
|
/// <returns></returns>
|
virtual ErrStatus Proc() =0;
|
|
|
/// <summary>
|
/// »ñȡģ¿éµçƽ
|
/// </summary>
|
/// <param name="level">Ä£¿éµçƽָÕë</param>
|
/// <returns>Ä£¿éµçƽÊýÁ¿</returns>
|
virtual u32 GetLevel(s16* level) = 0;
|
|
/// <summary>
|
/// »ñȡģ¿éÖ´ÐÐʱ¼ä
|
/// </summary>
|
/// <returns>Ä£¿éÖ´ÐÐʱ¼ä, Ã뵥λ</returns>
|
virtual ufloat GetRuntime() { return mSecs ;}
|
};
|
|
|
#endif
|