From 1ac2340f684bf8c0b05fb571f5994b0755050671 Mon Sep 17 00:00:00 2001
From: chenlh <2008get@163.com>
Date: 星期四, 29 一月 2026 15:22:04 +0800
Subject: [PATCH] 更新删除输出第一通道后有电平无声音的情况
---
src/scene.cpp | 106 ++++++++++++++++++++++++++++++----------------------
1 files changed, 61 insertions(+), 45 deletions(-)
diff --git a/src/scene.cpp b/src/scene.cpp
index e0cf1b2..0aeb71e 100644
--- a/src/scene.cpp
+++ b/src/scene.cpp
@@ -4,6 +4,7 @@
* Created on: 2025年7月21日
* Author: 86189
*/
+#include <stdio.h>
#include <cstdlib>
#include <cstring>
#include "config.h"
@@ -13,8 +14,9 @@
#include "protocol_internal.h"
#include "moduleexport.h"
#include "crc.h"
+#include "../drv/memory.h"
-s32 Scene::str_delim(const s8* str, u8 logic_channel[])
+s32 Scene::str_delim(const s8* str, u16 logic_channel[])
{
s8 pstr[32];
s8 * ptr;
@@ -30,7 +32,8 @@
ptr = strtok(NULL, "-");
end = atoi(ptr);
- while (start<=end)
+ if(start==end) return 0;
+ while (start <= end)
{
logic_channel[i++] = start++;
}
@@ -47,26 +50,38 @@
}
}
+void *Scene::get_param(s32 proc_id)
+{
+ for (auto& proc : proc_list) {
+ if (proc.proc_id == proc_id) {
+// printf("proc:%d,addr:0x%x\n", proc_id, proc.parameters);
+ return proc.parameters;
+ }
+ }
+ return nullptr;
+}
-
-s32 Scene::convert_to_bin(s8* bin)
+s32 Scene::convert_to_bin(u8* bin)
{
s32 i ,j;
struct FlowChartHead* flowchart = (struct FlowChartHead*)bin;
u32 size = sizeof(struct FlowChartHead);
s32 ninports,noutports;
- u8 rxBufID[64],txBufID[64];
+ u16 rxBufID[64],txBufID[64];
+ u32 dsp_index ;
u16 dsp_input_num[2] ={0,0};
u16 dsp_output_num[2] ={0,0};
s32 crc = 0xFFFFFFFF;
-
if (!bin) return 0;
+ struct Module *m = (struct Module *)(bin + size);
+ dbg_printf("proc list size %d\n", proc_list.size());
+
for (i=0; i< proc_list.size(); i++) {
- struct Module *m = (struct Module *)(bin + size);
- struct proc_field * p = &proc_list[i];
+ Module *m = (struct Module *)(bin + size);
+ proc_field * p = &proc_list[i];
ninports = str_delim(p->inportstr, rxBufID) ;
noutports = str_delim(p->outportstr , txBufID) ;
@@ -75,73 +90,74 @@
continue;
}
- //ducker & spl.
+ //ducker & spl with mix.
if(p->proc_type == PROC_DUCKER || p->proc_type == PROC_CONTINUNOUS_SPL) {
- //insert a mixer.
- struct Module *mixer = (struct Module *)(bin + size);
- u8 channelID[64];
-
- mixer->mDsp = 0;
- mixer->mID = p->proc_id + 320;
- mixer->mType = ModuleType::PROC_MIXER;
- mixer->mTag = 0;
- mixer->mPhyModule = 0;
- mixer->mParamaddr = (s32)get_module_param_ptr(p->parameters,p->fixed);
-
- size += sizeof(struct Module);
-
- mixer->mRxNum = str_delim(proc_list[1].inportstr, channelID) ;
- memcpy(bin + size , channelID, mixer->mRxNum*sizeof(u16)); size += mixer->mRxNum*sizeof(u16);
- mixer->mTxNum = 1;
- memcpy(bin + size , &rxBufID[1], mixer->mTxNum*sizeof(u16)); size += mixer->mTxNum*sizeof(u16);
+ ninports = str_delim(proc_list[1].inportstr, &rxBufID[1]) + 1; // rxBufID[0] is the dataIn Frame, rxBufID[1]~rxBufID[inportstr] is the mix channel.
+ }
+ if(hw_adapter->get_system_is_dual_dsp()){
+ dsp_index = p->dsp_index ;
+ }
+ else {
+ dsp_index = 0;
}
m = (struct Module *)(bin + size);
for(j = 0 ; j< ninports ;j ++) {
- if(rxBufID[j] > dsp_input_num[p->dsp_index]) {
- dsp_input_num[p->dsp_index] = rxBufID[j];
+ if(rxBufID[j] > dsp_input_num[dsp_index]) {
+ dsp_input_num[dsp_index] = rxBufID[j];
}
}
for(j = 0 ; j< noutports ;j ++) {
- if(txBufID[j] > dsp_output_num[p->dsp_index]) {
- dsp_output_num[p->dsp_index] = txBufID[j];
+ if(txBufID[j] > dsp_output_num[dsp_index]) {
+ dsp_output_num[dsp_index] = txBufID[j];
}
}
- m->mDsp = 0;
+ m->mDsp = dsp_index;
m->mID = p->proc_id;
m->mType = p->proc_type;
m->mTag = p->tag;
m->mPhyModule = p->physic_type;
- m->mParamaddr = (s32)get_module_param_ptr(p->parameters,p->fixed);
+ m->mParamaddr = (s32)get_module_param_ptr(m->mType, p->parameters, p->fixed);
size += sizeof(struct Module);
m->mRxNum = ninports;
memcpy(bin + size , rxBufID, m->mRxNum*sizeof(u16)); size += m->mRxNum*sizeof(u16);
m->mTxNum = noutports;
memcpy(bin + size , txBufID, m->mTxNum*sizeof(u16)); size += m->mTxNum*sizeof(u16);
+
+ if(p->physic_type == ModuleInterfaceType::PHY_INPUT) {
+ PhyPort* phy_id = (PhyPort*)(bin + size);
+ for(j = 0 ; j< ninports ;j ++, phy_id++) {
+ phy_id->mIntType = 0;
+ phy_id->mPhyID = hw_adapter->get_physical_channel(1, rxBufID[j]-1);
+// dbg_printf("PhyID:%d\n", phy_id->mPhyID);
+ }
+ size += ninports*sizeof(PhyPort);
+ }
+ else if(p->physic_type == ModuleInterfaceType::PHY_OUTPUT){
+ PhyPort* phy_id = (PhyPort*)(bin + size);
+ for(j = 0 ; j< noutports ;j ++, phy_id++) {
+ phy_id->mIntType = 0;
+ phy_id->mPhyID = hw_adapter->get_physical_channel(0, txBufID[j]-1);
+ }
+ size += noutports*sizeof(PhyPort);
+ }
}
- ninports = dsp_input_num[0]>dsp_output_num[0]?dsp_input_num[0]:dsp_output_num[0];
- noutports = dsp_input_num[1]>dsp_output_num[1]?dsp_input_num[1]:dsp_output_num[1];
-
- if(0) {
- flowchart->dsp_buffer_num[0] = ninports;
- flowchart->dsp_buffer_num[1] = noutports;
- }
- else {
- flowchart->dsp_buffer_num[0] = ninports>noutports?ninports:noutports;
+ //dual_dsp for 2 DSP,else 1 DSP.
+ for (i =0 ;i < hw_adapter->get_system_is_dual_dsp() + 1 ;i ++) {
+ flowchart->dsp_buffer_num[i] = std::max(dsp_input_num[i], dsp_output_num[i]);
}
flowchart->module_num = proc_list.size();
- flowchart->crcLsb = 0;
- flowchart->crcMsb = 0;
flowchart->compress = 0;
+ flowchart->version = 1;
+ flowchart->crc = 0;
crc = CRC::crc32((const u8*)bin, size);
- flowchart->crcLsb = crc & 0xffff;
- flowchart->crcMsb = crc >> 16;
+ flowchart->crc = crc;
return size;
}
--
Gitblit v1.9.3