9 Commits

Author SHA1 Message Date
Steven Dan
395e057f8b update footstep led to 255 2026-06-10 19:23:10 +08:00
Steven Dan
03c2b83781 1.2.2 2026-06-10 16:03:19 +08:00
Steven Dan
46f6d6c06d 1.2.1 2026-06-04 17:30:35 +08:00
Steven Dan
c4d18835fa disable disable reboot 2026-06-04 17:24:08 +08:00
Steven Dan
ec6d280c6a update flash size 2026-06-04 17:17:24 +08:00
Steven Dan
8a1f576ee3 remvoe unused configs 2026-06-04 17:03:59 +08:00
Steven Dan
e4405d3b10 seperate f3 and f4 mode 2026-06-04 16:43:59 +08:00
Steven Dan
77c7568dc2 update debug log report id 2026-06-04 12:26:48 +08:00
Steven Dan
23055f830e add 2.5k lib 2026-06-04 12:25:37 +08:00
31 changed files with 433 additions and 1311 deletions

BIN
lib_ex3d/.DS_Store vendored Normal file

Binary file not shown.

10
lib_ex3d/Makefile Normal file
View File

@@ -0,0 +1,10 @@
# This variable should contain a space separated list of all
# the directories containing buildable applications (usually
# prefixed with the app_ prefix)
#
# If the variable is set to "all" then all directories that start with app_
# are built.
BUILD_SUBDIRS = all
XMOS_MAKE_PATH ?= ..
include $(XMOS_MAKE_PATH)/xcommon/module_xcommon/build/Makefile.toplevel

Binary file not shown.

View File

@@ -33,12 +33,12 @@
#endif
#if NUM_USB_CHAN_OUT == 8
// 6ch version
#define DSP_WORKER_COUNT 2//4//3 //the count of workers
#define DSP_WORKER_DATA_CH_COUNT 3//2 //3 //the number of channels each one handles
//#define SHOOTING_GAME
#define DSP_WORKER_COUNT 4//3 //the count of workers
#define DSP_WORKER_DATA_CH_COUNT 2 //3 //the number of channels each one handles
#define DSP_WORKER_FILTER_PER_DATA_CH 2 //the number of channels each one handles
// #define IR_AUDIO
// #define IR_VIDEO
#else
#define IR_PS5
#define DSP_WORKER_COUNT 4 //the count of workers

View File

@@ -2,640 +2,640 @@ EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_DRAMA_lfe_left;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_DRAMA_lfe_left_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_DRAMA_lfe_left_DATA_BUFFER_ELEMENTS (1224)
#define SPATIAL_71_DRAMA_lfe_left_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_DRAMA_lfe_left_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_DRAMA_lfe_left_BLOCK_COUNT (151)
#define SPATIAL_71_DRAMA_lfe_left_BLOCK_COUNT (313)
#define SPATIAL_71_DRAMA_lfe_left_FRAME_ADVANCE (8)
#define SPATIAL_71_DRAMA_lfe_left_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_DRAMA_lfe_right;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_DRAMA_lfe_right_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_DRAMA_lfe_right_DATA_BUFFER_ELEMENTS (1224)
#define SPATIAL_71_DRAMA_lfe_right_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_DRAMA_lfe_right_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_DRAMA_lfe_right_BLOCK_COUNT (151)
#define SPATIAL_71_DRAMA_lfe_right_BLOCK_COUNT (313)
#define SPATIAL_71_DRAMA_lfe_right_FRAME_ADVANCE (8)
#define SPATIAL_71_DRAMA_lfe_right_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_DRAMA_v090h000_left;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_DRAMA_v090h000_left_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_DRAMA_v090h000_left_DATA_BUFFER_ELEMENTS (1224)
#define SPATIAL_71_DRAMA_v090h000_left_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_DRAMA_v090h000_left_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_DRAMA_v090h000_left_BLOCK_COUNT (151)
#define SPATIAL_71_DRAMA_v090h000_left_BLOCK_COUNT (313)
#define SPATIAL_71_DRAMA_v090h000_left_FRAME_ADVANCE (8)
#define SPATIAL_71_DRAMA_v090h000_left_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_DRAMA_v090h000_right;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_DRAMA_v090h000_right_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_DRAMA_v090h000_right_DATA_BUFFER_ELEMENTS (1224)
#define SPATIAL_71_DRAMA_v090h000_right_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_DRAMA_v090h000_right_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_DRAMA_v090h000_right_BLOCK_COUNT (151)
#define SPATIAL_71_DRAMA_v090h000_right_BLOCK_COUNT (313)
#define SPATIAL_71_DRAMA_v090h000_right_FRAME_ADVANCE (8)
#define SPATIAL_71_DRAMA_v090h000_right_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_DRAMA_v090h045_left;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_DRAMA_v090h045_left_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_DRAMA_v090h045_left_DATA_BUFFER_ELEMENTS (1224)
#define SPATIAL_71_DRAMA_v090h045_left_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_DRAMA_v090h045_left_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_DRAMA_v090h045_left_BLOCK_COUNT (151)
#define SPATIAL_71_DRAMA_v090h045_left_BLOCK_COUNT (313)
#define SPATIAL_71_DRAMA_v090h045_left_FRAME_ADVANCE (8)
#define SPATIAL_71_DRAMA_v090h045_left_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_DRAMA_v090h045_right;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_DRAMA_v090h045_right_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_DRAMA_v090h045_right_DATA_BUFFER_ELEMENTS (1224)
#define SPATIAL_71_DRAMA_v090h045_right_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_DRAMA_v090h045_right_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_DRAMA_v090h045_right_BLOCK_COUNT (151)
#define SPATIAL_71_DRAMA_v090h045_right_BLOCK_COUNT (313)
#define SPATIAL_71_DRAMA_v090h045_right_FRAME_ADVANCE (8)
#define SPATIAL_71_DRAMA_v090h045_right_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_DRAMA_v090h090_left;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_DRAMA_v090h090_left_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_DRAMA_v090h090_left_DATA_BUFFER_ELEMENTS (1872)
#define SPATIAL_71_DRAMA_v090h090_left_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_DRAMA_v090h090_left_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_DRAMA_v090h090_left_BLOCK_COUNT (232)
#define SPATIAL_71_DRAMA_v090h090_left_BLOCK_COUNT (313)
#define SPATIAL_71_DRAMA_v090h090_left_FRAME_ADVANCE (8)
#define SPATIAL_71_DRAMA_v090h090_left_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_DRAMA_v090h090_right;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_DRAMA_v090h090_right_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_DRAMA_v090h090_right_DATA_BUFFER_ELEMENTS (1872)
#define SPATIAL_71_DRAMA_v090h090_right_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_DRAMA_v090h090_right_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_DRAMA_v090h090_right_BLOCK_COUNT (232)
#define SPATIAL_71_DRAMA_v090h090_right_BLOCK_COUNT (313)
#define SPATIAL_71_DRAMA_v090h090_right_FRAME_ADVANCE (8)
#define SPATIAL_71_DRAMA_v090h090_right_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_DRAMA_v090h135_left;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_DRAMA_v090h135_left_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_DRAMA_v090h135_left_DATA_BUFFER_ELEMENTS (1824)
#define SPATIAL_71_DRAMA_v090h135_left_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_DRAMA_v090h135_left_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_DRAMA_v090h135_left_BLOCK_COUNT (226)
#define SPATIAL_71_DRAMA_v090h135_left_BLOCK_COUNT (313)
#define SPATIAL_71_DRAMA_v090h135_left_FRAME_ADVANCE (8)
#define SPATIAL_71_DRAMA_v090h135_left_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_DRAMA_v090h135_right;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_DRAMA_v090h135_right_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_DRAMA_v090h135_right_DATA_BUFFER_ELEMENTS (1824)
#define SPATIAL_71_DRAMA_v090h135_right_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_DRAMA_v090h135_right_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_DRAMA_v090h135_right_BLOCK_COUNT (226)
#define SPATIAL_71_DRAMA_v090h135_right_BLOCK_COUNT (313)
#define SPATIAL_71_DRAMA_v090h135_right_FRAME_ADVANCE (8)
#define SPATIAL_71_DRAMA_v090h135_right_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_DRAMA_v090h225_left;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_DRAMA_v090h225_left_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_DRAMA_v090h225_left_DATA_BUFFER_ELEMENTS (1824)
#define SPATIAL_71_DRAMA_v090h225_left_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_DRAMA_v090h225_left_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_DRAMA_v090h225_left_BLOCK_COUNT (226)
#define SPATIAL_71_DRAMA_v090h225_left_BLOCK_COUNT (313)
#define SPATIAL_71_DRAMA_v090h225_left_FRAME_ADVANCE (8)
#define SPATIAL_71_DRAMA_v090h225_left_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_DRAMA_v090h225_right;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_DRAMA_v090h225_right_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_DRAMA_v090h225_right_DATA_BUFFER_ELEMENTS (1824)
#define SPATIAL_71_DRAMA_v090h225_right_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_DRAMA_v090h225_right_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_DRAMA_v090h225_right_BLOCK_COUNT (226)
#define SPATIAL_71_DRAMA_v090h225_right_BLOCK_COUNT (313)
#define SPATIAL_71_DRAMA_v090h225_right_FRAME_ADVANCE (8)
#define SPATIAL_71_DRAMA_v090h225_right_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_DRAMA_v090h270_left;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_DRAMA_v090h270_left_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_DRAMA_v090h270_left_DATA_BUFFER_ELEMENTS (1824)
#define SPATIAL_71_DRAMA_v090h270_left_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_DRAMA_v090h270_left_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_DRAMA_v090h270_left_BLOCK_COUNT (226)
#define SPATIAL_71_DRAMA_v090h270_left_BLOCK_COUNT (313)
#define SPATIAL_71_DRAMA_v090h270_left_FRAME_ADVANCE (8)
#define SPATIAL_71_DRAMA_v090h270_left_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_DRAMA_v090h270_right;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_DRAMA_v090h270_right_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_DRAMA_v090h270_right_DATA_BUFFER_ELEMENTS (1824)
#define SPATIAL_71_DRAMA_v090h270_right_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_DRAMA_v090h270_right_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_DRAMA_v090h270_right_BLOCK_COUNT (226)
#define SPATIAL_71_DRAMA_v090h270_right_BLOCK_COUNT (313)
#define SPATIAL_71_DRAMA_v090h270_right_FRAME_ADVANCE (8)
#define SPATIAL_71_DRAMA_v090h270_right_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_DRAMA_v090h315_left;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_DRAMA_v090h315_left_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_DRAMA_v090h315_left_DATA_BUFFER_ELEMENTS (1224)
#define SPATIAL_71_DRAMA_v090h315_left_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_DRAMA_v090h315_left_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_DRAMA_v090h315_left_BLOCK_COUNT (151)
#define SPATIAL_71_DRAMA_v090h315_left_BLOCK_COUNT (313)
#define SPATIAL_71_DRAMA_v090h315_left_FRAME_ADVANCE (8)
#define SPATIAL_71_DRAMA_v090h315_left_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_DRAMA_v090h315_right;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_DRAMA_v090h315_right_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_DRAMA_v090h315_right_DATA_BUFFER_ELEMENTS (1224)
#define SPATIAL_71_DRAMA_v090h315_right_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_DRAMA_v090h315_right_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_DRAMA_v090h315_right_BLOCK_COUNT (151)
#define SPATIAL_71_DRAMA_v090h315_right_BLOCK_COUNT (313)
#define SPATIAL_71_DRAMA_v090h315_right_FRAME_ADVANCE (8)
#define SPATIAL_71_DRAMA_v090h315_right_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_GAME_lfe_left;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_GAME_lfe_left_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_GAME_lfe_left_DATA_BUFFER_ELEMENTS (1224)
#define SPATIAL_71_GAME_lfe_left_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_GAME_lfe_left_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_GAME_lfe_left_BLOCK_COUNT (151)
#define SPATIAL_71_GAME_lfe_left_BLOCK_COUNT (313)
#define SPATIAL_71_GAME_lfe_left_FRAME_ADVANCE (8)
#define SPATIAL_71_GAME_lfe_left_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_GAME_lfe_right;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_GAME_lfe_right_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_GAME_lfe_right_DATA_BUFFER_ELEMENTS (1224)
#define SPATIAL_71_GAME_lfe_right_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_GAME_lfe_right_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_GAME_lfe_right_BLOCK_COUNT (151)
#define SPATIAL_71_GAME_lfe_right_BLOCK_COUNT (313)
#define SPATIAL_71_GAME_lfe_right_FRAME_ADVANCE (8)
#define SPATIAL_71_GAME_lfe_right_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_GAME_v090h000_left;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_GAME_v090h000_left_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_GAME_v090h000_left_DATA_BUFFER_ELEMENTS (1224)
#define SPATIAL_71_GAME_v090h000_left_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_GAME_v090h000_left_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_GAME_v090h000_left_BLOCK_COUNT (151)
#define SPATIAL_71_GAME_v090h000_left_BLOCK_COUNT (313)
#define SPATIAL_71_GAME_v090h000_left_FRAME_ADVANCE (8)
#define SPATIAL_71_GAME_v090h000_left_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_GAME_v090h000_right;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_GAME_v090h000_right_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_GAME_v090h000_right_DATA_BUFFER_ELEMENTS (1224)
#define SPATIAL_71_GAME_v090h000_right_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_GAME_v090h000_right_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_GAME_v090h000_right_BLOCK_COUNT (151)
#define SPATIAL_71_GAME_v090h000_right_BLOCK_COUNT (313)
#define SPATIAL_71_GAME_v090h000_right_FRAME_ADVANCE (8)
#define SPATIAL_71_GAME_v090h000_right_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_GAME_v090h045_left;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_GAME_v090h045_left_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_GAME_v090h045_left_DATA_BUFFER_ELEMENTS (1224)
#define SPATIAL_71_GAME_v090h045_left_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_GAME_v090h045_left_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_GAME_v090h045_left_BLOCK_COUNT (151)
#define SPATIAL_71_GAME_v090h045_left_BLOCK_COUNT (313)
#define SPATIAL_71_GAME_v090h045_left_FRAME_ADVANCE (8)
#define SPATIAL_71_GAME_v090h045_left_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_GAME_v090h045_right;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_GAME_v090h045_right_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_GAME_v090h045_right_DATA_BUFFER_ELEMENTS (1224)
#define SPATIAL_71_GAME_v090h045_right_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_GAME_v090h045_right_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_GAME_v090h045_right_BLOCK_COUNT (151)
#define SPATIAL_71_GAME_v090h045_right_BLOCK_COUNT (313)
#define SPATIAL_71_GAME_v090h045_right_FRAME_ADVANCE (8)
#define SPATIAL_71_GAME_v090h045_right_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_GAME_v090h090_left;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_GAME_v090h090_left_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_GAME_v090h090_left_DATA_BUFFER_ELEMENTS (1872)
#define SPATIAL_71_GAME_v090h090_left_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_GAME_v090h090_left_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_GAME_v090h090_left_BLOCK_COUNT (232)
#define SPATIAL_71_GAME_v090h090_left_BLOCK_COUNT (313)
#define SPATIAL_71_GAME_v090h090_left_FRAME_ADVANCE (8)
#define SPATIAL_71_GAME_v090h090_left_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_GAME_v090h090_right;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_GAME_v090h090_right_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_GAME_v090h090_right_DATA_BUFFER_ELEMENTS (1872)
#define SPATIAL_71_GAME_v090h090_right_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_GAME_v090h090_right_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_GAME_v090h090_right_BLOCK_COUNT (232)
#define SPATIAL_71_GAME_v090h090_right_BLOCK_COUNT (313)
#define SPATIAL_71_GAME_v090h090_right_FRAME_ADVANCE (8)
#define SPATIAL_71_GAME_v090h090_right_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_GAME_v090h135_left;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_GAME_v090h135_left_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_GAME_v090h135_left_DATA_BUFFER_ELEMENTS (1824)
#define SPATIAL_71_GAME_v090h135_left_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_GAME_v090h135_left_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_GAME_v090h135_left_BLOCK_COUNT (226)
#define SPATIAL_71_GAME_v090h135_left_BLOCK_COUNT (313)
#define SPATIAL_71_GAME_v090h135_left_FRAME_ADVANCE (8)
#define SPATIAL_71_GAME_v090h135_left_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_GAME_v090h135_right;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_GAME_v090h135_right_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_GAME_v090h135_right_DATA_BUFFER_ELEMENTS (1824)
#define SPATIAL_71_GAME_v090h135_right_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_GAME_v090h135_right_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_GAME_v090h135_right_BLOCK_COUNT (226)
#define SPATIAL_71_GAME_v090h135_right_BLOCK_COUNT (313)
#define SPATIAL_71_GAME_v090h135_right_FRAME_ADVANCE (8)
#define SPATIAL_71_GAME_v090h135_right_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_GAME_v090h225_left;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_GAME_v090h225_left_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_GAME_v090h225_left_DATA_BUFFER_ELEMENTS (1824)
#define SPATIAL_71_GAME_v090h225_left_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_GAME_v090h225_left_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_GAME_v090h225_left_BLOCK_COUNT (226)
#define SPATIAL_71_GAME_v090h225_left_BLOCK_COUNT (313)
#define SPATIAL_71_GAME_v090h225_left_FRAME_ADVANCE (8)
#define SPATIAL_71_GAME_v090h225_left_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_GAME_v090h225_right;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_GAME_v090h225_right_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_GAME_v090h225_right_DATA_BUFFER_ELEMENTS (1824)
#define SPATIAL_71_GAME_v090h225_right_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_GAME_v090h225_right_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_GAME_v090h225_right_BLOCK_COUNT (226)
#define SPATIAL_71_GAME_v090h225_right_BLOCK_COUNT (313)
#define SPATIAL_71_GAME_v090h225_right_FRAME_ADVANCE (8)
#define SPATIAL_71_GAME_v090h225_right_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_GAME_v090h270_left;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_GAME_v090h270_left_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_GAME_v090h270_left_DATA_BUFFER_ELEMENTS (1824)
#define SPATIAL_71_GAME_v090h270_left_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_GAME_v090h270_left_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_GAME_v090h270_left_BLOCK_COUNT (226)
#define SPATIAL_71_GAME_v090h270_left_BLOCK_COUNT (313)
#define SPATIAL_71_GAME_v090h270_left_FRAME_ADVANCE (8)
#define SPATIAL_71_GAME_v090h270_left_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_GAME_v090h270_right;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_GAME_v090h270_right_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_GAME_v090h270_right_DATA_BUFFER_ELEMENTS (1824)
#define SPATIAL_71_GAME_v090h270_right_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_GAME_v090h270_right_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_GAME_v090h270_right_BLOCK_COUNT (226)
#define SPATIAL_71_GAME_v090h270_right_BLOCK_COUNT (313)
#define SPATIAL_71_GAME_v090h270_right_FRAME_ADVANCE (8)
#define SPATIAL_71_GAME_v090h270_right_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_GAME_v090h315_left;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_GAME_v090h315_left_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_GAME_v090h315_left_DATA_BUFFER_ELEMENTS (1224)
#define SPATIAL_71_GAME_v090h315_left_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_GAME_v090h315_left_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_GAME_v090h315_left_BLOCK_COUNT (151)
#define SPATIAL_71_GAME_v090h315_left_BLOCK_COUNT (313)
#define SPATIAL_71_GAME_v090h315_left_FRAME_ADVANCE (8)
#define SPATIAL_71_GAME_v090h315_left_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_GAME_v090h315_right;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_GAME_v090h315_right_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_GAME_v090h315_right_DATA_BUFFER_ELEMENTS (1224)
#define SPATIAL_71_GAME_v090h315_right_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_GAME_v090h315_right_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_GAME_v090h315_right_BLOCK_COUNT (151)
#define SPATIAL_71_GAME_v090h315_right_BLOCK_COUNT (313)
#define SPATIAL_71_GAME_v090h315_right_FRAME_ADVANCE (8)
#define SPATIAL_71_GAME_v090h315_right_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_MOVIE_lfe_left;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_MOVIE_lfe_left_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_MOVIE_lfe_left_DATA_BUFFER_ELEMENTS (1224)
#define SPATIAL_71_MOVIE_lfe_left_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_MOVIE_lfe_left_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_MOVIE_lfe_left_BLOCK_COUNT (151)
#define SPATIAL_71_MOVIE_lfe_left_BLOCK_COUNT (313)
#define SPATIAL_71_MOVIE_lfe_left_FRAME_ADVANCE (8)
#define SPATIAL_71_MOVIE_lfe_left_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_MOVIE_lfe_right;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_MOVIE_lfe_right_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_MOVIE_lfe_right_DATA_BUFFER_ELEMENTS (1224)
#define SPATIAL_71_MOVIE_lfe_right_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_MOVIE_lfe_right_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_MOVIE_lfe_right_BLOCK_COUNT (151)
#define SPATIAL_71_MOVIE_lfe_right_BLOCK_COUNT (313)
#define SPATIAL_71_MOVIE_lfe_right_FRAME_ADVANCE (8)
#define SPATIAL_71_MOVIE_lfe_right_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_MOVIE_v090h000_left;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_MOVIE_v090h000_left_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_MOVIE_v090h000_left_DATA_BUFFER_ELEMENTS (1224)
#define SPATIAL_71_MOVIE_v090h000_left_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_MOVIE_v090h000_left_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_MOVIE_v090h000_left_BLOCK_COUNT (151)
#define SPATIAL_71_MOVIE_v090h000_left_BLOCK_COUNT (313)
#define SPATIAL_71_MOVIE_v090h000_left_FRAME_ADVANCE (8)
#define SPATIAL_71_MOVIE_v090h000_left_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_MOVIE_v090h000_right;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_MOVIE_v090h000_right_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_MOVIE_v090h000_right_DATA_BUFFER_ELEMENTS (1224)
#define SPATIAL_71_MOVIE_v090h000_right_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_MOVIE_v090h000_right_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_MOVIE_v090h000_right_BLOCK_COUNT (151)
#define SPATIAL_71_MOVIE_v090h000_right_BLOCK_COUNT (313)
#define SPATIAL_71_MOVIE_v090h000_right_FRAME_ADVANCE (8)
#define SPATIAL_71_MOVIE_v090h000_right_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_MOVIE_v090h045_left;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_MOVIE_v090h045_left_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_MOVIE_v090h045_left_DATA_BUFFER_ELEMENTS (1224)
#define SPATIAL_71_MOVIE_v090h045_left_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_MOVIE_v090h045_left_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_MOVIE_v090h045_left_BLOCK_COUNT (151)
#define SPATIAL_71_MOVIE_v090h045_left_BLOCK_COUNT (313)
#define SPATIAL_71_MOVIE_v090h045_left_FRAME_ADVANCE (8)
#define SPATIAL_71_MOVIE_v090h045_left_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_MOVIE_v090h045_right;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_MOVIE_v090h045_right_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_MOVIE_v090h045_right_DATA_BUFFER_ELEMENTS (1224)
#define SPATIAL_71_MOVIE_v090h045_right_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_MOVIE_v090h045_right_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_MOVIE_v090h045_right_BLOCK_COUNT (151)
#define SPATIAL_71_MOVIE_v090h045_right_BLOCK_COUNT (313)
#define SPATIAL_71_MOVIE_v090h045_right_FRAME_ADVANCE (8)
#define SPATIAL_71_MOVIE_v090h045_right_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_MOVIE_v090h090_left;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_MOVIE_v090h090_left_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_MOVIE_v090h090_left_DATA_BUFFER_ELEMENTS (1872)
#define SPATIAL_71_MOVIE_v090h090_left_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_MOVIE_v090h090_left_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_MOVIE_v090h090_left_BLOCK_COUNT (232)
#define SPATIAL_71_MOVIE_v090h090_left_BLOCK_COUNT (313)
#define SPATIAL_71_MOVIE_v090h090_left_FRAME_ADVANCE (8)
#define SPATIAL_71_MOVIE_v090h090_left_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_MOVIE_v090h090_right;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_MOVIE_v090h090_right_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_MOVIE_v090h090_right_DATA_BUFFER_ELEMENTS (1872)
#define SPATIAL_71_MOVIE_v090h090_right_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_MOVIE_v090h090_right_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_MOVIE_v090h090_right_BLOCK_COUNT (232)
#define SPATIAL_71_MOVIE_v090h090_right_BLOCK_COUNT (313)
#define SPATIAL_71_MOVIE_v090h090_right_FRAME_ADVANCE (8)
#define SPATIAL_71_MOVIE_v090h090_right_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_MOVIE_v090h135_left;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_MOVIE_v090h135_left_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_MOVIE_v090h135_left_DATA_BUFFER_ELEMENTS (1824)
#define SPATIAL_71_MOVIE_v090h135_left_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_MOVIE_v090h135_left_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_MOVIE_v090h135_left_BLOCK_COUNT (226)
#define SPATIAL_71_MOVIE_v090h135_left_BLOCK_COUNT (313)
#define SPATIAL_71_MOVIE_v090h135_left_FRAME_ADVANCE (8)
#define SPATIAL_71_MOVIE_v090h135_left_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_MOVIE_v090h135_right;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_MOVIE_v090h135_right_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_MOVIE_v090h135_right_DATA_BUFFER_ELEMENTS (1824)
#define SPATIAL_71_MOVIE_v090h135_right_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_MOVIE_v090h135_right_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_MOVIE_v090h135_right_BLOCK_COUNT (226)
#define SPATIAL_71_MOVIE_v090h135_right_BLOCK_COUNT (313)
#define SPATIAL_71_MOVIE_v090h135_right_FRAME_ADVANCE (8)
#define SPATIAL_71_MOVIE_v090h135_right_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_MOVIE_v090h225_left;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_MOVIE_v090h225_left_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_MOVIE_v090h225_left_DATA_BUFFER_ELEMENTS (1824)
#define SPATIAL_71_MOVIE_v090h225_left_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_MOVIE_v090h225_left_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_MOVIE_v090h225_left_BLOCK_COUNT (226)
#define SPATIAL_71_MOVIE_v090h225_left_BLOCK_COUNT (313)
#define SPATIAL_71_MOVIE_v090h225_left_FRAME_ADVANCE (8)
#define SPATIAL_71_MOVIE_v090h225_left_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_MOVIE_v090h225_right;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_MOVIE_v090h225_right_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_MOVIE_v090h225_right_DATA_BUFFER_ELEMENTS (1824)
#define SPATIAL_71_MOVIE_v090h225_right_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_MOVIE_v090h225_right_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_MOVIE_v090h225_right_BLOCK_COUNT (226)
#define SPATIAL_71_MOVIE_v090h225_right_BLOCK_COUNT (313)
#define SPATIAL_71_MOVIE_v090h225_right_FRAME_ADVANCE (8)
#define SPATIAL_71_MOVIE_v090h225_right_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_MOVIE_v090h270_left;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_MOVIE_v090h270_left_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_MOVIE_v090h270_left_DATA_BUFFER_ELEMENTS (1824)
#define SPATIAL_71_MOVIE_v090h270_left_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_MOVIE_v090h270_left_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_MOVIE_v090h270_left_BLOCK_COUNT (226)
#define SPATIAL_71_MOVIE_v090h270_left_BLOCK_COUNT (313)
#define SPATIAL_71_MOVIE_v090h270_left_FRAME_ADVANCE (8)
#define SPATIAL_71_MOVIE_v090h270_left_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_MOVIE_v090h270_right;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_MOVIE_v090h270_right_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_MOVIE_v090h270_right_DATA_BUFFER_ELEMENTS (1824)
#define SPATIAL_71_MOVIE_v090h270_right_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_MOVIE_v090h270_right_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_MOVIE_v090h270_right_BLOCK_COUNT (226)
#define SPATIAL_71_MOVIE_v090h270_right_BLOCK_COUNT (313)
#define SPATIAL_71_MOVIE_v090h270_right_FRAME_ADVANCE (8)
#define SPATIAL_71_MOVIE_v090h270_right_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_MOVIE_v090h315_left;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_MOVIE_v090h315_left_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_MOVIE_v090h315_left_DATA_BUFFER_ELEMENTS (1224)
#define SPATIAL_71_MOVIE_v090h315_left_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_MOVIE_v090h315_left_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_MOVIE_v090h315_left_BLOCK_COUNT (151)
#define SPATIAL_71_MOVIE_v090h315_left_BLOCK_COUNT (313)
#define SPATIAL_71_MOVIE_v090h315_left_FRAME_ADVANCE (8)
#define SPATIAL_71_MOVIE_v090h315_left_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_MOVIE_v090h315_right;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_MOVIE_v090h315_right_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_MOVIE_v090h315_right_DATA_BUFFER_ELEMENTS (1224)
#define SPATIAL_71_MOVIE_v090h315_right_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_MOVIE_v090h315_right_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_MOVIE_v090h315_right_BLOCK_COUNT (151)
#define SPATIAL_71_MOVIE_v090h315_right_BLOCK_COUNT (313)
#define SPATIAL_71_MOVIE_v090h315_right_FRAME_ADVANCE (8)
#define SPATIAL_71_MOVIE_v090h315_right_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_MUSIC_lfe_left;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_MUSIC_lfe_left_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_MUSIC_lfe_left_DATA_BUFFER_ELEMENTS (1224)
#define SPATIAL_71_MUSIC_lfe_left_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_MUSIC_lfe_left_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_MUSIC_lfe_left_BLOCK_COUNT (151)
#define SPATIAL_71_MUSIC_lfe_left_BLOCK_COUNT (313)
#define SPATIAL_71_MUSIC_lfe_left_FRAME_ADVANCE (8)
#define SPATIAL_71_MUSIC_lfe_left_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_MUSIC_lfe_right;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_MUSIC_lfe_right_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_MUSIC_lfe_right_DATA_BUFFER_ELEMENTS (1224)
#define SPATIAL_71_MUSIC_lfe_right_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_MUSIC_lfe_right_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_MUSIC_lfe_right_BLOCK_COUNT (151)
#define SPATIAL_71_MUSIC_lfe_right_BLOCK_COUNT (313)
#define SPATIAL_71_MUSIC_lfe_right_FRAME_ADVANCE (8)
#define SPATIAL_71_MUSIC_lfe_right_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_MUSIC_v090h000_left;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_MUSIC_v090h000_left_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_MUSIC_v090h000_left_DATA_BUFFER_ELEMENTS (1224)
#define SPATIAL_71_MUSIC_v090h000_left_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_MUSIC_v090h000_left_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_MUSIC_v090h000_left_BLOCK_COUNT (151)
#define SPATIAL_71_MUSIC_v090h000_left_BLOCK_COUNT (313)
#define SPATIAL_71_MUSIC_v090h000_left_FRAME_ADVANCE (8)
#define SPATIAL_71_MUSIC_v090h000_left_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_MUSIC_v090h000_right;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_MUSIC_v090h000_right_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_MUSIC_v090h000_right_DATA_BUFFER_ELEMENTS (1224)
#define SPATIAL_71_MUSIC_v090h000_right_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_MUSIC_v090h000_right_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_MUSIC_v090h000_right_BLOCK_COUNT (151)
#define SPATIAL_71_MUSIC_v090h000_right_BLOCK_COUNT (313)
#define SPATIAL_71_MUSIC_v090h000_right_FRAME_ADVANCE (8)
#define SPATIAL_71_MUSIC_v090h000_right_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_MUSIC_v090h045_left;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_MUSIC_v090h045_left_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_MUSIC_v090h045_left_DATA_BUFFER_ELEMENTS (1224)
#define SPATIAL_71_MUSIC_v090h045_left_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_MUSIC_v090h045_left_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_MUSIC_v090h045_left_BLOCK_COUNT (151)
#define SPATIAL_71_MUSIC_v090h045_left_BLOCK_COUNT (313)
#define SPATIAL_71_MUSIC_v090h045_left_FRAME_ADVANCE (8)
#define SPATIAL_71_MUSIC_v090h045_left_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_MUSIC_v090h045_right;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_MUSIC_v090h045_right_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_MUSIC_v090h045_right_DATA_BUFFER_ELEMENTS (1224)
#define SPATIAL_71_MUSIC_v090h045_right_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_MUSIC_v090h045_right_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_MUSIC_v090h045_right_BLOCK_COUNT (151)
#define SPATIAL_71_MUSIC_v090h045_right_BLOCK_COUNT (313)
#define SPATIAL_71_MUSIC_v090h045_right_FRAME_ADVANCE (8)
#define SPATIAL_71_MUSIC_v090h045_right_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_MUSIC_v090h090_left;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_MUSIC_v090h090_left_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_MUSIC_v090h090_left_DATA_BUFFER_ELEMENTS (1872)
#define SPATIAL_71_MUSIC_v090h090_left_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_MUSIC_v090h090_left_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_MUSIC_v090h090_left_BLOCK_COUNT (232)
#define SPATIAL_71_MUSIC_v090h090_left_BLOCK_COUNT (313)
#define SPATIAL_71_MUSIC_v090h090_left_FRAME_ADVANCE (8)
#define SPATIAL_71_MUSIC_v090h090_left_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_MUSIC_v090h090_right;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_MUSIC_v090h090_right_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_MUSIC_v090h090_right_DATA_BUFFER_ELEMENTS (1872)
#define SPATIAL_71_MUSIC_v090h090_right_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_MUSIC_v090h090_right_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_MUSIC_v090h090_right_BLOCK_COUNT (232)
#define SPATIAL_71_MUSIC_v090h090_right_BLOCK_COUNT (313)
#define SPATIAL_71_MUSIC_v090h090_right_FRAME_ADVANCE (8)
#define SPATIAL_71_MUSIC_v090h090_right_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_MUSIC_v090h135_left;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_MUSIC_v090h135_left_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_MUSIC_v090h135_left_DATA_BUFFER_ELEMENTS (1824)
#define SPATIAL_71_MUSIC_v090h135_left_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_MUSIC_v090h135_left_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_MUSIC_v090h135_left_BLOCK_COUNT (226)
#define SPATIAL_71_MUSIC_v090h135_left_BLOCK_COUNT (313)
#define SPATIAL_71_MUSIC_v090h135_left_FRAME_ADVANCE (8)
#define SPATIAL_71_MUSIC_v090h135_left_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_MUSIC_v090h135_right;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_MUSIC_v090h135_right_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_MUSIC_v090h135_right_DATA_BUFFER_ELEMENTS (1824)
#define SPATIAL_71_MUSIC_v090h135_right_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_MUSIC_v090h135_right_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_MUSIC_v090h135_right_BLOCK_COUNT (226)
#define SPATIAL_71_MUSIC_v090h135_right_BLOCK_COUNT (313)
#define SPATIAL_71_MUSIC_v090h135_right_FRAME_ADVANCE (8)
#define SPATIAL_71_MUSIC_v090h135_right_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_MUSIC_v090h225_left;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_MUSIC_v090h225_left_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_MUSIC_v090h225_left_DATA_BUFFER_ELEMENTS (1824)
#define SPATIAL_71_MUSIC_v090h225_left_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_MUSIC_v090h225_left_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_MUSIC_v090h225_left_BLOCK_COUNT (226)
#define SPATIAL_71_MUSIC_v090h225_left_BLOCK_COUNT (313)
#define SPATIAL_71_MUSIC_v090h225_left_FRAME_ADVANCE (8)
#define SPATIAL_71_MUSIC_v090h225_left_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_MUSIC_v090h225_right;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_MUSIC_v090h225_right_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_MUSIC_v090h225_right_DATA_BUFFER_ELEMENTS (1824)
#define SPATIAL_71_MUSIC_v090h225_right_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_MUSIC_v090h225_right_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_MUSIC_v090h225_right_BLOCK_COUNT (226)
#define SPATIAL_71_MUSIC_v090h225_right_BLOCK_COUNT (313)
#define SPATIAL_71_MUSIC_v090h225_right_FRAME_ADVANCE (8)
#define SPATIAL_71_MUSIC_v090h225_right_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_MUSIC_v090h270_left;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_MUSIC_v090h270_left_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_MUSIC_v090h270_left_DATA_BUFFER_ELEMENTS (1824)
#define SPATIAL_71_MUSIC_v090h270_left_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_MUSIC_v090h270_left_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_MUSIC_v090h270_left_BLOCK_COUNT (226)
#define SPATIAL_71_MUSIC_v090h270_left_BLOCK_COUNT (313)
#define SPATIAL_71_MUSIC_v090h270_left_FRAME_ADVANCE (8)
#define SPATIAL_71_MUSIC_v090h270_left_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_MUSIC_v090h270_right;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_MUSIC_v090h270_right_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_MUSIC_v090h270_right_DATA_BUFFER_ELEMENTS (1824)
#define SPATIAL_71_MUSIC_v090h270_right_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_MUSIC_v090h270_right_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_MUSIC_v090h270_right_BLOCK_COUNT (226)
#define SPATIAL_71_MUSIC_v090h270_right_BLOCK_COUNT (313)
#define SPATIAL_71_MUSIC_v090h270_right_FRAME_ADVANCE (8)
#define SPATIAL_71_MUSIC_v090h270_right_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_MUSIC_v090h315_left;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_MUSIC_v090h315_left_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_MUSIC_v090h315_left_DATA_BUFFER_ELEMENTS (1224)
#define SPATIAL_71_MUSIC_v090h315_left_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_MUSIC_v090h315_left_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_MUSIC_v090h315_left_BLOCK_COUNT (151)
#define SPATIAL_71_MUSIC_v090h315_left_BLOCK_COUNT (313)
#define SPATIAL_71_MUSIC_v090h315_left_FRAME_ADVANCE (8)
#define SPATIAL_71_MUSIC_v090h315_left_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_71_MUSIC_v090h315_right;
//This is the count of int32_t words to allocate for one data channel.
//i.e. int32_t channel_data[SPATIAL_71_MUSIC_v090h315_right_DATA_BUFFER_ELEMENTS] = { 0 };
#define SPATIAL_71_MUSIC_v090h315_right_DATA_BUFFER_ELEMENTS (1224)
#define SPATIAL_71_MUSIC_v090h315_right_DATA_BUFFER_ELEMENTS (2520)
#define SPATIAL_71_MUSIC_v090h315_right_TD_BLOCK_LENGTH (8)
#define SPATIAL_71_MUSIC_v090h315_right_BLOCK_COUNT (151)
#define SPATIAL_71_MUSIC_v090h315_right_BLOCK_COUNT (313)
#define SPATIAL_71_MUSIC_v090h315_right_FRAME_ADVANCE (8)
#define SPATIAL_71_MUSIC_v090h315_right_FRAME_OVERLAP (0)
EXTERN td_block_fir_filter_t td_block_fir_filter_SPATIAL_STEREO_2K_v090h090_left;

View File

@@ -30,9 +30,7 @@
#endif
#define EX3D_SET_CH_NUM NUM_USB_CHAN_OUT
#ifndef EX3D_SF_NUM
#define EX3D_SF_NUM 6
#endif
#define EX3D_SF_NUM 1
EXTERN void audio_ex3d_load_key(chanend_t c);
EXTERN int audio_ex3d_activate_key(chanend_t c);

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -23,7 +23,7 @@
*/
#ifndef FLASH_MAX_UPGRADE_SIZE
//#define FLASH_MAX_UPGRADE_SIZE (512 * 1024)
#define FLASH_MAX_UPGRADE_SIZE (3000 * 1024)
#define FLASH_MAX_UPGRADE_SIZE (2800 * 1024)
#endif
#define FLASH_ERROR() do {} while(0)

View File

@@ -75,163 +75,192 @@ set(SW_USB_FACT_FLAGS ${EXTRA_BUILD_FLAGS} -Os
LINK_DIRECTORIES(${CMAKE_CURRENT_LIST_DIR}/../../lib_dnr/lib_dnr)
set(APP_COMPILER_FLAGS_f5_music_uac1 ${SW_USB_AUDIO_FLAGS} -DI2S_CHANS_DAC=2
-DI2S_CHANS_ADC=2
-DAUDIO_CLASS=1
-DMIN_FREQ=48000
-DMAX_FREQ=48000
-DMCLK_441=512*44100
-DMCLK_48=512*48000
-DUAC1_MODE=1
-DF5_MUSIC_UAC1=1
#-DUSE_EX3D
-DMIXER=0
#-ldnr_11ms
#-DDNR_ENABLE=1
#-llib_ex3d_all
-DEQ_EN=1
-DEX3D_SF_NUM=3
-DNUM_USB_CHAN_OUT=8
-DNUM_USB_CHAN_OUT_FS=2
-DNUM_USB_CHAN_IN=2
-DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=16
-DSTREAM_FORMAT_INPUT_1_RESOLUTION_BITS=16
-DINPUT_FORMAT_COUNT=1
-DOUTPUT_FORMAT_COUNT=1
#-DNUM_EX3D_CHAN_OUT=2
-DMIN_VOLUME=0xE000
-DINPUT_VOLUME_CONTROL=0
-DOUTPUT_VOLUME_CONTROL=0
#-DDEBUG_MEMORY_LOG_ENABLED=1
-DXUA_DFU_EN=0
-DHID_DFU_EN=1
-DHID_CONTROLS_UAC1=1
#-DIR_SWITCHING_MODE
-DHID_CONTROLS=1)
set(APP_COMPILER_FLAGS_fact ${SW_USB_FACT_FLAGS} -DI2S_CHANS_DAC=2
-DI2S_CHANS_ADC=0
-DMIN_FREQ=48000
-DMAX_FREQ=48000
-DFACT=1
#-DUSE_EX3D
-DMIXER=0
-DUAC2_MODE=1
#-ldnr_50ms
#-llib_ex3d_all
#-DEQ_EN=1
#-DEX3D_SF_NUM=3
-DNUM_USB_CHAN_OUT=2
-DNUM_USB_CHAN_IN=0
#-DNUM_EX3D_CHAN_OUT=2
-DMIN_VOLUME=0xE000
-DINPUT_VOLUME_CONTROL=0
-DOUTPUT_VOLUME_CONTROL=0
#-DDEBUG_MEMORY_LOG_ENABLED=1
-DHID_DFU_EN=1
-DXUA_DFU_EN=1
#-DIR_SWITCHING_MODE
-DHID_CONTROLS=1)
set(APP_COMPILER_FLAGS_f1_music_uac2 ${SW_USB_AUDIO_FLAGS} -DI2S_CHANS_DAC=2
-DI2S_CHANS_ADC=2
-DMIN_FREQ=192000
-DMAX_FREQ=192000
-DF1_MUSIC_UAC2=1
-DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=24
-DSTREAM_FORMAT_OUTPUT_2_RESOLUTION_BITS=24
-DSTREAM_FORMAT_INPUT_1_RESOLUTION_BITS=24
-DSTREAM_FORMAT_INPUT_2_RESOLUTION_BITS=24
-DINPUT_FORMAT_COUNT=1
-DOUTPUT_FORMAT_COUNT=1
#-DUSE_EX3D
-DMIXER=0
-DUAC2_MODE=1
-ldnr_50ms
-DDNR_ENABLE=1
#-llib_ex3d_all
-DEQ_EN=1
#-DEX3D_SF_NUM=3
-DNUM_USB_CHAN_OUT=2
-DNUM_USB_CHAN_IN=2
#-DNUM_EX3D_CHAN_OUT=2
-DMIN_VOLUME=0xE000
-DINPUT_VOLUME_CONTROL=1
-DOUTPUT_VOLUME_CONTROL=1
#-DDEBUG_MEMORY_LOG_ENABLED=1
-DXUA_DFU_EN=1
-DHID_DFU_EN=1
#-DIR_SWITCHING_MODE
-DHID_CONTROLS=1)
#set(APP_COMPILER_FLAGS_f3_f4_fps_uac2 ${SW_USB_AUDIO_FLAGS} -DI2S_CHANS_DAC=2
#set(APP_COMPILER_FLAGS_f5_music_uac1 ${SW_USB_AUDIO_FLAGS} -DI2S_CHANS_DAC=2
# -DI2S_CHANS_ADC=2
# -DAUDIO_CLASS=1
# -DMIN_FREQ=48000
# -DMAX_FREQ=48000
# -DUSE_EX3D=1
# -DF3_F4_FPS_UAC2=1
# -DMCLK_441=512*44100
# -DMCLK_48=512*48000
# -DUAC1_MODE=1
# -DF5_MUSIC_UAC1=1
# #-DUSE_EX3D
# -DMIXER=0
# -DUAC2_MODE=1
# -ldnr_50ms
# -llib_ex3d_all
# #-ldnr_11ms
# #-DDNR_ENABLE=1
# #-llib_ex3d_all
# -DEQ_EN=1
# -DDNR_ENABLE=1
# -DEX3D_SF_NUM=3
# -DNUM_USB_CHAN_OUT=8
# -DNUM_USB_CHAN_OUT_FS=2
# -DNUM_USB_CHAN_IN=2
# -DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=16
# -DSTREAM_FORMAT_INPUT_1_RESOLUTION_BITS=16
# -DINPUT_FORMAT_COUNT=1
# -DOUTPUT_FORMAT_COUNT=1
# -DEX3D_SF_NUM=3
# -DNUM_USB_CHAN_OUT=8
# #-DNUM_EX3D_CHAN_OUT=2
# -DMIN_VOLUME=0xE000
# -DINPUT_VOLUME_CONTROL=0
# -DOUTPUT_VOLUME_CONTROL=0
# #-DDEBUG_MEMORY_LOG_ENABLED=1
# -DXUA_DFU_EN=0
# -DHID_DFU_EN=1
# -DHID_CONTROLS_UAC1=1
# #-DIR_SWITCHING_MODE
# -DHID_CONTROLS=1)
#
#
#
#set(APP_COMPILER_FLAGS_fact ${SW_USB_FACT_FLAGS} -DI2S_CHANS_DAC=2
# -DI2S_CHANS_ADC=0
# -DMIN_FREQ=48000
# -DMAX_FREQ=48000
# -DFACT=1
# #-DUSE_EX3D
# -DMIXER=0
# -DUAC2_MODE=1
# #-ldnr_50ms
# #-llib_ex3d_all
# #-DEQ_EN=1
# #-DEX3D_SF_NUM=3
# -DNUM_USB_CHAN_OUT=2
# -DNUM_USB_CHAN_IN=0
# #-DNUM_EX3D_CHAN_OUT=2
# -DMIN_VOLUME=0xE000
# -DINPUT_VOLUME_CONTROL=0
# -DOUTPUT_VOLUME_CONTROL=0
# -DDEBUG_MEMORY_LOG_ENABLED=1
# -DHID_DFU_EN=1
# -DXUA_DFU_EN=1
# #-DIR_SWITCHING_MODE
# -DHID_CONTROLS=1)
#set(APP_COMPILER_FLAGS_f1_music_uac2 ${SW_USB_AUDIO_FLAGS} -DI2S_CHANS_DAC=2
# -DI2S_CHANS_ADC=2
# -DMIN_FREQ=44100
# -DMAX_FREQ=192000
# -DF1_MUSIC_UAC2=1
# -DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=24
# -DSTREAM_FORMAT_OUTPUT_2_RESOLUTION_BITS=24
# -DSTREAM_FORMAT_INPUT_1_RESOLUTION_BITS=24
# -DSTREAM_FORMAT_INPUT_2_RESOLUTION_BITS=24
# -DINPUT_FORMAT_COUNT=1
# -DOUTPUT_FORMAT_COUNT=1
# #-DUSE_EX3D
# -DMIXER=0
# -DUAC2_MODE=1
# #-ldnr_50ms
# #-llib_ex3d_all
# -DEQ_EN=1
# #-DEX3D_SF_NUM=3
# -DNUM_USB_CHAN_OUT=2
# -DNUM_USB_CHAN_IN=2
# -DNUM_EX3D_CHAN_OUT=2
# #-DNUM_EX3D_CHAN_OUT=2
# -DMIN_VOLUME=0xE000
# -DINPUT_VOLUME_CONTROL=1
# -DOUTPUT_VOLUME_CONTROL=1
# #-DDEBUG_MEMORY_LOG_ENABLED=1
# -DXUA_DFU_EN=1
# -DHID_DFU_EN=1
# -DIR_SWITCHING_MODE
# #-DIR_SWITCHING_MODE
# -DHID_CONTROLS=1)
#
set(APP_COMPILER_FLAGS_f6_f7_fps_uac1 ${SW_USB_AUDIO_FLAGS} -DI2S_CHANS_DAC=2
set(APP_COMPILER_FLAGS_f3_fps_uac2 ${SW_USB_AUDIO_FLAGS} -DI2S_CHANS_DAC=2
-DI2S_CHANS_ADC=2
-DAUDIO_CLASS=1
-DMIN_FREQ=48000
-DMAX_FREQ=48000
-DMCLK_441=512*44100
-DMCLK_48=512*48000
-DUSE_EX3D=1
-DF3_FPS_UAC2=1
-DMIXER=0
-DUAC2_MODE=1
-ldnr_50ms
-llib_ex3d_game
-DEQ_EN=1
-DDNR_ENABLE=1
-DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=16
-DSTREAM_FORMAT_INPUT_1_RESOLUTION_BITS=16
-DINPUT_FORMAT_COUNT=1
-DOUTPUT_FORMAT_COUNT=1
-DUAC1_MODE=1
-DUSE_EX3D=1
-DF6_F7_FPS_UAC1=1
-DMIXER=0
-ldnr_50ms
-DDNR_ENABLE=1
-llib_ex3d_all
-DEQ_EN=1
-DEX3D_SF_NUM=3
-DNUM_USB_CHAN_OUT=8
-DNUM_USB_CHAN_IN=2
-DNUM_EX3D_CHAN_OUT=2
-DMIN_VOLUME=0xE000
-DINPUT_VOLUME_CONTROL=0
-DOUTPUT_VOLUME_CONTROL=0
-DINPUT_VOLUME_CONTROL=1
-DOUTPUT_VOLUME_CONTROL=1
#-DDEBUG_MEMORY_LOG_ENABLED=1
-DXUA_DFU_EN=1
-DHID_DFU_EN=1
-DHID_CONTROLS_UAC1=1
-DIR_SWITCHING_MODE
-DSPATIAL_GAME
-DHID_CONTROLS=1)
set(APP_INCLUDES src src/core src/extensions src/extensions/ssrc ../../lib_dnr/lib_dnr)
set(APP_COMPILER_FLAGS_f4_fps_uac2 ${SW_USB_AUDIO_FLAGS} -DI2S_CHANS_DAC=2
-DI2S_CHANS_ADC=2
-DMIN_FREQ=48000
-DMAX_FREQ=48000
-DUSE_EX3D=1
-DF4_FPS_UAC2=1
-DMIXER=0
-DUAC2_MODE=1
-ldnr_50ms
-llib_ex3d_movie
-DEQ_EN=1
-DDNR_ENABLE=1
-DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=16
-DSTREAM_FORMAT_INPUT_1_RESOLUTION_BITS=16
-DINPUT_FORMAT_COUNT=1
-DOUTPUT_FORMAT_COUNT=1
-DEX3D_SF_NUM=3
-DNUM_USB_CHAN_OUT=8
-DNUM_USB_CHAN_IN=2
-DNUM_EX3D_CHAN_OUT=2
-DMIN_VOLUME=0xE000
-DINPUT_VOLUME_CONTROL=1
-DOUTPUT_VOLUME_CONTROL=1
#-DDEBUG_MEMORY_LOG_ENABLED=1
-DXUA_DFU_EN=1
-DHID_DFU_EN=1
-DSPATIAL_MOVIE
-DHID_CONTROLS=1)
#set(APP_COMPILER_FLAGS_f6_f7_fps_uac1 ${SW_USB_AUDIO_FLAGS} -DI2S_CHANS_DAC=2
# -DI2S_CHANS_ADC=2
# -DAUDIO_CLASS=1
# -DMIN_FREQ=48000
# -DMAX_FREQ=48000
# -DMCLK_441=512*44100
# -DMCLK_48=512*48000
# -DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=16
# -DSTREAM_FORMAT_INPUT_1_RESOLUTION_BITS=16
# -DINPUT_FORMAT_COUNT=1
# -DOUTPUT_FORMAT_COUNT=1
# -DUAC1_MODE=1
# -DUSE_EX3D=1
# -DF6_F7_FPS_UAC1=1
# -DMIXER=0
# -ldnr_50ms
# -DDNR_ENABLE=1
# -llib_ex3d_all
# -DEQ_EN=1
# -DEX3D_SF_NUM=3
# -DNUM_USB_CHAN_OUT=8
# -DNUM_USB_CHAN_IN=2
# -DNUM_EX3D_CHAN_OUT=2
# -DMIN_VOLUME=0xE000
# -DINPUT_VOLUME_CONTROL=0
# -DOUTPUT_VOLUME_CONTROL=0
# #-DDEBUG_MEMORY_LOG_ENABLED=1
# -DXUA_DFU_EN=1
# -DHID_DFU_EN=1
# -DHID_CONTROLS_UAC1=1
# -DIR_SWITCHING_MODE
# -DHID_CONTROLS=1)
set(APP_INCLUDES src src/core src/extensions ../../lib_dnr/lib_dnr)
set(XMOS_SANDBOX_DIR ${CMAKE_CURRENT_LIST_DIR}/../..)
XMOS_REGISTER_APP()
@@ -239,17 +268,19 @@ XMOS_REGISTER_APP()
###=========================================================================###
# Flash image generation
# Slot assignment (matches MODE_Fxx flag values in audiohw.xc):
# slot 1 = f3_f4_fps_uac2 (COAX_IN_FLAG = MODE_F3_F4_FPS_UAC2)
# slot 2 = f5_music_uac1 (UAC1_IN_FLAG = MODE_F5_MUSIC_UAC1) <- factory base
# slot 1 = f3_fps_uac2 (COAX_IN_FLAG = MODE_F3_FPS_UAC2) Game
# slot 2 = f5_music_uac1 (USB_IN_FLAG = MODE_F5_MUSIC_UAC1) <- factory base
# slot 3 = f1_music_uac2 (OPT_IN_FLAG = MODE_F1_MUSIC_UAC2)
# slot 4 = f6_f7_fps_uac1 (USB_IN_FLAG = MODE_F6_F7_FPS_UAC1)
# slot 4 = f6_f7_fps_uac1 (UAC1_IN_FLAG = MODE_F6_F7_FPS_UAC1)
# slot 5 = f4_fps_uac2 (BT_IN_FLAG = MODE_F4_FPS_UAC2) AI7.1
###=========================================================================###
set(APP_BIN_DIR ${CMAKE_CURRENT_LIST_DIR}/bin)
set(APP_BASE ${PROJECT_NAME})
set(XE_FACT ${APP_BIN_DIR}/fact/${APP_BASE}_fact.xe)
set(XE_F1 ${APP_BIN_DIR}/f1_music_uac2/${APP_BASE}_f1_music_uac2.xe)
set(XE_F3F4 ${APP_BIN_DIR}/f3_f4_fps_uac2/${APP_BASE}_f3_f4_fps_uac2.xe)
set(XE_F3 ${APP_BIN_DIR}/f3_fps_uac2/${APP_BASE}_f3_fps_uac2.xe)
set(XE_F4 ${APP_BIN_DIR}/f4_fps_uac2/${APP_BASE}_f4_fps_uac2.xe)
set(XE_F5 ${APP_BIN_DIR}/f5_music_uac1/${APP_BASE}_f5_music_uac1.xe)
set(XE_F6F7 ${APP_BIN_DIR}/f6_f7_fps_uac1/${APP_BASE}_f6_f7_fps_uac1.xe)
set(LOADER_OBJ ${CMAKE_CURRENT_LIST_DIR}/loader.o)
@@ -257,12 +288,13 @@ set(TARGET_XN ${CMAKE_CURRENT_LIST_DIR}/src/core/synido.xn)
# factory_<project>_<version>.bin — full factory image (base + 4 upgrade slots)
add_custom_target(factory_bin
COMMAND ${CMAKE_COMMAND} -E echo "xflash ${XE_FACT} --loader ${LOADER_OBJ} --upgrade 1 ${XE_F3F4} --upgrade 2 ${XE_F5} --upgrade 3 ${XE_F1} --upgrade 4 ${XE_F6F7} -o ${CMAKE_CURRENT_LIST_DIR}/factory_${APP_BASE}_${FW_VERSION}.bin"
COMMAND ${CMAKE_COMMAND} -E echo "xflash ${XE_FACT} --loader ${LOADER_OBJ} --upgrade 1 ${XE_F3} --upgrade 5 ${XE_F4} --upgrade 2 ${XE_F5} --upgrade 3 ${XE_F1} --upgrade 4 ${XE_F6F7} -o ${CMAKE_CURRENT_LIST_DIR}/factory_${APP_BASE}_${FW_VERSION}.bin"
COMMAND xflash ${XE_FACT} --loader ${LOADER_OBJ}
--upgrade 2 ${XE_F5}
--upgrade 3 ${XE_F1}
--upgrade 1 ${XE_F3F4}
--upgrade 1 ${XE_F3}
--upgrade 4 ${XE_F6F7}
--upgrade 5 ${XE_F4}
-o ${CMAKE_CURRENT_LIST_DIR}/factory_${APP_BASE}_${FW_VERSION}.bin
#DEPENDS f1_music_uac2 f3_f4_fps_uac2 f5_music_uac1 f6_f7_fps_uac1
COMMENT "Generating factory image: factory_${APP_BASE}_${FW_VERSION}.bin"
@@ -271,12 +303,13 @@ add_custom_target(factory_bin
# update_<project>_<version>.bin — DFU upgrade package (upgrade slots only)
add_custom_target(update_bin
COMMAND ${CMAKE_COMMAND} -E echo "xflash --factory-version 15.2 --target-file ${TARGET_XN} --upgrade 1 ${XE_F3F4} --upgrade 2 ${XE_F5} --upgrade 3 ${XE_F1} --upgrade 4 ${XE_F6F7} -o ${CMAKE_CURRENT_LIST_DIR}/update_${APP_BASE}_${FW_VERSION}.bin"
COMMAND ${CMAKE_COMMAND} -E echo "xflash --factory-version 15.2 --target-file ${TARGET_XN} --upgrade 1 ${XE_F3} --upgrade 5 ${XE_F4} --upgrade 2 ${XE_F5} --upgrade 3 ${XE_F1} --upgrade 4 ${XE_F6F7} -o ${CMAKE_CURRENT_LIST_DIR}/update_${APP_BASE}_${FW_VERSION}.bin"
COMMAND xflash --factory-version 15.2 --target-file ${TARGET_XN}
--upgrade 2 ${XE_F5}
--upgrade 3 ${XE_F1}
--upgrade 1 ${XE_F3F4}
--upgrade 1 ${XE_F3}
--upgrade 4 ${XE_F6F7}
--upgrade 5 ${XE_F4}
-o ${CMAKE_CURRENT_LIST_DIR}/update_${APP_BASE}_${FW_VERSION}.bin
#DEPENDS f1_music_uac2 f3_f4_fps_uac2 f5_music_uac1 f6_f7_fps_uac1
COMMENT "Generating update image: update_${APP_BASE}_${FW_VERSION}.bin"

View File

@@ -1,2 +1,4 @@
rem 改动原因F3/F4 拆分——slot1=F3 Gameslot5=F4 AI7.1
xflash bin/fact/app_usb_aud_sy102_fact.xe --loader loader.o --upgrade 2 bin/f5_music_uac1/app_usb_aud_sy102_f5_music_uac1.xe --upgrade 3 bin/f1_music_uac2/app_usb_aud_sy102_f1_music_uac2.xe --upgrade 1 ..\..\..\csl_sy102\sw_usb_audio\app_usb_aud_phaten_golden_6ch\bin/f3_fps_uac2/app_usb_aud_sy102_f3_fps_uac2.xe --upgrade 4 bin/f6_f7_fps_uac1/app_usb_aud_sy102_f6_f7_fps_uac1.xe --upgrade 5 ..\..\..\csl_sy102\sw_usb_audio\app_usb_aud_phaten_golden_6ch\bin/f4_fps_uac2/app_usb_aud_sy102_f4_fps_uac2.xe -o %1
xflash bin/fact/app_usb_aud_sy102_fact.xe --loader loader.o --upgrade 2 bin/f5_music_uac1/app_usb_aud_sy102_f5_music_uac1.xe --upgrade 3 bin/f1_music_uac2/app_usb_aud_sy102_f1_music_uac2.xe --upgrade 1 bin/f3_fps_uac2/app_usb_aud_sy102_f3_fps_uac2.xe --upgrade 4 bin/f6_f7_fps_uac1/app_usb_aud_sy102_f6_f7_fps_uac1.xe --upgrade 5 bin/f4_fps_uac2/app_usb_aud_sy102_f4_fps_uac2.xe -o %1
rem --upgrade 4 bin/f6_f7_fps_uac1/app_usb_aud_sy102_f6_f7_fps_uac1.xe

View File

@@ -1 +1 @@
xflash --factory-version 15.3 --target-file src/core/synido.xn --upgrade 2 bin/f5_music_uac1/app_usb_aud_sy102_f5_music_uac1.xe --upgrade 3 ..\..\..\csl_sy102\sw_usb_audio\app_usb_aud_phaten_golden_6ch\bin/f1_music_uac2/app_usb_aud_sy102_f1_music_uac2.xe --upgrade 1 ..\..\..\csl_sy102\sw_usb_audio\app_usb_aud_phaten_golden_6ch\bin/f3_fps_uac2/app_usb_aud_sy102_f3_fps_uac2.xe --upgrade 4 ..\..\..\csl_sy102\sw_usb_audio\app_usb_aud_phaten_golden_6ch\bin/f6_f7_fps_uac1/app_usb_aud_sy102_f6_f7_fps_uac1.xe --upgrade 5 ..\..\..\csl_sy102\sw_usb_audio\app_usb_aud_phaten_golden_6ch\bin/f4_fps_uac2/app_usb_aud_sy102_f4_fps_uac2.xe -o %1
xflash --factory-version 15.3 --target-file src/core/synido.xn --upgrade 2 bin/f5_music_uac1/app_usb_aud_sy102_f5_music_uac1.xe --upgrade 3 bin/f1_music_uac2/app_usb_aud_sy102_f1_music_uac2.xe --upgrade 1 bin/f3_fps_uac2/app_usb_aud_sy102_f3_fps_uac2.xe --upgrade 4 bin/f6_f7_fps_uac1/app_usb_aud_sy102_f6_f7_fps_uac1.xe --upgrade 5 bin/f4_fps_uac2/app_usb_aud_sy102_f4_fps_uac2.xe -o %1

View File

@@ -105,6 +105,8 @@ unsigned g_led_enable = 1; // LED开关默认开启
// HID 0xB0 CMD_EXPAND_GAIN到达时由eq.c设置button_task读取后更新footstep LED
// -1 (0xFFFFFFFF) 表示无待处理请求
unsigned g_hid_expand_gain_request = (unsigned)-1;
// 改动原因led_on()全局亮度仅30脚步增强开档需满亮(255)旧3档高亮档原为1282档改15dB后应更亮
#define LED_FOOTSTEP_ON_BRIGHTNESS 255
// HID 0xB0 CMD_LMT_THRESHOLD到达时由eq.c设置button_task读取后保存到flash
// 存储值为-threshold (0~35)-1 (0xFFFFFFFF) 表示无待处理请求
unsigned g_hid_lmt_threshold_request = (unsigned)-1;
@@ -985,9 +987,9 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
}
}
// 改动原因2档脚步增强——开档(15dB)点亮LED
// 改动原因2档脚步增强——开档(15dB)用满亮PWM不用led_on(30)
if (flag_footsteps_enhancement == 1) {
led_on(&led_ctx, LED_FOOTSTEP_MODE);
led_set_brightness(&led_ctx, LED_FOOTSTEP_MODE, LED_FOOTSTEP_ON_BRIGHTNESS);
led_update_all(&led_ctx);
}
#endif
@@ -1644,8 +1646,10 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
case 3: led_on(&led_ctx, LED_AI7_1); break;
default: break;
}
// 改动原因2档脚步增强开档(15dB)恢复亮LED
if (flag_footsteps_enhancement == 1) led_on(&led_ctx, LED_FOOTSTEP_MODE);
// 改动原因2档脚步增强开档(15dB)恢复亮LED(255)
if (flag_footsteps_enhancement == 1) {
led_set_brightness(&led_ctx, LED_FOOTSTEP_MODE, LED_FOOTSTEP_ON_BRIGHTNESS);
}
if (flag_aidenoise_onoff) led_on(&led_ctx, LED_ANC);
led_update_all(&led_ctx);
// 等待松键,防止重启后再次触发出厂恢复循环
@@ -1711,7 +1715,7 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
else
{
saved_footstep = 15; // 改动原因:开档 15dB唯一增强档
led_on(&led_ctx, LED_FOOTSTEP_MODE);
led_set_brightness(&led_ctx, LED_FOOTSTEP_MODE, LED_FOOTSTEP_ON_BRIGHTNESS);
}
led_update_all(&led_ctx);
// 发送expand_gain到tile1执行
@@ -1744,7 +1748,7 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
if (flag_footsteps_enhancement == 0) {
led_off(&led_ctx, LED_FOOTSTEP_MODE);
} else {
led_on(&led_ctx, LED_FOOTSTEP_MODE);
led_set_brightness(&led_ctx, LED_FOOTSTEP_MODE, LED_FOOTSTEP_ON_BRIGHTNESS);
}
led_update_all(&led_ctx);
}

View File

@@ -9,38 +9,25 @@
#include <xs1.h>
#include <xcore/chanend.h>
#include <xcore/channel.h>
#include <xcore/channel_streaming.h>
#include "xc_ptr.h"
#include "xua_conf.h"
#include "share_buffer.h"
extern uint32_t init_eq_data(unsigned sample_freq);
#if F1_MUSIC_UAC2 == 1 && DNR_ENABLE == 1
/* 改动原因3 streaming chan + 1 普通 chan 传 us 192kHz跨 tile 静态内存不共享) */
uint32_t uc_ssrc_ds_in; /* tile[0]→tile[1] 192kHz mic */
uint32_t uc_ssrc_ds_out; /* tile[1]→tile[0] 48kHz 降采样结果 */
uint32_t uc_ssrc_us_in; /* tile[0]→tile[1] 48kHz DNR 后 */
uint32_t uc_ssrc_us_out; /* tile[1]→tile[0] 192kHz 升采样结果普通chan */
#endif
void dnr_exchange_buffer(int32_t *data);
// sample_freq 作为首字发送给 tile[0] 的 dsp_main用于采样率变化检测和 EQ 初始化
void buffer_exchange(chanend_t c_data, unsigned sampsFromUsbToAudio[], unsigned sampsFromAudioToUsb[], unsigned sample_freq) {
unsigned data_in[4] = {0,0,0,0};
unsigned data_out[4] = {0,0,0,0};
data_in[0] = sampsFromUsbToAudio[0];
data_in[1] = sampsFromUsbToAudio[1];
data_in[2] = sampsFromAudioToUsb[0];
data_in[3] = sampsFromAudioToUsb[1];
chan_out_buf_word (c_data, data_in, 4);
chan_in_buf_word (c_data , data_out, 4);
sampsFromUsbToAudio[0] = data_out[0];
sampsFromUsbToAudio[1] = data_out[1];
sampsFromAudioToUsb[0] = data_out[2];
sampsFromAudioToUsb[1] = data_out[3];
chan_out_word(c_data, sample_freq);
chan_out_buf_word (c_data, sampsFromUsbToAudio, 2);
chan_in_buf_word (c_data , sampsFromUsbToAudio, 2);
#if DNR_ENABLE == 1
chan_out_buf_word (c_data, sampsFromAudioToUsb, 2);
chan_in_buf_word (c_data , sampsFromAudioToUsb, 2);
#endif
}
@@ -51,111 +38,40 @@ void dsp_main (chanend_t c_data) {
int mic_output[I2S_CHANS_ADC];
int count = 0;
unsigned ch[1] = {2};
unsigned data_in[4] = {0,0,0,0};
unsigned data_out[4] = {0,0,0,0};
#if F1_MUSIC_UAC2 == 1
unsigned current_sample_freq = 192000;
unsigned current_sample_freq = 0;
#else
unsigned current_sample_freq = 48000;
#endif
#if F1_MUSIC_UAC2 == 1 && DNR_ENABLE == 1
static int mic_48k[2] = {0, 0};
static int us_cache[4][2] = {{0}};
static int us_cache_idx = 4; /* 4=无有效缓存输出静音0-3=当前消费 pair 索引 */
static int ds_tick = 0; /* 每拍+1满4拍处理一次 48kHz */
/* 改动原因:第一个 tick4 时 us_out 还没有数据,不能阻塞读;
* 之后每个 tick4 先读上一批(已就绪)再触发下一批,规避同拍等待 us_stereo 计算延迟 */
static int us_first_batch = 1;
#endif
init_eq_data(current_sample_freq);
clear_ring_buffer(0);
clear_ring_buffer(1);
clear_ring_buffer(2);
clear_ring_buffer(3);
#if F1_MUSIC_UAC2 == 1 && DNR_ENABLE == 1
/* 改动原因:采样率变化时复位所有 SSRC 状态,下一批重新从头开始 */
ds_tick = 0;
us_cache_idx = 4;
us_first_batch = 1;
#endif
while (1) {
chan_in_buf_word(c_data, data_in, 4);
chan_out_buf_word(c_data, data_out, 4);
unsigned sample_freq = (unsigned)chan_in_word(c_data);
chan_in_buf_word (c_data , play_input, 2);
#if EQ_ENABLE == 1
write_to_ring_buffer(0, data_in[0]);
write_to_ring_buffer(1, data_in[1]);
data_out[0] = read_from_ring_buffer(2);
data_out[1] = read_from_ring_buffer(3);
// data_out[0] = data_in[0];
// data_out[1] = data_in[1];
#else
data_out[0] = data_in[0];
data_out[1] = data_in[1];
#endif
// 采样率变化:重新初始化 EQ 系数并清空 ring buffer避免残留状态污染
if (sample_freq != current_sample_freq && sample_freq != 0) {
current_sample_freq = sample_freq;
init_eq_data(sample_freq);
clear_ring_buffer(0);
clear_ring_buffer(1);
clear_ring_buffer(2);
clear_ring_buffer(3);
play_output[0] = 0;
play_output[1] = 0;
}
chan_out_buf_word (c_data , play_output, I2S_CHANS_DAC);
#if DNR_ENABLE == 1
#if F1_MUSIC_UAC2 == 1
/* F1: 192kHz→48kHz(DS)→DNR→48kHz→192kHz(US)
*
* 时序优化说明:
* 原设计在 tick4 同一拍内"发 us_in → 等 us_stereo 计算 → 读8个 us_out"
* us_stereo 在 tile[1] 独立线程运算需 2-5µs导致 tick4 总延迟超过 5.2µs
* (192kHz 单拍周期)buffer_exchange 响应超时引发噪音。
*
* 当前设计:每个 tick4 先读上一批已就绪的 8 个 us_out 字us_rec_output_core
* 在前 3 拍期间已完成并阻塞等待消费,读取近乎零延迟),再触发本批 ds→DNR→us_in。
* 代价:录音延迟增加约 20.8µs一个 48kHz 周期),人耳不可感知。
*/
s_chan_out_word((chanend_t)uc_ssrc_ds_in, (uint32_t)data_in[2]);
s_chan_out_word((chanend_t)uc_ssrc_ds_in, (uint32_t)data_in[3]);
ds_tick++;
if (ds_tick >= 4) {
ds_tick = 0;
if (!us_first_batch) {
/* 读上一批 us_stereo 已生产的 4 对 192kHz近乎无延迟*/
us_cache[0][0] = (int)chan_in_word((chanend_t)uc_ssrc_us_out);
us_cache[0][1] = (int)chan_in_word((chanend_t)uc_ssrc_us_out);
us_cache[1][0] = (int)chan_in_word((chanend_t)uc_ssrc_us_out);
us_cache[1][1] = (int)chan_in_word((chanend_t)uc_ssrc_us_out);
us_cache[2][0] = (int)chan_in_word((chanend_t)uc_ssrc_us_out);
us_cache[2][1] = (int)chan_in_word((chanend_t)uc_ssrc_us_out);
us_cache[3][0] = (int)chan_in_word((chanend_t)uc_ssrc_us_out);
us_cache[3][1] = (int)chan_in_word((chanend_t)uc_ssrc_us_out);
us_cache_idx = 0;
}
/* 处理当前批ds→DNR→us_in结果在下一个 tick4 读取 */
mic_48k[0] = (int)s_chan_in_word((chanend_t)uc_ssrc_ds_out);
mic_48k[1] = (int)s_chan_in_word((chanend_t)uc_ssrc_ds_out);
dnr_exchange_buffer(mic_48k);
s_chan_out_word((chanend_t)uc_ssrc_us_in, (uint32_t)mic_48k[0]);
s_chan_out_word((chanend_t)uc_ssrc_us_in, (uint32_t)mic_48k[1]);
us_first_batch = 0;
}
if (us_cache_idx < 4) {
data_out[2] = us_cache[us_cache_idx][0];
data_out[3] = us_cache[us_cache_idx][1];
us_cache_idx++;
} else {
data_out[2] = 0;
data_out[3] = 0;
}
#else
dnr_exchange_buffer((int32_t *)&data_in[2]);
data_out[2] = data_in[2];
data_out[3] = data_in[3];
#endif
#else
data_out[2] = data_in[2];
data_out[3] = data_in[3];
chan_in_buf_word (c_data , mic_input, 2) ;
chan_out_buf_word (c_data , mic_output, I2S_CHANS_ADC);
#endif
write_to_ring_buffer(0, play_input[0]);
write_to_ring_buffer(1, play_input[1]);
play_output[0] = read_from_ring_buffer(2);
play_output[1] = read_from_ring_buffer(3);
#if DNR_ENABLE == 1
dnr_exchange_buffer(mic_input);
mic_output[0] = mic_input[0];
mic_output[1] = mic_input[1];
#endif
}
}

View File

@@ -8,12 +8,15 @@
#include <xclib.h>
#include <stdio.h>
#include "debug_print.h"
#include "dfu_upgrade.h"
#include "xua.h"
#if HID_DFU_EN
#ifndef DFU_FLASH_MAX_UPGRADE_SIZE
#define DFU_FLASH_MAX_UPGRADE_SIZE (2800 * 1024)
#endif
#define DFU_FLASH_ERROR()
static int dfu_flash_device_open = 0;

View File

@@ -95,7 +95,7 @@ unsigned char handle_firmware_upgrade_start(uint8_t data[], uint16_t len)
debug_printf("g_first_page_write_executed: %d\n", g_first_page_write_executed);
if (firmware_size == 0 || firmware_size > DFU_FLASH_MAX_UPGRADE_SIZE) {
if (firmware_size == 0 || firmware_size > FLASH_MAX_UPGRADE_SIZE) {
debug_printf("Firmware upgrade error: invalid size %lu\n", firmware_size);
response[0] = STATUS_SIZE_INVALID;
send_firmware_upgrade_response(FIRMWARE_UPGRADE_START, response, 1);

View File

@@ -44,11 +44,7 @@ typedef enum {
// 数据包格式:同步头(1) + 命令码(1) + 块序号(2) + 数据长度(1) + 数据(N) + Checksum(1)
// 所以最大数据长度 = 63 - 5(头部) - 1(Checksum) = 57字节
#define MAX_DATA_BLOCK_SIZE 57 // 最大数据块大小63字节HID数据包 - 5字节头部 - 1字节Checksum
#ifndef DFU_FLASH_MAX_UPGRADE_SIZE
#define DFU_FLASH_MAX_UPGRADE_SIZE (3000 * 1024)
#endif
#define FLASH_MAX_UPGRADE_SIZE (2000 * 1024) // 最大固件大小1400KB
// 页缓冲区结构
typedef struct {

View File

@@ -229,55 +229,6 @@ void UserBufferManagement(unsigned sampsFromUsbToAudio[], unsigned sampsFromAudi
#endif
}
#if defined(SPATIAL_DRAMA) || defined(SPATIAL_GAME) || defined(SPATIAL_MOVIE) || defined(SPATIAL_MUSIC) || defined(IR_SWITCHING_MODE)
// 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;
// only for Stereo game, Stereo music and Stereo movie mode
if ((is_3d > IR_OFF) && (is_3d < IR_7_1_GAME)) {
// stereo mode
ubm_egress[0][frame_index] = 0;
ubm_egress[1][frame_index] = 0;
ubm_egress[2][frame_index] = 0;
ubm_egress[3][frame_index] = 0;
ubm_egress[4][frame_index] = 0;
ubm_egress[5][frame_index] = 0;
ubm_egress[6][frame_index] = (int32_t)sum_L; //SL
ubm_egress[7][frame_index] = (int32_t)sum_R; //SR
} else {
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
for(int ch=0;ch<DSP_MIXER_OUTPUT_CHANNEL_COUNT;ch++) {
sampsFromUsbToAudio[ch] = ubm_ingress[ch][frame_index];
@@ -299,7 +250,6 @@ void UserBufferManagement(unsigned sampsFromUsbToAudio[], unsigned sampsFromAudi
#elif DNR_ENABLE == 1
buffer_exchange(uc_eq_data, sampsFromUsbToAudio, sampsFromAudioToUsb, ubm_sample_freq);
#endif
GET_SHARED_GLOBAL(is_monitor, g_monitor_switch_t1);
if (is_monitor) {
sampsFromUsbToAudio[0] += (unsigned)((((int)sampsFromAudioToUsb[0]) >> 1));
@@ -398,30 +348,7 @@ void hid_receive_task_in_c(unsigned char * RcvData, unsigned * SendData)
if (CMD_SET(CMD_ONOFF) == command_code) {
// set DrAX on/off
//audio_ex3d_onoff(pRcvBuf[1]);
uint32_t onoff = pRcvBuf[1];
//audio_ex3d_set_onoff(pRcvBuf[1]);
audio_ex3d_set_onoff(onoff);
uint32_t cur_mode;
GET_SHARED_GLOBAL(cur_mode, g_3d_on_off_t1);
if (onoff == 0) {
// 改动原因:关闭算法时记录当前声场索引(0~2)供下次打开时恢复然后仅把共享变量置为IR_OFF
if (cur_mode == IR_7_1_MOVIE) {
last_sf_idx_0_2 = 2;
} else if (cur_mode == IR_7_1_GAME) {
last_sf_idx_0_2 = 1;
} else {
last_sf_idx_0_2 = 0;
}
cur_mode = IR_OFF;
SET_SHARED_GLOBAL(g_3d_on_off_t1, cur_mode);
} else {
// 改动原因:打开算法时恢复到最近一次选择的声场(0~2),并统一映射到 IR_GAME..IR_MOVIE不再暴露6个族
unsigned new_mode;
if (last_sf_idx_0_2 == 2) new_mode = IR_7_1_MOVIE;
else if (last_sf_idx_0_2 == 1) new_mode = IR_7_1_GAME;
else new_mode = IR_GAME;
SET_SHARED_GLOBAL(g_3d_on_off_t1, new_mode);
}
audio_ex3d_set_onoff(pRcvBuf[1]);
debug_printf("Set CMD_ONOFF : %u\r\n", pRcvBuf[1]);
} else {
debug_printf("Get CMD_ONOFF : %u\r\n", bEX3D_On);
@@ -590,45 +517,12 @@ void hid_receive_task_in_c(unsigned char * RcvData, unsigned * SendData)
if (CMD_SET(CMD_SOUND_FIELD) == command_code) {
int32_t sfIdx = pRcvBuf[1];
debug_printf("Set CMD_SOUND_FIELD : ");
// 改动原因:
// - host UI 现在只暴露3个“带算法声场”GAME/MUSIC/MOVIE 三选一)。
// - 算法开关通过 CMD_ONOFF/其它接口单独控制CMD_SOUND_FIELD 不能隐式把算法打开/关闭。
// 因此CMD_SOUND_FIELD 只接受 0~2对应 GAME/MUSIC/MOVIE并且在算法OFF(IR_OFF)时只缓存选择、不改共享变量。
if (sfIdx >= 0 && sfIdx < 3) {
unsigned cur_mode;
GET_SHARED_GLOBAL(cur_mode, g_3d_on_off_t1);
last_sf_idx_0_2 = (unsigned)sfIdx;
if (cur_mode == IR_OFF) {
// 改动原因:算法已关闭时不写 g_3d_on_off_t1避免 event_polling 误判“主机改变声场”而自动打开算法
debug_printf("algorithm OFF, cache sound field idx=%d only (no implicit on/off)\n", sfIdx);
} else {
// 改动原因算法已开启时才更新声场因EX3D_SF_NUM=3不再区分6个族
unsigned new_mode;
if (sfIdx == 1) new_mode = IR_7_1_GAME;
else if (sfIdx == 2) new_mode = IR_7_1_MOVIE;
else new_mode = IR_GAME;
SET_SHARED_GLOBAL(g_3d_on_off_t1, new_mode);
debug_printf("set sound field idx=%d -> g_3d_on_off_t1=%d (no implicit on/off)\n", sfIdx, new_mode);
}
} else {
// 改动原因EX3D_SF_NUM=3后只支持0~2超过范围返回错误
if (sfIdx < EX3D_SF_NUM) {
audio_ex3d_set_sf(sfIdx);
} else
pSendBuf[idx] = 0xFFFFFFFF;
}
} else { // Get
// 改动原因:返回当前声场索引(0~2: GAME/MUSIC/MOVIE)若算法OFF则返回缓存值避免依赖 g_3d_on_off_t1=IR_OFF
unsigned cur_mode;
GET_SHARED_GLOBAL(cur_mode, g_3d_on_off_t1);
if (cur_mode == IR_OFF) {
pSendBuf[idx] = last_sf_idx_0_2;
} else if (cur_mode == IR_7_1_MOVIE) {
pSendBuf[idx] = 2;
} else if (cur_mode == IR_7_1_GAME) {
pSendBuf[idx] = 1;
} else {
pSendBuf[idx] = 0;
}
pSendBuf[idx] = 0;//EX3D_SF_Idx;
}
break;
@@ -949,30 +843,16 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c
if ((current_mode_local == 0) || (current_mode_local == 1)) {
// 无音效模式关闭EX3D和EQ算法
audio_ex3d_set_onoff(0);
is_3d_on = IR_OFF;
debug_printf("Mode 0: EX3D+EQ OFF\n");
} else if (current_mode_local == 2) {
// 音乐模式EX3D关闭EQ开启
#if (MODE_F3_F4_FPS_UAC2 == 1)
audio_ex3d_set_onoff(1);
is_3d_on = IR_GAME;
#endif
#if (MODE_F6_F7_FPS_UAC1 == 1)
audio_ex3d_set_onoff(0);
is_3d_on = IR_OFF;
#endif
} else if (current_mode_local == 3) {
#if (MODE_F3_F4_FPS_UAC2 == 1)
audio_ex3d_set_onoff(1);
is_3d_on = IR_7_1_GAME;
#endif
#if (MODE_F6_F7_FPS_UAC1 == 1)
audio_ex3d_set_onoff(1);
is_3d_on = IR_GAME;
#endif
}
#endif
} else if (tmp == 0xFD) {
// 脚步增强按键发来的 expand gain 命令
// 必须先读取payload无论是否启用EX3D
@@ -1108,37 +988,7 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c
hwtimer_set_trigger_time(timer, hwtimer_get_time(timer) + KEY_POLLING_INTERVAL);
#if USE_EX3D == 1
// 检查 host app 是否通过 HID 改变了音场状态
uint32_t host_app_sf;
GET_SHARED_GLOBAL(host_app_sf, g_3d_on_off_t1);
if (host_app_sf != is_3d_on) {
is_3d_on = host_app_sf;
// Select SF and set on/off together
if (is_3d_on == IR_OFF) {
audio_ex3d_set_onoff(0);
current_mode_local = 0;
debug_printf("3d off\n");
} else if (is_3d_on == IR_GAME) {
audio_ex3d_set_sf(0);
audio_ex3d_set_onoff(1);
current_mode_local = 1;
debug_printf("Stereo Game on (sf=0)\n");
} else if (is_3d_on == IR_7_1_GAME) {
audio_ex3d_set_sf(1);
audio_ex3d_set_onoff(1);
current_mode_local = 2;
debug_printf("3d Game on (sf=1)\n");
} else if (is_3d_on == IR_7_1_MOVIE) {
audio_ex3d_set_sf(2);
audio_ex3d_set_onoff(1);
current_mode_local = 3;
debug_printf("3d Movie on (sf=2)\n");
} else {
audio_ex3d_set_onoff(is_3d_on != IR_OFF);
}
SET_SHARED_GLOBAL(g_3d_on_off_t1, is_3d_on);
}
#endif
}
continue;
@@ -1220,25 +1070,15 @@ void ex3d_task(){
#define TD_DATA_BUFFER_ELEMENTS SPATIAL_STEREO_2K_v090h090_left_DATA_BUFFER_ELEMENTS
#elif defined(STEREO_8K)
#define TD_DATA_BUFFER_ELEMENTS SPATIAL_STEREO_8K_v090h090_left_DATA_BUFFER_ELEMENTS
#elif defined(IR_SWITCHING_MODE)
#define TD_DATA_BUFFER_ELEMENTS SPATIAL_71_GAME_v090h225_left_DATA_BUFFER_ELEMENTS
#else
#error you need to define SPATIAL_DRAMA or STEREO_8K....
#endif
#if defined (IR_SWITCHING_MODE)
int dsp_worker(chanend_t c_dsp_to_ex3d,
td_block_fir_filter_t * filters[DSP_WORKER_FILTER_PER_DATA_CH*DSP_WORKER_DATA_CH_COUNT*4]){
#else
int dsp_worker(chanend_t c_dsp_to_ex3d,
td_block_fir_filter_t * filters[DSP_WORKER_FILTER_PER_DATA_CH*DSP_WORKER_DATA_CH_COUNT]){
#endif
int32_t sample_buffer[DSP_WORKER_DATA_CH_COUNT][TD_DATA_BUFFER_ELEMENTS];
td_block_fir_data_t fir_data[DSP_WORKER_DATA_CH_COUNT];
#if defined (IR_SWITCHING_MODE)
static uint32_t ir_mode;
GET_SHARED_GLOBAL(ir_mode, g_3d_on_off_t1);
#endif
for(int i=0;i<DSP_WORKER_DATA_CH_COUNT;i++)
td_block_fir_data_init(&(fir_data[i]), sample_buffer[i], TD_DATA_BUFFER_ELEMENTS);
@@ -1248,15 +1088,6 @@ int dsp_worker(chanend_t c_dsp_to_ex3d,
memset(sample_buffer, 0, sizeof(sample_buffer));
while(1){
GET_SHARED_GLOBAL(ir_mode, g_3d_on_off_t1);
if (ir_mode) {
//ir_mode = ir_mode & (0x03);
if (ir_mode > 3) {
ir_mode -= 4;
} else {
ir_mode -= 1;
}
}
for(int ch=0;ch<DSP_WORKER_DATA_CH_COUNT;ch++){
chan_in_buf_word(c_dsp_to_ex3d, (uint32_t *)input[ch], DSP_BLOCK_LENGTH);
@@ -1269,8 +1100,8 @@ int dsp_worker(chanend_t c_dsp_to_ex3d,
}
for(int ch=0;ch<DSP_WORKER_DATA_CH_COUNT;ch++){
for(int d=0;d<DSP_WORKER_FILTER_PER_DATA_CH;d++){
if(filters[(ir_mode*6) + DSP_WORKER_FILTER_PER_DATA_CH*ch+d] != 0){
td_block_fir_compute(output[DSP_WORKER_FILTER_PER_DATA_CH*ch+d], &(fir_data[ch]), filters[(ir_mode*6) + DSP_WORKER_FILTER_PER_DATA_CH*ch+d]);
if(filters[DSP_WORKER_FILTER_PER_DATA_CH*ch+d] != 0){
td_block_fir_compute(output[DSP_WORKER_FILTER_PER_DATA_CH*ch+d], &(fir_data[ch]), filters[DSP_WORKER_FILTER_PER_DATA_CH*ch+d]);
} else {
memset(output[DSP_WORKER_FILTER_PER_DATA_CH*ch+d], 0, TD_BLOCK_FIR_LENGTH*sizeof(int32_t));
}
@@ -1345,16 +1176,28 @@ int dsp_worker_tile(chanend_t c_dsp_to_ex3d, int worker_id){
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_v090h090_left, &td_block_fir_filter_SPATIAL_71_DRAMA_v090h090_right
&td_block_fir_filter_SPATIAL_71_DRAMA_v090h315_left, &td_block_fir_filter_SPATIAL_71_DRAMA_v090h315_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_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,
&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_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
};
dsp_worker(c_dsp_to_ex3d, filters);
} else {
@@ -1366,16 +1209,28 @@ int dsp_worker_tile(chanend_t c_dsp_to_ex3d, int worker_id){
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_v090h090_left, &td_block_fir_filter_SPATIAL_71_GAME_v090h090_right
&td_block_fir_filter_SPATIAL_71_GAME_v090h315_left, &td_block_fir_filter_SPATIAL_71_GAME_v090h315_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_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,
&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_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
};
dsp_worker(c_dsp_to_ex3d, filters);
} else {
@@ -1387,16 +1242,28 @@ int dsp_worker_tile(chanend_t c_dsp_to_ex3d, int worker_id){
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_v090h090_left, &td_block_fir_filter_SPATIAL_71_MOVIE_v090h090_right
&td_block_fir_filter_SPATIAL_71_MOVIE_v090h315_left, &td_block_fir_filter_SPATIAL_71_MOVIE_v090h315_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_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,
&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_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
};
dsp_worker(c_dsp_to_ex3d, filters);
} else {
@@ -1408,61 +1275,28 @@ int dsp_worker_tile(chanend_t c_dsp_to_ex3d, int worker_id){
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_v090h090_left, &td_block_fir_filter_SPATIAL_71_MUSIC_v090h090_right
&td_block_fir_filter_SPATIAL_71_MUSIC_v090h315_left, &td_block_fir_filter_SPATIAL_71_MUSIC_v090h315_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_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,
&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_v090h135_left, &td_block_fir_filter_SPATIAL_71_MUSIC_v090h135_right
};
dsp_worker(c_dsp_to_ex3d, filters);
} else {
exit(1);
}
// IR SWITCHING MODE
#elif defined(IR_SWITCHING_MODE)
if(worker_id == 0){
td_block_fir_filter_t * filters[DSP_WORKER_DATA_CH_COUNT*DSP_WORKER_FILTER_PER_DATA_CH*4] =
} 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_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,
&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,
&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,
0,0,//&td_block_fir_filter_SPATIAL_71_DRAMA_v090h225_left, &td_block_fir_filter_SPATIAL_71_DRAMA_v090h225_right,
0,0,//&td_block_fir_filter_SPATIAL_71_DRAMA_v090h315_left, &td_block_fir_filter_SPATIAL_71_DRAMA_v090h315_right,
0,0//&td_block_fir_filter_SPATIAL_71_DRAMA_v090h090_left, &td_block_fir_filter_SPATIAL_71_DRAMA_v090h090_right
&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 == 1){
td_block_fir_filter_t * filters[DSP_WORKER_DATA_CH_COUNT*DSP_WORKER_FILTER_PER_DATA_CH*4] =
} 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_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,
&td_block_fir_filter_SPATIAL_71_GAME_v090h270_left, &td_block_fir_filter_SPATIAL_71_GAME_v090h270_right,
&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,
&td_block_fir_filter_SPATIAL_71_MUSIC_v090h270_left, &td_block_fir_filter_SPATIAL_71_MUSIC_v090h270_right,
&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,
&td_block_fir_filter_SPATIAL_71_MOVIE_v090h270_left, &td_block_fir_filter_SPATIAL_71_MOVIE_v090h270_right,
0,0,//&td_block_fir_filter_SPATIAL_71_DRAMA_v090h045_left, &td_block_fir_filter_SPATIAL_71_DRAMA_v090h045_right,
0,0,//&td_block_fir_filter_SPATIAL_71_DRAMA_v090h135_left, &td_block_fir_filter_SPATIAL_71_DRAMA_v090h135_right,
0,0//&td_block_fir_filter_SPATIAL_71_DRAMA_v090h270_left, &td_block_fir_filter_SPATIAL_71_DRAMA_v090h270_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 {

View File

@@ -1,5 +1,5 @@
#if DEBUG_MEMORY_LOG_ENABLED
#define DEBUG_PRINT_ENABLE 0
#define DEBUG_PRINT_ENABLE 1
#else
#define DEBUG_PRINT_ENABLE 0
#endif

View File

@@ -2,16 +2,6 @@
// This Software is subject to the terms of the XMOS Public Licence: Version 1.
#include "xua.h" /* Device specific defines */
#if F1_MUSIC_UAC2 == 1 && DNR_ENABLE == 1
#include "ssrc_rec_core.h"
/* 改动原因3 streaming + 1 普通 chanus 192kHz 走普通 chan跨 tile 内存不共享) */
extern uint32_t uc_ssrc_ds_in;
extern uint32_t uc_ssrc_ds_out;
extern uint32_t uc_ssrc_us_in;
extern uint32_t uc_ssrc_us_out;
#endif
#ifdef EXCLUDE_USB_AUDIO_MAIN
/**
@@ -550,14 +540,6 @@ int main()
USER_MAIN_DECLARATIONS
#if F1_MUSIC_UAC2 == 1 && DNR_ENABLE == 1
/* 改动原因streaming chan 有 tile 配额上限us 192kHz 用普通 chan 传 8 word/块 */
streaming chan c_ssrc_ds_in;
streaming chan c_ssrc_ds_out;
streaming chan c_ssrc_us_in;
chan c_ssrc_us_out;
#endif
chan c_dsp_to_ex3d[DSP_WORKER_COUNT];
chan cc_mic_level;
chan c_audiohw;
@@ -600,11 +582,6 @@ int main()
}
}
on tile[1]: mute_handler(c_mic_det);
#if F1_MUSIC_UAC2 == 1 && DNR_ENABLE == 1
on tile[1] : ds_rec_core(c_ssrc_ds_in, c_ssrc_ds_out);
on tile[1] : us_rec_core(c_ssrc_us_in);
on tile[1] : us_rec_output_core(c_ssrc_us_out);
#endif
on tile[0] : {
par {
@@ -634,17 +611,7 @@ int main()
dsp_core0();
}
}
on tile[0] : {
#if F1_MUSIC_UAC2 == 1 && DNR_ENABLE == 1
unsafe {
uc_ssrc_ds_in = (uint32_t)(unsigned)(streaming chanend)c_ssrc_ds_in;
uc_ssrc_ds_out = (uint32_t)(unsigned)(streaming chanend)c_ssrc_ds_out;
uc_ssrc_us_in = (uint32_t)(unsigned)(streaming chanend)c_ssrc_us_in;
uc_ssrc_us_out = (uint32_t)(unsigned)(chanend)c_ssrc_us_out;
}
#endif
dsp_main(c_eq_data);
}
on tile[0] : { dsp_main(c_eq_data); }
#endif
#if DNR_ENABLE == 1

View File

@@ -1,187 +0,0 @@
#define FUNCTION_NAME ds_stereo
/*
void ds_stereo(
int32_t final_shr,
int32_t * coefs,
int32_t * data,
chanend_t c_in,
chanend_t c_out,
int32_t num_phase);
*/
#define NSTACKWORDS 32
#define S_LEFT 0
#define S_RIGHT 1
#define S_LOOP_COUNT 2
#define S_COEF_BASE_POINTER 3
.cc_top FUNCTION_NAME.function
.type FUNCTION_NAME,@function
.issue_mode dual
.align 4
#define ONE 0x40000000
zeros:
.word 0, 0, 0, 0, 0, 0, 0, 0
left_chan:
.word 0, 0, 0, 0, ONE, ONE, ONE, ONE
right_chan:
.word ONE, ONE, ONE, ONE, 0, 0, 0, 0
.align 16
.globl FUNCTION_NAME
.globl FUNCTION_NAME.nstackwords
.set FUNCTION_NAME.nstackwords, 32
FUNCTION_NAME:
{ dualentsp NSTACKWORDS;}
stw r4, sp[20]
stw r5, sp[21]
stw r6, sp[22]
stw r7, sp[23]
stw r8, sp[24]
stw r9, sp[25]
stw r10, sp[26]
ldw r4, sp[NSTACKWORDS+1]
stw r4, sp[27]
//{mov r0, r0; mov r1, r1}
//{mov r2, r2; mov r3, r3}
#define CHANNELS 2
#define MACCRS_PER_PHASE 4
#define BYTES_PER_WORD 4
#define WORDS_PER_VECTOR 8
#define BYTES_PER_VECTOR (WORDS_PER_VECTOR*BYTES_PER_WORD)
ldc r10, (BYTES_PER_VECTOR+BYTES_PER_WORD)
ldc r9, BYTES_PER_VECTOR
ldc r8, (2*MACCRS_PER_PHASE-1)*BYTES_PER_VECTOR - 4 + (BYTES_PER_VECTOR+BYTES_PER_WORD) + 4
ldc r7, MACCRS_PER_PHASE*BYTES_PER_VECTOR
ldc r6, ((1<<(BYTES_PER_WORD*CHANNELS))-1)
//load number of phases - 1 to r11
ldw r11, sp[NSTACKWORDS+2]
sub r11, r11, 1
// jump to passthrough loop if num of phases is 1
bf r11, passthrough_loop
std r1, r11, sp[1]
//store the final_shr for the VLSAT
std r0, r0, sp[2]
std r0, r0, sp[3]
std r0, r0, sp[4]
std r0, r0, sp[5]
ldc r11, (MACCRS_PER_PHASE-1)*BYTES_PER_VECTOR - 4 + 4 //the final +4 is for the padding at the origin
{add r2, r2, r11; nop }
outer_loop:
ldc r11, (MACCRS_PER_PHASE-1)*BYTES_PER_VECTOR
{vclrdr ; add r11, r2, 0} //clear accu and reset data pointer
ldd r1, r4, sp[1] // set loop counter and coef base pointer
phase_loop:
//{nop; nop}
//{nop; nop}
//{nop; nop}
//MACCR 1 left
{vldc r11[0]; add r11, r11, BYTES_PER_WORD}
{vlmaccr r1[0]; add r1, r1, r9}
{vstc r11[0]; sub r11, r11, r10}
//MACCR 2 left
{vldc r11[0]; add r11, r11, BYTES_PER_WORD}
{vlmaccr r1[0]; add r1, r1, r9}
{vstc r11[0]; sub r11, r11, r10}
//MACCR 3 left
{vldc r11[0]; add r11, r11, BYTES_PER_WORD}
{vlmaccr r1[0]; add r1, r1, r9}
{vstc r11[0]; sub r11, r11, r10}
{testct r0, res[r3]; nop}
{bt r0, exit; nop}
{in r0, res[r3] ; nop } //fetch data from channel, then get the other one too
{stw r0, r11[0] ; in r5, res[r3] } //store to start of phase
//MACCR 4 left
{vldc r11[0]; add r11, r11, BYTES_PER_WORD}
{vlmaccr r1[0]; add r1, r1, r9}
{vstc r11[0]; sub r11, r11, r10}
//rewind r1 by MACCRS_PER_PHASE * BYTES_PER_VECTOR
{sub r1, r1, r7; add r11, r11, r8 }
//now do the right channel
{vldc r11[0]; add r11, r11, BYTES_PER_WORD}
{vlmaccr r1[0]; add r1, r1, r9}
{vstc r11[0]; sub r11, r11, r10} //r10 = 32 + 1
//MACCR 2 right
{vldc r11[0]; add r11, r11, BYTES_PER_WORD}
{vlmaccr r1[0]; add r1, r1, r9}
{vstc r11[0]; sub r11, r11, r10}
//MACCR 3 right
{vldc r11[0]; add r11, r11, BYTES_PER_WORD}
{vlmaccr r1[0]; add r1, r1, r9}
{vstc r11[0]; sub r11, r11, r10}
{stw r5, r11[0] ; nop } //store to start of phase
//MACCR 4 right
{vldc r11[0]; add r11, r11, BYTES_PER_WORD}
{vlmaccr r1[0]; add r1, r1, r9}
{vstc r11[0]; sub r11, r11, r10}
{nop; add r11, r11, r8 } //advance to next phase
{bt r4, phase_loop; sub r4, r4, 1}
ldaw r11, sp[4]
{vlsat r11[0]; nop} //turn all accumulators into 32 bits
ldaw r11, sp[12]
{vstr r11[0]; nop}
{vldc r11[0];ldap r11, right_chan}
{vclrdr; nop}
{vlmaccr r11[0];ldap r11, left_chan}
{vlmaccr r11[0]; ldap r11, zeros}
{vlsat r11[0]; ldaw r11, sp[0]}
vstrpv r11[0], r6
ldd r11, r4, sp[0]
// load c_out from stack to r1
ldw r1, sp[27]
{out res[r1], r4; nop}
{bu outer_loop;out res[r1], r11}
passthrough_loop:
{testct r11, res[r3]; nop}
{bt r11, exit; nop}
{in r11, res[r3]; nop}
{out res[r4], r11; nop}
{in r11, res[r3]; nop}
{bu passthrough_loop; out res[r4], r11}
exit:
{inct r0, res[r3]; nop}
ldw r4, sp[20]
ldw r5, sp[21]
ldw r6, sp[22]
ldw r7, sp[23]
ldw r8, sp[24]
ldw r9, sp[25]
ldw r10, sp[26]
retsp NSTACKWORDS
.cc_bottom FUNCTION_NAME.function

View File

@@ -1,53 +0,0 @@
#ifndef _SSRC_COEFS_H_
#define _SSRC_COEFS_H_
#include <stdint.h>
/* Downsample ratio=4, 48kHz base — 128 coefficients */
static int32_t ds4_48000_coefs[128] = {
4192603, -2703925, 1667738, -971500, 525063, -255689, 105964, 5666,
147741797, -66167732, 40186648, -26923243, 18716201, -13134162, 9159092, -6278295,
-8394794, 12071368, -17195979, 24612481, -36235752, 57613909, -114155284, 1046129870,
-80960, 208765, -445117, 844122, -1474686, 2422662, -3794257, 5724570,
11257906, -7331064, 4577066, -2707960, 1493638, -748452, 324772, -145564,
502280711, -186846312, 108570992, -71571731, 49475933, -34709734, 24277296, -16731888,
-18415916, 26595074, -37942809, 54167579, -78966289, 122300118, -223331678, 840288039,
-149225, 407138, -899861, 1748155, -3108937, 5178122, -8198765, 12476764,
12476764, -8198765, 5178122, -3108937, 1748155, -899861, 407138, -149225,
840288039, -223331678, 122300118, -78966289, 54167579, -37942809, 26595074, -18415916,
-16731888, 24277296, -34709734, 49475933, -71571731, 108570992, -186846312, 502280711,
-145564, 324772, -748452, 1493638, -2707960, 4577066, -7331064, 11257906,
5724570, -3794257, 2422662, -1474686, 844122, -445117, 208765, -80960,
1046129870, -114155284, 57613909, -36235752, 24612481, -17195979, 12071368, -8394794,
-6278295, 9159092, -13134162, 18716201, -26923243, 40186648, -66167732, 147741797,
5666, 105964, -255689, 525063, -971500, 1667738, -2703925, 4192603,
};
/* Upsample ratio=4, 48kHz base — 128 coefficients */
static int32_t us4_48000_coefs[128] = {
-80960, 208765, -445117, 844122, -1474686, 2422662, -3794257, 5724570,
-149225, 407138, -899861, 1748155, -3108937, 5178122, -8198765, 12476764,
-8394794, 12071368, -17195979, 24612481, -36235752, 57613909, -114155284, 1046129870,
147741797, -66167732, 40186648, -26923243, 18716201, -13134162, 9159092, -6278295,
4192603, -2703925, 1667738, -971500, 525063, -255689, 105964, 5666,
11257906, -7331064, 4577066, -2707960, 1493638, -748452, 324772, -145564,
-145564, 324772, -748452, 1493638, -2707960, 4577066, -7331064, 11257906,
5666, 105964, -255689, 525063, -971500, 1667738, -2703925, 4192603,
-16731888, 24277296, -34709734, 49475933, -71571731, 108570992, -186846312, 502280711,
-6278295, 9159092, -13134162, 18716201, -26923243, 40186648, -66167732, 147741797,
502280711, -186846312, 108570992, -71571731, 49475933, -34709734, 24277296, -16731888,
-18415916, 26595074, -37942809, 54167579, -78966289, 122300118, -223331678, 840288039,
12476764, -8198765, 5178122, -3108937, 1748155, -899861, 407138, -149225,
5724570, -3794257, 2422662, -1474686, 844122, -445117, 208765, -80960,
1046129870, -114155284, 57613909, -36235752, 24612481, -17195979, 12071368, -8394794,
-6278295, 9159092, -13134162, 18716201, -26923243, 40186648, -66167732, 147741797,
};
#define SSRC_DS4_48K_FINAL_SHR 2
#define SSRC_US4_FINAL_SHR 0
#define SSRC_US4_HISTORY_OFFSET (32*4)
#define SSRC_US4_NUM_PHASE 4
#define SSRC_US4_PHASE_SIZE 4
#define SSRC_RB_SIZE (2*32*5+32)
#endif

View File

@@ -1,33 +0,0 @@
#ifndef _SSRC_REC_CORE_H_
#define _SSRC_REC_CORE_H_
#if F1_MUSIC_UAC2 == 1
#include <xs1.h>
#include <platform.h>
/**
* Downsample recording core — runs on tile[1]
* Uses two streaming channels (ds_stereo.S 需要独立 c_in/c_out不能别名):
* - c_from_tile0: tile[0]→tile[1] 192kHz stereo input
* - c_to_tile0: tile[1]→tile[0] 48kHz stereo output
*/
void ds_rec_core(streaming chanend c_from_tile0, streaming chanend c_to_tile0);
/**
* Upsample recording core — runs on tile[1]
* 改动原因us_stereo.S 是持续运行函数,只会在控制 token 时返回;
* 因此本 core 只负责把 48kHz 输入升采样写入 tile[1] 本地 ring buffer。
*/
void us_rec_core(streaming chanend c_us_in);
/**
* Upsample output sender — runs on tile[1]
* 改动原因:从 us_rec_core 写入的 tile[1] 本地 ring buffer 取 192kHz 数据,
* 通过普通 channel 发回 tile[0],避免等待 us_stereo.S 返回导致死锁。
*/
void us_rec_output_core(chanend c_us_out);
#endif
#endif

View File

@@ -1,128 +0,0 @@
#if F1_MUSIC_UAC2 == 1
#include "ssrc_rec_core.h"
#include <xs1.h>
#include <platform.h>
#include <string.h>
#include "ssrc_coefs.h"
#include "ssrc_us_share_buf.h"
#ifndef SET_SAMPLE_FREQ
#define SET_SAMPLE_FREQ 1
#endif
#ifndef NUM_USB_CHAN_OUT
#define NUM_USB_CHAN_OUT 2
#endif
/* Assembly function declarations */
extern unsigned char ds_stereo(
int32_t final_shr,
int32_t *coefs,
int32_t *data,
streaming chanend c_in,
streaming chanend c_out,
int32_t num_phase);
extern unsigned char us_stereo(
int32_t *coefs,
int32_t *l_history,
int32_t *r_history,
streaming chanend c_in,
int32_t history_offset,
uint32_t ring_buffer_addr,
uint32_t tail_addr,
int32_t ring_buffer_size,
int32_t num_phase,
int32_t phase_size,
int32_t final_shr);
#pragma unsafe arrays
void ds_rec_core(streaming chanend c_from_tile0, streaming chanend c_to_tile0)
{
int32_t history[1057];
unsigned char control_token;
memset(history, 0, sizeof(history));
set_core_high_priority_on();
while (1) {
control_token = ds_stereo(
SSRC_DS4_48K_FINAL_SHR,
ds4_48000_coefs,
history,
c_from_tile0, /* c_in: read 192kHz from tile[0] */
c_to_tile0, /* c_out: write 48kHz back to tile[0] */
4
);
switch (control_token) {
case SET_SAMPLE_FREQ:
memset(history, 0, sizeof(history));
{
unsigned dummy;
c_from_tile0 :> dummy;
}
soutct(c_to_tile0, SET_SAMPLE_FREQ);
for (size_t i = 0; i < NUM_USB_CHAN_OUT * 3; ++i) {
c_to_tile0 <: 0;
}
break;
default:
break;
}
}
}
#pragma unsafe arrays
void us_rec_core(streaming chanend c_us_in)
{
int32_t l_history[64];
int32_t r_history[64];
unsigned char control_token;
memset(l_history, 0, sizeof(l_history));
memset(r_history, 0, sizeof(r_history));
ssrc_us_share_reset();
while (1) {
/* 改动原因us_stereo.S 是持续运行的生产者,只有收到控制 token 才返回。
* 正常音频路径不要在此函数后面发送数据,否则永远执行不到。 */
control_token = us_stereo(
us4_48000_coefs,
l_history, r_history,
c_us_in,
SSRC_US4_HISTORY_OFFSET,
ssrc_us_share_get_buffer_addr(),
ssrc_us_share_get_tail_addr(),
SSRC_US_RB_WORDS - 32,
SSRC_US4_NUM_PHASE,
SSRC_US4_PHASE_SIZE,
SSRC_US4_FINAL_SHR
);
switch (control_token) {
case SET_SAMPLE_FREQ:
memset(l_history, 0, sizeof(l_history));
memset(r_history, 0, sizeof(r_history));
ssrc_us_share_reset();
{
unsigned dummy;
c_us_in :> dummy;
}
break;
default:
break;
}
}
}
void us_rec_output_core(chanend c_us_out)
{
while (1) {
/* 改动原因C 函数封装 ring buffer避免 XC 并行共享对象规则报错和 C/XC 指针 ABI 差异。 */
c_us_out <: ssrc_us_share_pop_word_blocking();
}
}
#endif

View File

@@ -1,43 +0,0 @@
#include "ssrc_us_share_buf.h"
/* 改动原因:该 buffer 只在 tile[1] 内被 us_rec_core/us_rec_output_core 使用。
* us_stereo.S 通过 tail 地址写入;输出任务通过 head 读取并用普通 chan 发回 tile[0]。 */
static int32_t ssrc_us_rb[SSRC_US_RB_WORDS];
static int32_t ssrc_us_head;
/* 改动原因us_stereo.S 通过指针写 ssrc_us_tail编译器无法感知须加 volatile
* 否则 ssrc_us_share_pop_word_blocking 的 while 循环永远读缓存旧值,导致死锁 */
volatile int32_t ssrc_us_tail;
void ssrc_us_share_reset(void)
{
ssrc_us_head = 0;
ssrc_us_tail = 0;
}
uint32_t ssrc_us_share_get_buffer_addr(void)
{
return (uint32_t)ssrc_us_rb;
}
uint32_t ssrc_us_share_get_tail_addr(void)
{
return (uint32_t)&ssrc_us_tail;
}
int32_t ssrc_us_share_pop_word_blocking(void)
{
int32_t sample;
while (ssrc_us_head == ssrc_us_tail) {
/* 改动原因:输出任务等待 us_stereo.S 生产数据;只阻塞发送任务,不阻塞采样率转换任务。 */
asm volatile("nop");
}
sample = ssrc_us_rb[ssrc_us_head];
ssrc_us_head++;
if (ssrc_us_head >= (SSRC_US_RB_WORDS - 32)) {
/* 改动原因us_stereo.S 使用的 ring size 为 NUM_USB_CHAN_OUT*32*5不包含尾部padding。 */
ssrc_us_head = 0;
}
return sample;
}

View File

@@ -1,15 +0,0 @@
#ifndef _SSRC_US_SHARE_BUF_H_
#define _SSRC_US_SHARE_BUF_H_
#include <stdint.h>
/* 改动原因us_stereo.S 持续写 ring bufferXC 并行任务不能直接共享全局数组,
* 因此用 C 函数封装 ring buffer作为 tile[1] 内 us_rec_core → us_rec_output_core 的边界。 */
#define SSRC_US_RB_WORDS (2 * 32 * 5 + 32)
void ssrc_us_share_reset(void);
uint32_t ssrc_us_share_get_buffer_addr(void);
uint32_t ssrc_us_share_get_tail_addr(void);
int32_t ssrc_us_share_pop_word_blocking(void);
#endif

View File

@@ -1,182 +0,0 @@
#define FUNCTION_NAME us_stereo
/*
void us_stereo(
int32_t * coefs,
int32_t * l_history,
int32_t * r_history,
streaming chanend c_in,
int32_t history_offset, +1
int32_t * ring_buffer, +2
int32_t * tail, +3
int32_t ring_buffer_size, +4
int32_t num_phase, +5 (number of polyphase filter)
int32_t phase_size, +6 (in vpu mac size (8word))
int32_t final_shr); +7
*/
#define NSTACKWORDS 32
.cc_top FUNCTION_NAME.function
.type FUNCTION_NAME,@function
.issue_mode dual
.align 4
#define BYTES_PER_WORD 4
#define CHANNELS 2
#define WORDS_PER_VECTOR 8
#define BYTES_PER_VECTOR (WORDS_PER_VECTOR*BYTES_PER_WORD)
#define ZERO 0x0
#define ONE 0x40000000
filter_l_1010:
.word ZERO, ZERO, ZERO, ZERO, ONE, ZERO, ONE, ZERO
filter_l_0101:
.word ZERO, ZERO, ZERO, ZERO, ZERO, ONE, ZERO, ONE
filter_r_1010:
.word ONE, ZERO, ONE, ZERO, ZERO, ZERO, ZERO, ZERO
filter_r_0101:
.word ZERO, ONE, ZERO, ONE, ZERO, ZERO, ZERO, ZERO
zeros:
.word 0, 0, 0, 0, 0, 0, 0, 0
.align 16
.globl FUNCTION_NAME
.globl FUNCTION_NAME.nstackwords
.set FUNCTION_NAME.nstackwords, NSTACKWORDS
FUNCTION_NAME:
{ dualentsp NSTACKWORDS ; nop }
stw r4, sp[NSTACKWORDS-1]
stw r5, sp[NSTACKWORDS-2]
stw r6, sp[NSTACKWORDS-3]
stw r7, sp[NSTACKWORDS-4]
stw r8, sp[NSTACKWORDS-5]
stw r9, sp[NSTACKWORDS-6]
stw r10, sp[NSTACKWORDS-7] // sp[25]
// store coefs to stack[0]
stw r0, sp[24]
// store l,r history to stack[1,2]
std r2, r1, sp[0] // sp[1] sp[0]
// store the final_shr for the VLSAT to stack[2-9]
ldw r0, sp[NSTACKWORDS+7]
std r0, r0, sp[1] // sp[2] sp[3]
std r0, r0, sp[2] // sp[4] sp[5]
std r0, r0, sp[3] // sp[6] sp[7]
std r0, r0, sp[4] // sp[8] sp[9]
// store start of ring buffer and tail to stack[10,11]
ldw r0, sp[NSTACKWORDS+2]
ldw r1, sp[NSTACKWORDS+3]
std r0, r1, sp[5] // sp[11] sp[10]
// store sample history offset to stack[12]
ldw r0, sp[NSTACKWORDS+1]
stw r0, sp[12]
// store c_in to stack[13]
stw r3, sp[13]
// store num_phase and phase size to stack[14,15]
ldw r0, sp[NSTACKWORDS+5]
ldw r1, sp[NSTACKWORDS+6]
stw r0, sp[14]
stw r1, sp[15]
// temp vstr store at stack[16-23]
// program start
ldc r9, BYTES_PER_VECTOR // r9: BYTES_PER_WORD
ldc r10, BYTES_PER_VECTOR*3 // r10: coefs rewind
ldd r7, r8, sp[5] // r7: ring_buffer ptr, r8: tail ptr
outer_loop:
ldw r4, sp[12]
ldw r3, sp[13]
{ testct r11, res[r3] ; ldw r0, sp[0] } // r0: &l_history[0]
bt r11, exit
{ in r11, res[r3] ; add r2, r0, r4 } // r2: &l_history[offset]
{ in r11, res[r3] ; stw r11, r2[0] }
{ ldw r2, sp[1] ; add r1, r0, BYTES_PER_WORD } // r2: &r_history[0], r1: &l_history[4]
{ add r4, r2, r4 ; add r3, r2, BYTES_PER_WORD } // r4: &r_history[offset], r3: &r_history[4]
{ stw r11, r4[0] ; nop }
{ ldw r4, sp[24] ; add r11, r2, 0 } // r4: &coeff[0], r11: r2
ldw r6, sp[15] // r6: phase size
{ sub r6, r6, 2 ; ldw r5, sp[14] } // burst 2, r5: num of phase
{ vclrdr ; nop }
bu mac_loop
phase_loop:
{ nop ; ldaw r11, sp[2] }
{ vlsat r11[0] ; ldaw r11, sp[16] } // turn all accumulators into 32 bits
{ vstr r11[0] ; nop } // store accumulators result into stack[16-23]
{ vldc r11[0] ; nop } // load the accumulators result into VC from stack
{ vclrdr ; ldap r11, filter_r_1010 } // clear vR vD
{ vlmaccr r11[0] ; ldap r11, filter_l_1010 } // r us t1, vD:vR -> {r_us_t1, 0, 0, 0}
{ vlmaccr r11[0] ; ldap r11, filter_r_0101 } // l us t1, vD:vR -> {l_us_t1, r_us_t1, 0, 0}
{ vlmaccr r11[0] ; ldap r11, filter_l_0101 } // r us t0, vD:vR -> {r_us_t0, l_us_t1, r_us_t1, 0}
{ vlmaccr r11[0] ; ldap r11, zeros } // l us t0, vD:vR -> {l_us_t0, r_us_t0, l_us_t1, r_us_t1}, r11: all zeros for vlsat
{ vlsat r11[0] ; ldc r11, BYTES_PER_WORD*4 } // sat(vD:vR), r11: BYTES_PER_WORD*4 = 4 sample size
{ vstr r7[0] ; add r7, r7, r11 } // save result to ring buffer, update ring buffer ptr
{ ldw r11, r8[0] ; nop } // r11: tail value
{ ldw r6, sp[NSTACKWORDS+4] ; add r11, r11, 4 } // r6: ring_buffer size, r11: tail + 4
{ stw r11, r8[0] ; eq r11, r11, r6 } // update tail ptr, r11: check if tail at ring buffer end
{ bf r11, prepare_mac_loop ; nop } // if tail not at buffer end, prepare mac loop
{ ldw r7, sp[11] ; ldc r11, 0 } // r7: ring buffer start, r11: 0
{ stw r11, r8[0] ; nop } // update tail ptr to 0
prepare_mac_loop:
{ ldw r6, sp[15] ; sub r5, r5, 2 } // r6: phase size, r5: r5-2 processed two polyphase filter
{ bf r5, outer_loop ; sub r6, r6, 2 } // burst 2
ldd r1, r0, sp[0] // r0: &l_history[0], r2: &r_history[0]
{ vclrdr ; nop }
bu mac_loop_no_move
mac_loop:
// swap r11 for channel
{ add r2, r11, 0 ; add r11, r0, 0 } // r11: r0
// left channel
{ vldc r1[0] ; add r1, r1, r9 }
{ vstc r11[0] ; add r11, r11, r9 }
{ vlmaccr r4[0] ; add r4, r4, r9 }
{ vlmaccr r4[0] ; add r4, r4, r9 }
{ vldc r1[0] ; add r1, r1, r9 }
{ vstc r11[0] ; add r11, r11, r9 }
{ vlmaccr r4[0] ; add r4, r4, r9 }
{ vlmaccr r4[0] ; sub r4, r4, r10 } // rewind
// swap r11 for channel
{ add r0, r11, 0 ; add r11, r2, 0 }
// right channel
{ vldc r3[0] ; add r3, r3, r9 }
{ vstc r11[0] ; add r11, r11, r9 }
{ vlmaccr r4[0] ; add r4, r4, r9 }
{ vlmaccr r4[0] ; add r4, r4, r9 }
{ vldc r3[0] ; add r3, r3, r9 }
{ vstc r11[0] ; add r11, r11, r9 }
{ vlmaccr r4[0] ; add r4, r4, r9 }
{ vlmaccr r4[0] ; add r4, r4, r9 }
{ bt r6, mac_loop ; sub r6, r6, 2 } // vD:vR -> {right_f1, right_f0, left_f1, left_f0}
bu phase_loop
mac_loop_no_move:
// left channel
{ vldc r0[0] ; add r0, r0, r9 }
{ vlmaccr r4[0] ; add r4, r4, r9 }
{ vlmaccr r4[0] ; add r4, r4, r9 }
{ vldc r0[0] ; add r0, r0, r9 }
{ vlmaccr r4[0] ; add r4, r4, r9 }
{ vlmaccr r4[0] ; sub r4, r4, r10 } // rewind
// right channel
{ vldc r1[0] ; add r1, r1, r9 }
{ vlmaccr r4[0] ; add r4, r4, r9 }
{ vlmaccr r4[0] ; add r4, r4, r9 }
{ vldc r1[0] ; add r1, r1, r9 }
{ vlmaccr r4[0] ; add r4, r4, r9 }
{ vlmaccr r4[0] ; add r4, r4, r9 }
{ bt r6, mac_loop_no_move ; sub r6, r6, 2 }
bu phase_loop
exit:
{inct r0, res[r3]; nop}
ldw r4, sp[NSTACKWORDS-1]
ldw r5, sp[NSTACKWORDS-2]
ldw r6, sp[NSTACKWORDS-3]
ldw r7, sp[NSTACKWORDS-4]
ldw r8, sp[NSTACKWORDS-5]
ldw r9, sp[NSTACKWORDS-6]
ldw r10, sp[NSTACKWORDS-7]
retsp NSTACKWORDS
.cc_bottom FUNCTION_NAME.function