分支自 DSP/ADSP21569/DSP-21569

graydon
2024-02-28 420778fcee054257d540cf24fbf1b1e3f9fc0d9f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#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