From f41a0f70a05fbed9ccbf4b8c6d9df87147fde374 Mon Sep 17 00:00:00 2001
From: chenlh <2008get@163.com>
Date: 星期五, 14 十一月 2025 18:02:07 +0800
Subject: [PATCH] GEQ参数ID变更
---
src/tob.cpp | 215 ++++++++++++++++++++++++++++++++++++++---------------
1 files changed, 153 insertions(+), 62 deletions(-)
diff --git a/src/tob.cpp b/src/tob.cpp
index e0eecab..c853129 100644
--- a/src/tob.cpp
+++ b/src/tob.cpp
@@ -16,28 +16,24 @@
#include "../drv/memory.h"
-//#define DEBUG
-#ifdef DEBUG
-#define dbg_printf printf
-#else
-#define dbg_printf
-#endif
-static ToB* tob = NULL;
-ToB* ToB::GetInstance()
-{
- return tob;
-}
+
+//static ToB* tob = NULL;
+
+//ToB* ToB::GetInstance()
+//{
+// return tob;
+//}
ToB::ToB(ubool dualDsp, u32 dspIndex )
- : dual_dsp(dualDsp), dsp_index(dspIndex),mList(32)
+ : dual_dsp(dualDsp), dsp_index(dspIndex)
{
- if(tob != NULL) {
- delete tob;
- }
- tob = this;
- frames = NULL;
+// if(tob != NULL) {
+// delete tob;
+// }
+// tob = this;
+ frames = nullptr;
processed = ufalse;
mModuleNum =0;
mModuleIndex.resize(0);
@@ -47,7 +43,7 @@
ToB::~ToB()
{
toClear();
- tob = NULL;
+// tob = NULL;
delete paramset;
}
@@ -58,16 +54,23 @@
ErrStatus ToB::toClear()
{
processed = ufalse;
+ int i = 0;
- for (std::vector<IModule*>::iterator iter = mList.begin();
- iter != mList.end() ;iter++) {
- delete *iter;
+// for (std::vector<IModule*>::iterator iter = mList.begin(); iter != mList.end(); iter++, ++i) {
+// delete *iter;
+// *iter = nullptr;
+// }
+ for (auto iter : mList) {
+ delete iter;
+ iter = nullptr;
}
+
mList.clear();
mModuleIndex.clear();
if(frames != NULL) {
delete frames;
+ frames = nullptr;
}
mModuleNum = 0;
@@ -95,7 +98,6 @@
u32 size = sizeof(FlowChartHead);
u32 nPhyInput =0 ,nPhyOutput=0;
-
frames = new Frames(head->dsp_buffer_num[dsp_index]);
do {
@@ -123,14 +125,14 @@
if (pmod->mDsp != dsp_index) continue;
-#ifdef DEBUG
+#if DEBUG
dbg_printf("Module ID %d type %d rxnum %d txnum %d. \n",pmod->mID ,pmod->mType, pmod->mRxNum,pmod->mTxNum);
#endif
// if(pmod->mID == 394) {
// int ddr = sram_free_space(SRAM_DDR);
// int ccm = sram_free_space(SRAM_CCM);
// int l1 = sram_free_space(SRAM_L1);
-// printf("ddr %d ccm %d l1 %d.\n",ddr, ccm ,l1);
+// dbg_printf("ddr %d ccm %d l1 %d.\n",ddr, ccm ,l1);
// }
IModule* m = CreateBaseModule(pmod->mType,pmod->mTag, pmod->mRxNum,pmod->mTxNum);
if(!m) {
@@ -187,24 +189,63 @@
if (size != nbytes) {
dbg_printf("check flowchart some error!\n");
}
- dbg_printf("Phy InputNum %d, Output Num %d\n",nPhyInput,nPhyOutput);
+// dbg_printf("Phy InputNum %d, Output Num %d\n",nPhyInput,nPhyOutput);
SetNumOfChannels(IntDataType::TDM , nPhyInput, nPhyOutput);
return ErrStatus::SUCCESS;
}
+
+#ifdef DEBUG
+ const s8* type_string[ModuleType::PROC_COUNT] = {
+ "none"
+ ,"input"
+ ,"meter"
+ ,"peq"
+ ,"expander"
+ ,"compresser"
+ ,"limiter"
+ ,"mixer"
+ ,"delay"
+ ,"crossover"
+ ,"output"
+ ,"gain"
+ ,"nhs"
+ ,"gain sharing am"
+ ,"agc"
+ ,"aec"
+ ,"ans"
+ ,"sysctrl"
+ ,"shelf"
+ ,"selector"
+ ,"gating am"
+ ,"spl"
+ ,"gating"
+ ,"ducker"
+ ,"reverb"
+ ,"echo"
+ ,"geq"
+ ,"fir"
+ ,"afc"
+ ,"signal gen"
+ ,"pitch"
+ ,"route"
+ ,"dummuy input"
+ ,"dummy output"
+ };
+#endif
ErrStatus ToB::CreateModuleV1(const u8* bin, u32 nbytes)
{
FlowChartHead* head = (FlowChartHead*)bin;
u32 size = sizeof(FlowChartHead);
u16 nPhyInput[IntDataType::COUNT] = { 0,0,0 }, nPhyOutput[IntDataType::COUNT] = { 0,0,0 };
s32 len =0;
- frames = new Frames(head->dsp_buffer_num[dsp_index]); // C H G
+ frames = new Frames(head->dsp_buffer_num[dsp_index]);
do {
const Module* pmod = (Module*)(bin+ size); size += sizeof(Module);
const u16* mRxbufID = (u16*)(bin + size); size += pmod->mRxNum * sizeof(u16);
const u16* mTxbufID = (u16*)(bin + size); size += pmod->mTxNum * sizeof(u16);
- PhyPort* mPhyID ;
+ PhyPort* mPhyID;
ubool bInput=ufalse,bOutput=ufalse;
u16 mRxNum = pmod->mRxNum, mTxNum = pmod->mTxNum;
@@ -225,27 +266,30 @@
if (pmod->mDsp != dsp_index) continue;
#ifdef DEBUG
- printf("Module ID %d type %d rxnum %d txnum %d tag %d. \n",pmod->mID ,pmod->mType, pmod->mRxNum,pmod->mTxNum,pmod->mTag);
+// if (300 == pmod->mID)
+ if (PROC_FEEDBACK == pmod->mType)
+ dbg_printf("Module ID %d type %d %s rxnum %d txnum %d tag %d. \n",pmod->mID ,pmod->mType, type_string[pmod->mType], pmod->mRxNum,pmod->mTxNum,pmod->mTag);
#endif
- IModule* m = CreateBaseModule(pmod->mType,pmod->mTag, mRxNum,mTxNum);
+
+ IModule* m = CreateBaseModule(pmod->mType, pmod->mTag, mRxNum, mTxNum);
if(!m) {
dbg_printf("Module ID Create fail.\n", pmod->mID);
continue;
}
- m->SetModuleInfo(pmod->mID ,pmod->mType,pmod->mTag);
+ m->SetModuleInfo(pmod->mID ,pmod->mType, pmod->mTag);
mList.push_back(m);
if(pmod->mID >= mModuleIndex.size()) {
mModuleIndex.resize(pmod->mID + 1, 0);
}
- mModuleIndex[pmod->mID] = ++mModuleNum ;
+ mModuleIndex[pmod->mID] = ++mModuleNum;
-// printf("Module id:%d, Tx buffer id:", pmod->mID);
+// dbg_printf("Module id:%d, Tx buffer id:", pmod->mID);
for (size_t i = 0; i < mTxNum && !bOutput; i++){
-// printf("bid %d", mTxbufID[i]);
+// dbg_printf("bid %d, ", mTxbufID[i]);
if (mTxbufID[i] > 0) {
- Frame* pcm = frames->GetFrame(mTxbufID[i]-1 );
+ Frame* pcm = frames->GetFrame(mTxbufID[i]-1);
m->SetOutputChannelDataPtr(i, pcm);
if (bInput && mPhyID[i].mIntType < IntDataType::COUNT) {
@@ -253,16 +297,16 @@
nPhyInput[mPhyID[i].mIntType] = mPhyID[i].mPhyID;
m->SetInputChannelDataPtr(i, pcm);
SetRxChannelPtr(static_cast<IntDataType>(mPhyID[i].mIntType), mPhyID[i].mPhyID-1, pcm->Data());
-// printf("phy_id %d", mPhyID[i].mPhyID);
+// dbg_printf("phy_id %d\n", mPhyID[i].mPhyID);
}
}
else {
m->SetOutputChannelDataPtr(i, 0);
}
}
-// printf(";Rx buffer id:");
+// dbg_printf(";Rx buffer id:");
for (size_t i = 0; i < mRxNum && !bInput; i++) {
-// printf("bid %d", mRxbufID[i]);
+// printf("mID %d,bid %d\n", pmod->mID, mRxbufID[i]);
if (mRxbufID[i] > 0) {
Frame* pcm = frames->GetFrame(mRxbufID[i]-1 );
m->SetInputChannelDataPtr(i, pcm);
@@ -271,21 +315,41 @@
if(nPhyOutput[mPhyID[i].mIntType] < mPhyID[i].mPhyID)
nPhyOutput[mPhyID[i].mIntType] = mPhyID[i].mPhyID;
- pcm = frames->AllocFrame();
+ pcm = frames->AllocFrame(); // It is not necessary to be compatible with the AXE1208 series here, because the TOP architecture is different.
m->SetOutputChannelDataPtr(i, pcm);
SetTxChannelPtr(static_cast<IntDataType>(mPhyID[i].mIntType), mPhyID[i].mPhyID-1, pcm->Data());
-// printf("phy_id %d", mPhyID[i].mPhyID);
+// dbg_printf("mID %d,bid %d\n", pmod->mID, mPhyID[i].mPhyID-1);
+// dbg_printf("phy_type %d, _id %d\n", mPhyID[i].mIntType, mPhyID[i].mPhyID);
}
}
else {
m->SetInputChannelDataPtr(i, 0);
}
}
-// printf("\n");
+// dbg_printf("\n");
m->Init();
- //paramset->GetParamEntry(m->GetModuleType())(m, (uvoid*)pmod->mParamaddr, len);
+
+ // 从 paramset 中获取对应的参数控制函数指针
+ ParamCtrl_fn paramEntry = paramset->GetParamEntry( m->GetModuleType());
+ if(paramEntry == NULL) {
+ dbg_printf("paramEntry is NULL!\n");
+ }
+ // 调用参数控制函数
+ u32 result = paramEntry(m, (uvoid*)pmod->mParamaddr, len);
+
} while (size < nbytes);
+
+// int ddr = sram_free_space(SRAM_DDR,mem_any);
+// int ccm = sram_free_space(SRAM_L2,mem_any);
+// int l1 = sram_free_space(SRAM_L1,mem_heap);
+// dbg_printf("mListAdd:0x%x, ddr %d ccm %d l1 %d.\n", &mList, ddr, ccm ,l1);
+
+//for (auto pl : mList) {
+// delete pl;
+// int l2mem = sram_free_space(SRAM_L2, mem_any);
+// dbg_printf("L2mem %d\n", l2mem);
+//}
if (size != nbytes) {
dbg_printf("check flowchart some error!\n");
@@ -298,7 +362,7 @@
/*for (auto pt = mList.begin(); pt < mList.end(); pt++) {
IModule *p = *pt._Myptr;
static int i = 0;
- printf("%d, id %d, type %d\n",i++, p->GetModuleID(), p->GetModuleType());
+ dbg_printf("%d, id %d, type %d\n",i++, p->GetModuleID(), p->GetModuleType());
}*/
return ErrStatus::SUCCESS;
@@ -313,7 +377,7 @@
head->crc = 0;
tmp_crc = CRC::crc32(bin, nbytes);
if (tmp_crc != crc) {
- printf("flowchar crc check fail.\n");
+ dbg_printf("flowchar crc check fail.\n");
return ErrStatus::ERR_PARAM;
}
processed = ufalse;
@@ -330,16 +394,14 @@
ErrStatus ToB::toProc()
{
if(processed) {
- for (auto iter = mList.begin(); iter < mList.end(); iter++) {
-// if ((*iter)->GetModuleID() == 166)
-// continue;
-
- if((*iter)->GetModuleType() <= 5) {
- printf("%d ", (*iter)->GetModuleID());
- (*iter)->Proc();
- }
+ for (auto iter : mList) {// = mList.begin(); iter < mList.end(); iter++) {
+// if(((*iter)->GetModuleType() >= PROC_COMPRESS) && ((*iter)->GetModuleType() <= PROC_COMPRESS)) {
+// printf("%d ", (*iter)->GetModuleID());
+// int ii = 2;
+// }
+ iter->Proc();
}
-// printf("\n");
+// dbg_printf("\n");
}
else {
MuteOutput();
@@ -359,6 +421,28 @@
return 0;
}
+/*ErrStatus ToB::toCtrl(u32 mID, u32 pID, const s16* val, u32 num)
+{
+ if(mID >= mModuleIndex.size() || mModuleIndex[mID] == 0) {
+ dbg_printf("ToB::toCtrl mID Error!\n");
+ return ErrStatus::ERR_PARAM;
+ }
+
+ IModule* m = mList[mModuleIndex[mID]-1];
+ if(!m) {
+ dbg_printf("ToB::toCtrl m Error!\n");
+ return ErrStatus::ERR_PARAM;
+ }
+
+ auto entries = paramset->GetEntries(m->GetModuleType());
+ if(!entries.second) {
+ dbg_printf("ToB::toCtrl entries Error!\n");
+ return ErrStatus::ERR_METHOD;
+ }
+
+ entries.second(m, pID, const_cast<s16*>(val), num);
+ return ErrStatus::SUCCESS;
+}*/
ErrStatus ToB::toCtrl(u32 mID, u32 pID, const s16* val, u32 num)
{
if(mID >= mModuleIndex.size() || mModuleIndex[mID] == 0) {
@@ -366,11 +450,16 @@
}
IModule* m = mList[mModuleIndex[mID]-1];
- if( m != NULL) {
- //m->Ctrl(pID, val, num);
- paramset->GetCtrlEntry(m->GetModuleType())(m, pID, (s16*)val);
- }
+// if (m->GetModuleType() == PROC_CONTINUNOUS_SPL && pID == 9) {
+// mID += 320;
+// m = mList[mModuleIndex[mID]-1];
+// }
+ if( m != NULL) {
+// m->Ctrl(pID, val, num);
+ paramset->GetCtrlEntry(m->GetModuleType())(m, pID, (s16*)val, num);
+ }
+// dbg_printf("mID:%d pID:%d val[0]:%d val[1]:%d\n",mID, pID, val[0], val[1]);
return ErrStatus::SUCCESS;
}
@@ -407,18 +496,20 @@
}
-u32 ToB::GetLevels(s16* buffer)
+u32 ToB::GetLevels(s16* buffer, u32 level_max_len)
{
- u32 n =0,size =0;
-
+ u32 n=0, size =0;
+ u32 remain_len;
if( !processed ) {
return 0;
}
- for (std::vector<IModule*>::iterator iter = mList.begin();
- iter != mList.end() ; iter++) {
- size = (*iter)->GetLevel(buffer + n );
+ for (std::vector<IModule*>::iterator iter = mList.begin(); iter != mList.end(); iter++) {
+ remain_len = level_max_len - n;
+ size = (*iter)->GetLevel(buffer + n, remain_len);
+// dbg_printf("proc:%s level num:%d remain:%d\n", type_string[(*iter)->GetModuleType()], size, remain_len);
n += size;
}
+
return n;
}
--
Gitblit v1.9.3