153a5a1b3Sopenharmony_ci/*** 253a5a1b3Sopenharmony_ci Copyright 2012 Peter Meerwald <p.meerwald@bct-electronic.com> 353a5a1b3Sopenharmony_ci 453a5a1b3Sopenharmony_ci PulseAudio is free software; you can redistribute it and/or modify 553a5a1b3Sopenharmony_ci it under the terms of the GNU Lesser General Public License as published 653a5a1b3Sopenharmony_ci by the Free Software Foundation; either version 2.1 of the License, 753a5a1b3Sopenharmony_ci or (at your option) any later version. 853a5a1b3Sopenharmony_ci 953a5a1b3Sopenharmony_ci PulseAudio is distributed in the hope that it will be useful, but 1053a5a1b3Sopenharmony_ci WITHOUT ANY WARRANTY; without even the implied warranty of 1153a5a1b3Sopenharmony_ci MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 1253a5a1b3Sopenharmony_ci General Public License for more details. 1353a5a1b3Sopenharmony_ci 1453a5a1b3Sopenharmony_ci***/ 1553a5a1b3Sopenharmony_ci 1653a5a1b3Sopenharmony_ci#ifdef HAVE_CONFIG_H 1753a5a1b3Sopenharmony_ci#include <config.h> 1853a5a1b3Sopenharmony_ci#endif 1953a5a1b3Sopenharmony_ci 2053a5a1b3Sopenharmony_ci#include <pulse/cdecl.h> 2153a5a1b3Sopenharmony_ci 2253a5a1b3Sopenharmony_ciPA_C_DECL_BEGIN 2353a5a1b3Sopenharmony_ci#include <pulsecore/core-util.h> 2453a5a1b3Sopenharmony_ci#include <pulsecore/modargs.h> 2553a5a1b3Sopenharmony_ci#include "echo-cancel.h" 2653a5a1b3Sopenharmony_ciPA_C_DECL_END 2753a5a1b3Sopenharmony_ci 2853a5a1b3Sopenharmony_cibool pa_null_ec_init(pa_core *c, pa_echo_canceller *ec, 2953a5a1b3Sopenharmony_ci pa_sample_spec *rec_ss, pa_channel_map *rec_map, 3053a5a1b3Sopenharmony_ci pa_sample_spec *play_ss, pa_channel_map *play_map, 3153a5a1b3Sopenharmony_ci pa_sample_spec *out_ss, pa_channel_map *out_map, 3253a5a1b3Sopenharmony_ci uint32_t *nframes, const char *args) { 3353a5a1b3Sopenharmony_ci char strss_source[PA_SAMPLE_SPEC_SNPRINT_MAX]; 3453a5a1b3Sopenharmony_ci char strss_sink[PA_SAMPLE_SPEC_SNPRINT_MAX]; 3553a5a1b3Sopenharmony_ci 3653a5a1b3Sopenharmony_ci *nframes = 256; 3753a5a1b3Sopenharmony_ci ec->params.null.out_ss = *out_ss; 3853a5a1b3Sopenharmony_ci 3953a5a1b3Sopenharmony_ci *rec_ss = *out_ss; 4053a5a1b3Sopenharmony_ci *rec_map = *out_map; 4153a5a1b3Sopenharmony_ci 4253a5a1b3Sopenharmony_ci pa_log_debug("null AEC: nframes=%u, sample spec source=%s, sample spec sink=%s", *nframes, 4353a5a1b3Sopenharmony_ci pa_sample_spec_snprint(strss_source, sizeof(strss_source), out_ss), 4453a5a1b3Sopenharmony_ci pa_sample_spec_snprint(strss_sink, sizeof(strss_sink), play_ss)); 4553a5a1b3Sopenharmony_ci 4653a5a1b3Sopenharmony_ci return true; 4753a5a1b3Sopenharmony_ci} 4853a5a1b3Sopenharmony_ci 4953a5a1b3Sopenharmony_civoid pa_null_ec_run(pa_echo_canceller *ec, const uint8_t *rec, const uint8_t *play, uint8_t *out) { 5053a5a1b3Sopenharmony_ci /* The null implementation simply copies the recorded buffer to the output 5153a5a1b3Sopenharmony_ci buffer and ignores the play buffer. */ 5253a5a1b3Sopenharmony_ci memcpy(out, rec, 256 * pa_frame_size(&ec->params.null.out_ss)); 5353a5a1b3Sopenharmony_ci} 5453a5a1b3Sopenharmony_ci 5553a5a1b3Sopenharmony_civoid pa_null_ec_done(pa_echo_canceller *ec) { 5653a5a1b3Sopenharmony_ci} 57