qcc30xx/51xx 利用splitter capability实现音频双输出
可以实现I2S和模拟同时输出。apps\libs\audio_mixer\audio_mixer.c:
static void mixerHardwareConnect(connection_type_t connection_type)
{
….
-hw_connect_data.aux_left = NULL;
-hw_connect_data.aux_right = NULL;
+hw_connect_data.aux_left = ChainGetOutput(mixerSpeakerGetChain(), path_role_aux_left);;
+hw_connect_data.aux_right = ChainGetOutput(mixerSpeakerGetChain(), path_role_aux_right);;
AudioHardwareConnectOutput(&hw_connect_data);
}apps\libs\audio_mixer\audio_mixer_channel_roles.h:
typedef enum
{
mixer_left_channel,
mixer_right_channel,
+path_role_aux_left,
+path_role_aux_right,
mixer_secondary_left_channel,
…
} audio_mixer_channel_role_t;apps\libs\audio_mixer\audio_mixer_speaker.c:
static void mixerSpeakerConfigureChain(unsigned output_sample_rate)
{
Operator speaker_peq_op;
+Operator output_splitter_op;
…
crossover_op = ChainGetOperatorByRole(speaker_data.chain, crossover_role);
if (crossover_op)
{
OperatorsStandardSetUCID(crossover_op,
mixerSpeakerGetCrossoverUcid(speaker_data.mode));
}
+output_splitter_op = ChainGetOperatorByRole(speaker_data.chain, output_splitter_role);
+if (output_splitter_op)
+{
+}apps\libs\audio_mixer\audio_mixer_speaker_chain_configs.c:
#define MAKE_SPEAKER_OPS_COMMON() \
MAKE_OPERATOR_CONFIG(capability_id_volume, media_volume_role), \
MAKE_OPERATOR_CONFIG(capability_id_peq, speaker_peq_role), \
+MAKE_OPERATOR_CONFIG(capability_id_splitter, output_splitter_role), \
MAKE_OPERATOR_CONFIG(capability_id_passthrough, post_processing_role)
static const operator_path_node_t left_primary_left[] =
{
{media_volume_role, VOLUME_INPUT_MAIN1, VOLUME_OUTPUT1},
{speaker_peq_role, LEFT_INPUT, LEFT_OUTPUT},
+{output_splitter_role, PRIMARY_LEFT_INPUT, PRIMARY_LEFT_OUTPUT},
{post_processing_role, PRIMARY_LEFT_INPUT, PRIMARY_LEFT_OUTPUT}
};
static const operator_path_node_t right_primary_right[] =
{
{media_volume_role, VOLUME_INPUT_MAIN2, VOLUME_OUTPUT2},
{speaker_peq_role, RIGHT_INPUT, RIGHT_OUTPUT},
+{output_splitter_role, PRIMARY_RIGHT_INPUT, PRIMARY_RIGHT_OUTPUT},
{post_processing_role, PRIMARY_RIGHT_INPUT, PRIMARY_RIGHT_OUTPUT}
};
+static const operator_path_node_t path_aux_left[] =
+{
+{output_splitter_role, UNUSED_TERMINAL, SECONDARY_LEFT_OUTPUT},
+{post_processing_role, SECONDARY_LEFT_OUTPUT, SECONDARY_LEFT_OUTPUT}
+};
+static const operator_path_node_t path_aux_right[] =
+{
+{output_splitter_role, UNUSED_TERMINAL, SECONDARY_RIGHT_OUTPUT},
+{post_processing_role, SECONDARY_RIGHT_OUTPUT, SECONDARY_RIGHT_OUTPUT}
+};
static const operator_path_t paths_mono[] =
{
{mixer_left_channel, path_with_in_and_out,
ARRAY_DIM((left_primary_left)), left_primary_left},
{mixer_prompt_left_channel, path_with_input, ARRAY_DIM((prompt_mix)), prompt_mix},
+{path_role_aux_left, path_with_output, ARRAY_DIM((path_aux_left)), path_aux_left}
};
static const operator_path_t paths_stereo[] =
{
{mixer_left_channel, path_with_in_and_out,
ARRAY_DIM((left_primary_left)), left_primary_left},
{mixer_right_channel, path_with_in_and_out, ARRAY_DIM((right_primary_right)),
right_primary_right},
{mixer_prompt_left_channel, path_with_input, ARRAY_DIM((prompt_mix)), prompt_mix},
+{path_role_aux_left, path_with_output, ARRAY_DIM((path_aux_left)), path_aux_left},
+{path_role_aux_right, path_with_output, ARRAY_DIM((path_aux_right)), path_aux_right}
};apps\libs\audio_mixer\audio_mixer_speaker_chain_configs.h:
typedef enum _audio_mixer_speaker_roles
{
+output_splitter_role,
media_volume_role,
speaker_peq_role,
stereo_to_mono_role,
crossover_role,
master_volume_role,
compander_role,
post_processing_role
} audio_mixer_speaker_roles_t;
技术大牛! 非常不错,赞:lol 双输入、双输出,可以吗? adk6.4.2.26按照这个方法会panic 学习了
页:
[1]