void CsrSubwooferPluginConnect(Sink audio_sink, Task codec_task, Task app_task, subwooferPluginConnectParams * params) { FILE_INDEX index; /* Update the current DSP status */ SetCurrentDspStatus(DSP_LOADING); /* Give Kalimba the plugin task so it knows where to send messages */ (void) MessageCancelAll( (TaskData*)&csr_subwoofer_plugin, MESSAGE_FROM_KALIMBA); MessageKalimbaTask( (TaskData*)&csr_subwoofer_plugin ); /* Load the Subwofoer DSP application - Panic if it could not be loaded */ index = PanicFalse( FileFind(FILE_ROOT, kal, sizeof(kal) - 1) ); PanicFalse( KalimbaLoad(index) ); /* update current DSP status */ SetCurrentDspStatus(DSP_LOADED_IDLE); /* Allocate memory to store the plugin data */ plugin_data = (subwooferPluginData*)PanicUnlessMalloc(sizeof(subwooferPluginData)); /* Initialise the plugin data based on parameters supplied by the application */ plugin_data->audio_source = StreamSourceFromSink(audio_sink); plugin_data->swat_system_volume_db = params->swat_system_volume_db; plugin_data->swat_trim_gain_db = params->swat_trim_gain_db; plugin_data->adc_volume_index = params->adc_volume; plugin_data->input = params->input; plugin_data->output = params->output; plugin_data->sample_rate = params->sample_rate; plugin_data->adc_sample_rate = params->adc_sample_rate; plugin_data->codec_task = codec_task; plugin_data->app_task = app_task; plugin_data->dsp_set_sample_rate = 0; /* set later in response to AUDIO_PLUGIN_SET_MODE_MSG */ /* Zero the codecs output gain */ CodecSetOutputGainNow(plugin_data->codec_task, 0, left_and_right_ch); CodecSetInputGainNow(plugin_data->codec_task, 0, left_and_right_ch); /* If using the ADC, set the ADC source */ if (plugin_data->input == SUBWOOFER_INPUT_ADC) { /* Get the ADC source */ plugin_data->audio_source = StreamAudioSource(AUDIO_HARDWARE_CODEC, AUDIO_INSTANCE_0, AUDIO_CHANNEL_A); } /* Disconnect the source in case it's currently being disposed */ StreamDisconnect(StreamSourceFromSink(audio_sink), 0); PRINT(("[SW_PLUGIN] : CsrSubwooferPluginConnect - complete\n")); }
/************************************************************************* NAME InitPreAmp DESCRIPTION Enable the Pre Amp if configured to do so channel contains the audio channel that you want to enable the pre amp on RETURNS */ static void initPreAmp( audio_channel channel ) { Source source = NULL ; source = StreamAudioSource(AUDIO_HARDWARE_CODEC, AUDIO_INSTANCE_0, channel); if( ((channel == AUDIO_CHANNEL_A) && (theSink.conf1->PIOIO.digital.mic_a.pre_amp)) || ((channel == AUDIO_CHANNEL_B)&& (theSink.conf1->PIOIO.digital.mic_b.pre_amp)) ) { /* Use the microphone pre-amp */ if(!SourceConfigure(source, STREAM_CODEC_MIC_INPUT_GAIN_ENABLE,TRUE )) { INIT_DEBUG(("INIT: Init Pre Amp FAIL [%x]\n" , (int)channel )) ; } } /* Close the Source*/ SourceClose(source); }
/**************************************************************************** DESCRIPTION plays a tone using the audio plugin */ void CsrA2dpDecoderPluginPlayTone ( A2dpPluginTaskdata *task, audio_note * tone, Task codec_task, uint16 tone_volume , bool stereo) { Source lSource ; Sink lSink ; if (!DECODER) Panic() ; PRINT(("DECODER: Tone Start\n")) ; lSink = StreamKalimbaSink(3) ; /*request an indication that the tone has completed / been disconnected*/ MessageSinkTask ( lSink , (TaskData*) task ) ; /*connect the tone*/ lSource = StreamAudioSource ( (const audio_note *) (tone) ) ; /*mix the tone to the SBC*/ StreamConnectAndDispose( lSource , lSink ) ; }
void A2dpStartKalimbaStreaming(const A2DP *a2dp, uint16 media_sink) { FILE_INDEX index = FILE_NONE; #ifdef BUILD_FOR_23FW Transform t; #else Transform t, l_t, r_t; Source l_src = StreamAudioSource(AUDIO_HARDWARE_CODEC, AUDIO_INSTANCE_0, AUDIO_CHANNEL_A); Source r_src = StreamAudioSource(AUDIO_HARDWARE_CODEC, AUDIO_INSTANCE_1, AUDIO_CHANNEL_B); Sink l_snk = StreamAudioSink(AUDIO_HARDWARE_CODEC, AUDIO_INSTANCE_0, AUDIO_CHANNEL_A); Sink r_snk = StreamAudioSink(AUDIO_HARDWARE_CODEC, AUDIO_INSTANCE_1, AUDIO_CHANNEL_B); #endif /* load SBC codec */ index = FileFind(FILE_ROOT, sbc_encoder, sizeof(sbc_encoder)-1); if (!KalimbaLoad(index)) /* codec load failure, Panic as the test isn't going to work now */ Panic(); /* Init and configure RTP */ t = TransformRtpSbcEncode(StreamKalimbaSource(0), (Sink)media_sink); TransformConfigure(t, VM_TRANSFORM_RTP_SBC_ENCODE_PACKET_SIZE, 668); TransformConfigure(t, VM_TRANSFORM_RTP_SBC_ENCODE_MANAGE_TIMING, FALSE); (void)TransformStart(t); /* Configure SBC encoding format */ (void)PanicFalse(KalimbaSendMessage(KALIMBA_MSG_SBCENC_SET_PARAMS, 0x00bd, 0, 0, 0)); (void)PanicFalse(KalimbaSendMessage(KALIMBA_MSG_SBCENC_SET_BITPOOL, 0x0030, 0, 0, 0)); #ifdef BUILD_FOR_23FW StreamDisconnect(StreamPcmSource(0), StreamPcmSink(0)); StreamDisconnect(StreamPcmSource(1), StreamPcmSink(1)); /* set up ADCs */ (void)PcmClearAllRouting(); (void)PanicFalse(PcmRateAndRoute(0, PCM_NO_SYNC, 44100, 44100, VM_PCM_INTERNAL_A)); (void)PanicFalse(PcmRateAndRoute(1, 0, 44100, 44100, VM_PCM_INTERNAL_B)); (void)PanicFalse(StreamConnect(StreamPcmSource(0),StreamKalimbaSink(0))); (void)PanicFalse(StreamConnect(StreamPcmSource(1),StreamKalimbaSink(1))); #else SourceClose(l_src); SourceClose(r_src); SinkClose(l_snk); SinkClose(r_snk); (void) SourceConfigure(l_src, STREAM_CODEC_INPUT_RATE, 44100); (void) SourceConfigure(r_src, STREAM_CODEC_INPUT_RATE, 44100); (void) SourceSynchronise(l_src, r_src); /* set up ADCs */ l_t = StreamConnect(l_src, StreamKalimbaSink(0)); r_t = StreamConnect(r_src, StreamKalimbaSink(1)); (void)TransformStart(l_t); (void)TransformStart(r_t); #endif /* Start decode */ (void) PanicFalse(KalimbaSendMessage(KALIMBA_MSG_GO,0,0,0,0)); }