一. 以A2DP为例, 并仅分析SBC情况
lib库中的MusicConnectAudio函数
-
申请local_config内存, 初始化local_config参数
-
InitMultiChannelParams(&(local_config->mch_params));
决定采样频率 -
DECODER->sink_type: A2DP音乐时参数是 AUDIO_SINK_AV
-
audioDecoderConnectInputSources(DECODER->sink_type, local_config)
//目标是连接所有的input source到合适的DSP port.
{
sources_t sources;sources = audioDecoderGetSources(sink_type);
//sources.source[0] = StreamSourceFromSink(decoder->media_sink); //A2DP 时候, 实际上只得到source[0], 并且来源于空中A2DP的media_sink.
generalConfiguration(localConfig);
configureSources(&sources);
audioDecodeConnectSources(&sources, sink_type, localConfig->content_protection);
VmalTransformRtpSbcDecode(sources->source[0], StreamKalimbaSink(GetDspPort(0)
));
//创建A2DP 空中source端到KalimbaSink端的实时流媒体转换.GetDspPort(0)=0;
connectBackChannel(sink_type, localConfig->codec_data);
}
以上, 主要是连接 A2DP空中的数据到StreamKalimbaSink(0), 并实时转换.
**
6. // Connect up DSP output ports to hardware sinks
audioDecodeConnectDspOutputs(&(local_config->mch_params));
函数实现:
{
AudioOutputAddSourceOrPanic(StreamKalimbaSource(DSP_OUTPUT_PORT_PRI_LEFT), audio_output_primary_left);
//StreamK