Lines Matching refs:ec
233 bool pa_webrtc_ec_init(pa_core *c, pa_echo_canceller *ec,
287 ec->params.drift_compensation = DEFAULT_DRIFT_COMPENSATION;
288 if (pa_modargs_get_value_boolean(ma, "drift_compensation", &ec->params.drift_compensation) < 0) {
294 if (ec->params.drift_compensation) {
349 ec->params.webrtc.agc_start_volume = agc_start_volume;
362 config.Set<webrtc::ExperimentalAgc>(new webrtc::ExperimentalAgc(true, ec->params.webrtc.agc_start_volume));
373 ec->params.webrtc.trace_callback = new PaWebrtcTraceCallback();
374 webrtc::Trace::SetTraceCallback((PaWebrtcTraceCallback *) ec->params.webrtc.trace_callback);
443 apm->echo_cancellation()->enable_drift_compensation(ec->params.drift_compensation);
460 ec->params.webrtc.agc = false;
463 ec->params.webrtc.agc = false;
471 ec->params.webrtc.agc = true;
480 ec->params.webrtc.apm = apm;
481 ec->params.webrtc.rec_ss = *rec_ss;
482 ec->params.webrtc.play_ss = *play_ss;
483 ec->params.webrtc.out_ss = *out_ss;
484 ec->params.webrtc.blocksize = (uint64_t) out_ss->rate * BLOCK_SIZE_US / PA_USEC_PER_SEC;
485 *nframes = ec->params.webrtc.blocksize;
486 ec->params.webrtc.first = true;
489 ec->params.webrtc.rec_buffer[i] = pa_xnew(float, *nframes);
491 ec->params.webrtc.play_buffer[i] = pa_xnew(float, *nframes);
499 if (ec->params.webrtc.trace_callback) {
501 delete ((PaWebrtcTraceCallback *) ec->params.webrtc.trace_callback);
508 void pa_webrtc_ec_play(pa_echo_canceller *ec, const uint8_t *play) {
509 webrtc::AudioProcessing *apm = (webrtc::AudioProcessing*)ec->params.webrtc.apm;
510 const pa_sample_spec *ss = &ec->params.webrtc.play_ss;
511 int n = ec->params.webrtc.blocksize;
512 float **buf = ec->params.webrtc.play_buffer;
526 void pa_webrtc_ec_record(pa_echo_canceller *ec, const uint8_t *rec, uint8_t *out) {
527 webrtc::AudioProcessing *apm = (webrtc::AudioProcessing*)ec->params.webrtc.apm;
528 const pa_sample_spec *rec_ss = &ec->params.webrtc.rec_ss;
529 const pa_sample_spec *out_ss = &ec->params.webrtc.out_ss;
530 float **buf = ec->params.webrtc.rec_buffer;
531 int n = ec->params.webrtc.blocksize;
538 if (ec->params.webrtc.agc) {
539 pa_volume_t v = pa_echo_canceller_get_capture_volume(ec);
547 if (ec->params.webrtc.agc) {
548 if (PA_UNLIKELY(ec->params.webrtc.first)) {
553 ec->params.webrtc.first = false;
554 new_volume = ec->params.webrtc.agc_start_volume;
560 pa_echo_canceller_set_capture_volume(ec, webrtc_volume_to_pa(new_volume));
566 void pa_webrtc_ec_set_drift(pa_echo_canceller *ec, float drift) {
567 webrtc::AudioProcessing *apm = (webrtc::AudioProcessing*)ec->params.webrtc.apm;
569 apm->echo_cancellation()->set_stream_drift_samples(drift * ec->params.webrtc.blocksize);
572 void pa_webrtc_ec_run(pa_echo_canceller *ec, const uint8_t *rec, const uint8_t *play, uint8_t *out) {
573 pa_webrtc_ec_play(ec, play);
574 pa_webrtc_ec_record(ec, rec, out);
577 void pa_webrtc_ec_done(pa_echo_canceller *ec) {
580 if (ec->params.webrtc.trace_callback) {
582 delete ((PaWebrtcTraceCallback *) ec->params.webrtc.trace_callback);
585 if (ec->params.webrtc.apm) {
586 delete (webrtc::AudioProcessing*)ec->params.webrtc.apm;
587 ec->params.webrtc.apm = NULL;
590 for (i = 0; i < ec->params.webrtc.rec_ss.channels; i++)
591 pa_xfree(ec->params.webrtc.rec_buffer[i]);
592 for (i = 0; i < ec->params.webrtc.play_ss.channels; i++)
593 pa_xfree(ec->params.webrtc.play_buffer[i]);