music_postprocessor_dsp.h 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. /*
  2. * Copyright (c) 2020, Actions Semi Co., Inc.
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. #ifndef __MUSIC_POSTPROCESSOR_DSP_H__
  7. #define __MUSIC_POSTPROCESSOR_DSP_H__
  8. typedef enum {
  9. L_R_NORMAL_MODE = 0,
  10. L_R_SWITCH_MODE = 1,
  11. L_R_MIX_MODE = 2,
  12. L_ONLY_MODE = 3,
  13. R_ONLY_MODE = 4,
  14. L_INV_MODE = 0x0100,
  15. R_INV_MODE = 0x0200,
  16. } pp_output_mode_e;
  17. typedef struct music_dae_para {
  18. /******0***dae config reg *******************/
  19. short pp_enable; //后处理使能位,0,disable, 1,enable
  20. short pp_reset; //后处理复位, 0:不做任何事情,1,复位,dsp复位完会清零,预留
  21. short pp_change_flag; //后处理参数变更,预留
  22. short pp_status; //后处理状态,预留
  23. short pp_pa_volume; //bit 15 for volume change, bit 0-14 PA volume level
  24. short pp_subwoofer_volume; //subwoofer da volume
  25. int pp_da_volume;
  26. /******1***dae inpput pcm config reg *******************/
  27. int pp_input_sample_rate; //采样率,输入声音的采样率
  28. short pp_input_channels; //通道数,目前都是按双通道处理,就是2
  29. short pp_input_bit_depth; //位宽,目前是16bit,预留
  30. short pp_input_channel_layout; //通道组织方式,比方说左右交织(目前),还是左一块,右一块,预留
  31. short pp_input_block_size; //帧长,目前为可变长度,预留
  32. short pp_input_config_reserve[2]; //预留做功能升级使用
  33. /*****2****dae output pcm config reg *******************/
  34. int pp_output_sample_rate; //采样率,预留
  35. short pp_output_channels; //通道数,目前都是按双通道处理,预留
  36. short pp_output_bit_depth; //位宽,目前是16bit,预留
  37. short pp_output_channel_layout; //通道组织方式,比方说左右交织(目前),还是左一块,右一块,预留
  38. short pp_output_block_size; //帧长,目前为可变长度
  39. short pp_output_mode_config; //输出配置,预留
  40. short pp_output_config_reserve[1]; //预留做功能升级使用;
  41. /****3*****dae post process before(such as ennergy caculation,TimeDomainEnergy) config reg *******************/
  42. short tde_enable; //预留
  43. short tde_version; //预留
  44. short tde_mean; //mean,
  45. short tde_max; //pcm abs max value
  46. short tde_reserve[4]; //预留
  47. /**************freq spetrum display*********************/
  48. short fsd__enable;
  49. short fsd__version;
  50. short duration_ms; //统计时长,单位ms
  51. short num_band; //频段数,算法内部最多支持10段
  52. short f_c[12]; //带通中心频率
  53. short energys[12]; //计算出来的频段能量,供方案端读!!!
  54. /**************Multi-freq band energy*********************/
  55. short mfbe_enable;
  56. short mfbe_version;
  57. short num_freq_point; //频点数,算法内部最多支持12点
  58. short mfbe_Reserve0;
  59. short freq_point[16]; //default:0 各频点数组,单位Hz
  60. short freq_point_mag[8]; //每个频点只占用一个byte,计算出来的频点能量, [0, 157], 取负值代表能量的db值, 值越大,能量越大, 0代表最大值,-157代表最小值
  61. /****4****dae post process end(such as fade in/out and mute) config reg *******************/
  62. short pp_end_version;
  63. short fade_in_flag; //淡入标志位,置1表示下一帧开始淡入
  64. short fade_in_time_ms; //淡入长度,[50 100 200 300 400 500]ms
  65. short fade_out_flag; //淡出标志位,置1表示下一帧开始淡出
  66. short fade_out_time_ms; //淡出长度,[50 100 200 300 400 500]ms
  67. short mute_flag; //静音标志位,置1表示下一帧开始静音
  68. short mute_time_ms; //静音长度,长度没有限制,单位ms
  69. short pp_end_reserve[1]; //预留
  70. /****5* resever such as debug info ****/
  71. //Pre-cut模块后,有一个交叉混音的模块,即Lout = Lin * a + Rin * b, Rout=Lin * c + Rin * d, 其中a,b,c,d为-1~1之间的系数,为简单起见,可以a=d,b=c
  72. short pp_ext_mode; //0 for disable, 1 for cross mix, others TBD
  73. short cross_mix_a; //[-1,1),0.15 signed format, 32767 for 0.999.., -32768 for -1.0
  74. short cross_mix_b; //[-1,1),0.15 signed format, 32767 for 0.999.., -32768 for -1.0
  75. short cross_mix_c; //[-1,1),0.15 signed format, 32767 for 0.999.., -32768 for -1.0
  76. short cross_mix_d; //[-1,1),0.15 signed format, 32767 for 0.999.., -32768 for -1.0
  77. short PostProcess_ext_reserve[11];
  78. /**********dae module infomation from tools or bin file *******************/
  79. short dae_enable; //1:enable, 0:disable for bypass
  80. short dae_reset; //1:need reset, 0: no need reset or finish reset
  81. short dae_change_flag; //1: has been changed, 0: not changed
  82. short dae_para_info_len; //len of dae para info, unit:byte
  83. void *dae_para_info_addr_mcu; //address for dae para info at mcu side
  84. void *dae_para_info_addr_dsp; //address for dae para info at mcu side
  85. short dae_IP_vendor; //indicate dae ip vendor, 0 for acts, 1,....
  86. short dae_config_info_reserve[7]; //reserve
  87. //dae_para_info_t dae_para_info;
  88. char dae_para_info_array[1024]; //0x60400
  89. } music_dae_para_t;
  90. #endif /* __MUSIC_POSTPROCESSOR_DSP_H__ */