This commit is contained in:
Steven Dan
2026-02-04 09:00:32 +08:00
parent 8d2c6c21ea
commit e6e717c49b
11 changed files with 208 additions and 205 deletions

View File

@@ -148,7 +148,10 @@ void UserBufferManagement(unsigned sampsFromUsbToAudio[], unsigned sampsFromAudi
#else
unsigned time_total_count = 2400000;
#endif
#if defined(SPATIAL_DRAMA) || defined(SPATIAL_GAME) || defined(SPATIAL_MOVIE) || defined(SPATIAL_MUSIC)
// 6ch version
unsigned tmp[8]={0,0,0,0,0,0,0,0}, downmix[8]={0,0,0,0,0,0,0,0};
#endif
static unsigned count = 0;
#if 0
if (count < time_total_count) {
@@ -179,6 +182,43 @@ void UserBufferManagement(unsigned sampsFromUsbToAudio[], unsigned sampsFromAudi
#endif
#endif
}
#if defined(SPATIAL_DRAMA) || defined(SPATIAL_GAME) || defined(SPATIAL_MOVIE) || defined(SPATIAL_MUSIC)
// 6ch version
// C and LFE -3dB mixed to L and R.
// L = L + C*-3dB + LFE*-3dB
// R = R + C*-3dB + LFE*-3dB
int32_t input_L = (int32_t)sampsFromUsbToAudio[0];
int32_t input_R = (int32_t)sampsFromUsbToAudio[1];
int32_t input_C = (int32_t)sampsFromUsbToAudio[2];
int32_t input_LFE = (int32_t)sampsFromUsbToAudio[3];
// -3dB Gain = 10^(-3/20) ~= 0.707946
// Using 0.70710678 (1/sqrt(2)) approximation for -3dB
// Q31 factor: 0.70710678 * 2^31 = 1518500250
const int32_t gain_minus_3db = 1518500250;
int32_t C_weighted = (int32_t)(((int64_t)input_C * gain_minus_3db) >> 31);
int32_t LFE_weighted = (int32_t)(((int64_t)input_LFE * gain_minus_3db) >> 31);
int64_t sum_L = (int64_t)input_L + C_weighted + LFE_weighted;
int64_t sum_R = (int64_t)input_R + C_weighted + LFE_weighted;
// Saturation logic
if (sum_L > 2147483647) sum_L = 2147483647;
else if (sum_L < -2147483648) sum_L = -2147483648;
if (sum_R > 2147483647) sum_R = 2147483647;
else if (sum_R < -2147483648) sum_R = -2147483648;
ubm_egress[0][frame_index] = (int32_t)sum_L;
ubm_egress[1][frame_index] = (int32_t)sum_R;
// Zero out C (2) and LFE (3) since they are mixed into L/R
ubm_egress[2][frame_index] = 0;
ubm_egress[3][frame_index] = 0;
#endif
#if (NUM_USB_CHAN_IN == 2)
#if AIZIP_DNR == 1
@@ -1562,29 +1602,17 @@ int dsp_worker_tile(chanend_t c_dsp_to_ex3d, int worker_id){
if(worker_id == 0){
td_block_fir_filter_t * filters[DSP_WORKER_DATA_CH_COUNT*DSP_WORKER_FILTER_PER_DATA_CH] =
{
&td_block_fir_filter_SPATIAL_71_DRAMA_v090h225_left, &td_block_fir_filter_SPATIAL_71_DRAMA_v090h225_right,
&td_block_fir_filter_SPATIAL_71_DRAMA_v090h315_left, &td_block_fir_filter_SPATIAL_71_DRAMA_v090h315_right
&td_block_fir_filter_SPATIAL_71_DRAMA_v090h225_left, &td_block_fir_filter_SPATIAL_71_DRAMA_v090h225_right,
&td_block_fir_filter_SPATIAL_71_DRAMA_v090h315_left, &td_block_fir_filter_SPATIAL_71_DRAMA_v090h315_right,
&td_block_fir_filter_SPATIAL_71_DRAMA_v090h090_left, &td_block_fir_filter_SPATIAL_71_DRAMA_v090h090_right
};
dsp_worker(c_dsp_to_ex3d, filters);
} else if(worker_id == 1){
td_block_fir_filter_t * filters[DSP_WORKER_DATA_CH_COUNT*DSP_WORKER_FILTER_PER_DATA_CH] =
td_block_fir_filter_t * filters[DSP_WORKER_DATA_CH_COUNT*DSP_WORKER_FILTER_PER_DATA_CH] =
{
&td_block_fir_filter_SPATIAL_71_DRAMA_v090h045_left, &td_block_fir_filter_SPATIAL_71_DRAMA_v090h045_right,
&td_block_fir_filter_SPATIAL_71_DRAMA_v090h135_left, &td_block_fir_filter_SPATIAL_71_DRAMA_v090h135_right
};
dsp_worker(c_dsp_to_ex3d, filters);
} else if(worker_id == 2){
td_block_fir_filter_t * filters[DSP_WORKER_DATA_CH_COUNT*DSP_WORKER_FILTER_PER_DATA_CH] =
{
&td_block_fir_filter_SPATIAL_71_DRAMA_v090h000_left, &td_block_fir_filter_SPATIAL_71_DRAMA_v090h000_right,
&td_block_fir_filter_SPATIAL_71_DRAMA_lfe_left, &td_block_fir_filter_SPATIAL_71_DRAMA_lfe_right
};
dsp_worker(c_dsp_to_ex3d, filters);
} else if(worker_id == 3){
td_block_fir_filter_t * filters[DSP_WORKER_DATA_CH_COUNT*DSP_WORKER_FILTER_PER_DATA_CH] =
{
&td_block_fir_filter_SPATIAL_71_DRAMA_v090h270_left, &td_block_fir_filter_SPATIAL_71_DRAMA_v090h270_right,
&td_block_fir_filter_SPATIAL_71_DRAMA_v090h090_left, &td_block_fir_filter_SPATIAL_71_DRAMA_v090h090_right
&td_block_fir_filter_SPATIAL_71_DRAMA_v090h135_left, &td_block_fir_filter_SPATIAL_71_DRAMA_v090h135_right,
&td_block_fir_filter_SPATIAL_71_DRAMA_v090h270_left, &td_block_fir_filter_SPATIAL_71_DRAMA_v090h270_right
};
dsp_worker(c_dsp_to_ex3d, filters);
} else {
@@ -1595,29 +1623,17 @@ int dsp_worker_tile(chanend_t c_dsp_to_ex3d, int worker_id){
if(worker_id == 0){
td_block_fir_filter_t * filters[DSP_WORKER_DATA_CH_COUNT*DSP_WORKER_FILTER_PER_DATA_CH] =
{
&td_block_fir_filter_SPATIAL_71_GAME_v090h225_left, &td_block_fir_filter_SPATIAL_71_GAME_v090h225_right,
&td_block_fir_filter_SPATIAL_71_GAME_v090h315_left, &td_block_fir_filter_SPATIAL_71_GAME_v090h315_right
&td_block_fir_filter_SPATIAL_71_GAME_v090h225_left, &td_block_fir_filter_SPATIAL_71_GAME_v090h225_right,
&td_block_fir_filter_SPATIAL_71_GAME_v090h315_left, &td_block_fir_filter_SPATIAL_71_GAME_v090h315_right,
&td_block_fir_filter_SPATIAL_71_GAME_v090h090_left, &td_block_fir_filter_SPATIAL_71_GAME_v090h090_right
};
dsp_worker(c_dsp_to_ex3d, filters);
} else if(worker_id == 1){
td_block_fir_filter_t * filters[DSP_WORKER_DATA_CH_COUNT*DSP_WORKER_FILTER_PER_DATA_CH] =
td_block_fir_filter_t * filters[DSP_WORKER_DATA_CH_COUNT*DSP_WORKER_FILTER_PER_DATA_CH] =
{
&td_block_fir_filter_SPATIAL_71_GAME_v090h045_left, &td_block_fir_filter_SPATIAL_71_GAME_v090h045_right,
&td_block_fir_filter_SPATIAL_71_GAME_v090h135_left, &td_block_fir_filter_SPATIAL_71_GAME_v090h135_right
};
dsp_worker(c_dsp_to_ex3d, filters);
} else if(worker_id == 2){
td_block_fir_filter_t * filters[DSP_WORKER_DATA_CH_COUNT*DSP_WORKER_FILTER_PER_DATA_CH] =
{
&td_block_fir_filter_SPATIAL_71_GAME_v090h000_left, &td_block_fir_filter_SPATIAL_71_GAME_v090h000_right,
&td_block_fir_filter_SPATIAL_71_GAME_lfe_left, &td_block_fir_filter_SPATIAL_71_GAME_lfe_right
};
dsp_worker(c_dsp_to_ex3d, filters);
} else if(worker_id == 3){
td_block_fir_filter_t * filters[DSP_WORKER_DATA_CH_COUNT*DSP_WORKER_FILTER_PER_DATA_CH] =
{
&td_block_fir_filter_SPATIAL_71_GAME_v090h270_left, &td_block_fir_filter_SPATIAL_71_GAME_v090h270_right,
&td_block_fir_filter_SPATIAL_71_GAME_v090h090_left, &td_block_fir_filter_SPATIAL_71_GAME_v090h090_right
&td_block_fir_filter_SPATIAL_71_GAME_v090h135_left, &td_block_fir_filter_SPATIAL_71_GAME_v090h135_right,
&td_block_fir_filter_SPATIAL_71_GAME_v090h270_left, &td_block_fir_filter_SPATIAL_71_GAME_v090h270_right
};
dsp_worker(c_dsp_to_ex3d, filters);
} else {
@@ -1628,29 +1644,17 @@ int dsp_worker_tile(chanend_t c_dsp_to_ex3d, int worker_id){
if(worker_id == 0){
td_block_fir_filter_t * filters[DSP_WORKER_DATA_CH_COUNT*DSP_WORKER_FILTER_PER_DATA_CH] =
{
&td_block_fir_filter_SPATIAL_71_MOVIE_v090h225_left, &td_block_fir_filter_SPATIAL_71_MOVIE_v090h225_right,
&td_block_fir_filter_SPATIAL_71_MOVIE_v090h315_left, &td_block_fir_filter_SPATIAL_71_MOVIE_v090h315_right
&td_block_fir_filter_SPATIAL_71_MOVIE_v090h225_left, &td_block_fir_filter_SPATIAL_71_MOVIE_v090h225_right,
&td_block_fir_filter_SPATIAL_71_MOVIE_v090h315_left, &td_block_fir_filter_SPATIAL_71_MOVIE_v090h315_right,
&td_block_fir_filter_SPATIAL_71_MOVIE_v090h090_left, &td_block_fir_filter_SPATIAL_71_MOVIE_v090h090_right
};
dsp_worker(c_dsp_to_ex3d, filters);
} else if(worker_id == 1){
td_block_fir_filter_t * filters[DSP_WORKER_DATA_CH_COUNT*DSP_WORKER_FILTER_PER_DATA_CH] =
td_block_fir_filter_t * filters[DSP_WORKER_DATA_CH_COUNT*DSP_WORKER_FILTER_PER_DATA_CH] =
{
&td_block_fir_filter_SPATIAL_71_MOVIE_v090h045_left, &td_block_fir_filter_SPATIAL_71_MOVIE_v090h045_right,
&td_block_fir_filter_SPATIAL_71_MOVIE_v090h135_left, &td_block_fir_filter_SPATIAL_71_MOVIE_v090h135_right
};
dsp_worker(c_dsp_to_ex3d, filters);
} else if(worker_id == 2){
td_block_fir_filter_t * filters[DSP_WORKER_DATA_CH_COUNT*DSP_WORKER_FILTER_PER_DATA_CH] =
{
&td_block_fir_filter_SPATIAL_71_MOVIE_v090h000_left, &td_block_fir_filter_SPATIAL_71_MOVIE_v090h000_right,
&td_block_fir_filter_SPATIAL_71_MOVIE_lfe_left, &td_block_fir_filter_SPATIAL_71_MOVIE_lfe_right
};
dsp_worker(c_dsp_to_ex3d, filters);
} else if(worker_id == 3){
td_block_fir_filter_t * filters[DSP_WORKER_DATA_CH_COUNT*DSP_WORKER_FILTER_PER_DATA_CH] =
{
&td_block_fir_filter_SPATIAL_71_MOVIE_v090h270_left, &td_block_fir_filter_SPATIAL_71_MOVIE_v090h270_right,
&td_block_fir_filter_SPATIAL_71_MOVIE_v090h090_left, &td_block_fir_filter_SPATIAL_71_MOVIE_v090h090_right
&td_block_fir_filter_SPATIAL_71_MOVIE_v090h135_left, &td_block_fir_filter_SPATIAL_71_MOVIE_v090h135_right,
&td_block_fir_filter_SPATIAL_71_MOVIE_v090h270_left, &td_block_fir_filter_SPATIAL_71_MOVIE_v090h270_right
};
dsp_worker(c_dsp_to_ex3d, filters);
} else {
@@ -1661,35 +1665,24 @@ int dsp_worker_tile(chanend_t c_dsp_to_ex3d, int worker_id){
if(worker_id == 0){
td_block_fir_filter_t * filters[DSP_WORKER_DATA_CH_COUNT*DSP_WORKER_FILTER_PER_DATA_CH] =
{
&td_block_fir_filter_SPATIAL_71_MUSIC_v090h225_left, &td_block_fir_filter_SPATIAL_71_MUSIC_v090h225_right,
&td_block_fir_filter_SPATIAL_71_MUSIC_v090h315_left, &td_block_fir_filter_SPATIAL_71_MUSIC_v090h315_right
&td_block_fir_filter_SPATIAL_71_MUSIC_v090h225_left, &td_block_fir_filter_SPATIAL_71_MUSIC_v090h225_right,
&td_block_fir_filter_SPATIAL_71_MUSIC_v090h315_left, &td_block_fir_filter_SPATIAL_71_MUSIC_v090h315_right,
&td_block_fir_filter_SPATIAL_71_MUSIC_v090h090_left, &td_block_fir_filter_SPATIAL_71_MUSIC_v090h090_right
};
dsp_worker(c_dsp_to_ex3d, filters);
} else if(worker_id == 1){
td_block_fir_filter_t * filters[DSP_WORKER_DATA_CH_COUNT*DSP_WORKER_FILTER_PER_DATA_CH] =
td_block_fir_filter_t * filters[DSP_WORKER_DATA_CH_COUNT*DSP_WORKER_FILTER_PER_DATA_CH] =
{
&td_block_fir_filter_SPATIAL_71_MUSIC_v090h045_left, &td_block_fir_filter_SPATIAL_71_MUSIC_v090h045_right,
&td_block_fir_filter_SPATIAL_71_MUSIC_v090h135_left, &td_block_fir_filter_SPATIAL_71_MUSIC_v090h135_right
};
dsp_worker(c_dsp_to_ex3d, filters);
} else if(worker_id == 2){
td_block_fir_filter_t * filters[DSP_WORKER_DATA_CH_COUNT*DSP_WORKER_FILTER_PER_DATA_CH] =
{
&td_block_fir_filter_SPATIAL_71_MUSIC_v090h000_left, &td_block_fir_filter_SPATIAL_71_MUSIC_v090h000_right,
&td_block_fir_filter_SPATIAL_71_MUSIC_lfe_left, &td_block_fir_filter_SPATIAL_71_MUSIC_lfe_right
};
dsp_worker(c_dsp_to_ex3d, filters);
} else if(worker_id == 3){
td_block_fir_filter_t * filters[DSP_WORKER_DATA_CH_COUNT*DSP_WORKER_FILTER_PER_DATA_CH] =
{
&td_block_fir_filter_SPATIAL_71_MUSIC_v090h270_left, &td_block_fir_filter_SPATIAL_71_MUSIC_v090h270_right,
&td_block_fir_filter_SPATIAL_71_MUSIC_v090h090_left, &td_block_fir_filter_SPATIAL_71_MUSIC_v090h090_right
&td_block_fir_filter_SPATIAL_71_MUSIC_v090h135_left, &td_block_fir_filter_SPATIAL_71_MUSIC_v090h135_right,
&td_block_fir_filter_SPATIAL_71_MUSIC_v090h270_left, &td_block_fir_filter_SPATIAL_71_MUSIC_v090h270_right
};
dsp_worker(c_dsp_to_ex3d, filters);
} else {
exit(1);
}
#endif
return 0;
}