找回密码
 立即注册

使用微信账号登录

只需一步,快速开始

搜索附件  
我爱蓝牙网 - 52Bluetooth - 最具人气蓝牙技术交流网站 附件中心 蓝牙技术交流区 Qualcomm(CSR)专区 KBA_190704020905_1_Insert_Splitter_capability_on_ Audio Sink device.pdf

KBA_190704020905_1_Insert_Splitter_capability_on_ Audio Sink device.pdf

 

qcc30xx/51xx 利用splitter capability实现音频双输出:
可以实现I2S和模拟同时输出。

apps\libs\audio_mixer\audio_mixer.c:
  1. static void mixerHardwareConnect(connection_type_t connection_type)
  2. {
  3. ….

  4. -hw_connect_data.aux_left = NULL;
  5. -hw_connect_data.aux_right = NULL;
  6. +hw_connect_data.aux_left = ChainGetOutput(mixerSpeakerGetChain(), path_role_aux_left);;
  7. +hw_connect_data.aux_right = ChainGetOutput(mixerSpeakerGetChain(), path_role_aux_right);;
  8. AudioHardwareConnectOutput(&hw_connect_data);
  9. }
复制代码
apps\libs\audio_mixer\audio_mixer_channel_roles.h:
  1. typedef enum
  2. {
  3. mixer_left_channel,
  4. mixer_right_channel,
  5. +path_role_aux_left,
  6. +path_role_aux_right,
  7. mixer_secondary_left_channel,

  8. } audio_mixer_channel_role_t;
复制代码
apps\libs\audio_mixer\audio_mixer_speaker.c:
  1. static void mixerSpeakerConfigureChain(unsigned output_sample_rate)
  2. {
  3. Operator speaker_peq_op;
  4. +Operator output_splitter_op;

  5. crossover_op = ChainGetOperatorByRole(speaker_data.chain, crossover_role);
  6. if (crossover_op)
  7. {
  8. OperatorsStandardSetUCID(crossover_op,
  9. mixerSpeakerGetCrossoverUcid(speaker_data.mode));
  10. }
  11. +output_splitter_op = ChainGetOperatorByRole(speaker_data.chain, output_splitter_role);
  12. +if (output_splitter_op)
  13. +{

  14. +}
复制代码
apps\libs\audio_mixer\audio_mixer_speaker_chain_configs.c:
  1. #define MAKE_SPEAKER_OPS_COMMON() \
  2. MAKE_OPERATOR_CONFIG(capability_id_volume, media_volume_role), \
  3. MAKE_OPERATOR_CONFIG(capability_id_peq, speaker_peq_role), \
  4. +MAKE_OPERATOR_CONFIG(capability_id_splitter, output_splitter_role), \
  5. MAKE_OPERATOR_CONFIG(capability_id_passthrough, post_processing_role)
  6. static const operator_path_node_t left_primary_left[] =
  7. {
  8. {media_volume_role, VOLUME_INPUT_MAIN1, VOLUME_OUTPUT1},
  9. {speaker_peq_role, LEFT_INPUT, LEFT_OUTPUT},
  10. +{output_splitter_role, PRIMARY_LEFT_INPUT, PRIMARY_LEFT_OUTPUT},
  11. {post_processing_role, PRIMARY_LEFT_INPUT, PRIMARY_LEFT_OUTPUT}
  12. };
  13. static const operator_path_node_t right_primary_right[] =
  14. {
  15. {media_volume_role, VOLUME_INPUT_MAIN2, VOLUME_OUTPUT2},
  16. {speaker_peq_role, RIGHT_INPUT, RIGHT_OUTPUT},
  17. +{output_splitter_role, PRIMARY_RIGHT_INPUT, PRIMARY_RIGHT_OUTPUT},
  18. {post_processing_role, PRIMARY_RIGHT_INPUT, PRIMARY_RIGHT_OUTPUT}
  19. };
  20. +static const operator_path_node_t path_aux_left[] =
  21. +{
  22. +{output_splitter_role, UNUSED_TERMINAL, SECONDARY_LEFT_OUTPUT},
  23. +{post_processing_role, SECONDARY_LEFT_OUTPUT, SECONDARY_LEFT_OUTPUT}
  24. +};
  25. +static const operator_path_node_t path_aux_right[] =
  26. +{
  27. +{output_splitter_role, UNUSED_TERMINAL, SECONDARY_RIGHT_OUTPUT},
  28. +{post_processing_role, SECONDARY_RIGHT_OUTPUT, SECONDARY_RIGHT_OUTPUT}
  29. +};
  30. static const operator_path_t paths_mono[] =
  31. {
  32. {mixer_left_channel, path_with_in_and_out,
  33. ARRAY_DIM((left_primary_left)), left_primary_left},
  34. {mixer_prompt_left_channel, path_with_input, ARRAY_DIM((prompt_mix)), prompt_mix},
  35. +{path_role_aux_left, path_with_output, ARRAY_DIM((path_aux_left)), path_aux_left}
  36. };
  37. static const operator_path_t paths_stereo[] =
  38. {
  39. {mixer_left_channel, path_with_in_and_out,
  40. ARRAY_DIM((left_primary_left)), left_primary_left},
  41. {mixer_right_channel, path_with_in_and_out, ARRAY_DIM((right_primary_right)),
  42. right_primary_right},
  43. {mixer_prompt_left_channel, path_with_input, ARRAY_DIM((prompt_mix)), prompt_mix},
  44. +{path_role_aux_left, path_with_output, ARRAY_DIM((path_aux_left)), path_aux_left},
  45. +{path_role_aux_right, path_with_output, ARRAY_DIM((path_aux_right)), path_aux_right}
  46. };
复制代码
apps\libs\audio_mixer\audio_mixer_speaker_chain_configs.h:
  1. typedef enum _audio_mixer_speaker_roles
  2. {
  3. +output_splitter_role,
  4. media_volume_role,
  5. speaker_peq_role,
  6. stereo_to_mono_role,
  7. crossover_role,
  8. master_volume_role,
  9. compander_role,
  10. post_processing_role
  11. } audio_mixer_speaker_roles_t;
复制代码


双输入、双输出,可以吗?

小黑屋|手机版|我爱蓝牙网 - 52Bluetooth

GMT+8, 2025-6-16 21:41 , Processed in 0.064024 second(s), 10 queries , Gzip On, MemCached On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

返回顶部