[pulseaudio-discuss] [PATCH v2 01/25] echo-cancel: Update webrtc-audio-processing usage to new API
Arun Raghavan
arun at accosted.net
Sun Jan 17 23:33:07 PST 2016
On 16 January 2016 at 14:03, Tanu Kaskinen <tanuk at iki.fi> wrote:
> On Wed, 2015-12-16 at 09:09 +0530, arun at accosted.net wrote:
>> From: Arun Raghavan <git at arunraghavan.net>
>>
>> ---
>> configure.ac | 2 +-
>> src/Makefile.am | 2 +-
>> src/modules/echo-cancel/webrtc.cc | 54 +++++++++++++++++++++------------------
>> 3 files changed, 31 insertions(+), 27 deletions(-)
>>
>> diff --git a/configure.ac b/configure.ac
>> index b9cd3d1..26c3e29 100644
>> --- a/configure.ac
>> +++ b/configure.ac
>> @@ -1371,7 +1371,7 @@ AC_ARG_ENABLE([webrtc-aec],
>> AS_HELP_STRING([--enable-webrtc-aec], [Enable the optional WebRTC-based echo canceller]))
>>
>> AS_IF([test "x$enable_webrtc_aec" != "xno"],
>> - [PKG_CHECK_MODULES(WEBRTC, [ webrtc-audio-processing ], [HAVE_WEBRTC=1], [HAVE_WEBRTC=0])],
>> + [PKG_CHECK_MODULES(WEBRTC, [ webrtc-audio-processing > 0.1 ], [HAVE_WEBRTC=1], [HAVE_WEBRTC=0])],
>> [HAVE_WEBRTC=0])
>>
>> AS_IF([test "x$enable_webrtc_aec" = "xyes" && test "x$HAVE_WEBRTC" = "x0"],
>> diff --git a/src/Makefile.am b/src/Makefile.am
>> index f1bd38d..533b646 100644
>> --- a/src/Makefile.am
>> +++ b/src/Makefile.am
>> @@ -50,7 +50,7 @@ AM_CPPFLAGS = \
>> -DPULSE_LOCALEDIR=\"$(localedir)\"
>> AM_CFLAGS = \
>> $(PTHREAD_CFLAGS)
>> -AM_CXXFLAGS = $(AM_CFLAGS)
>> +AM_CXXFLAGS = $(AM_CFLAGS) -std=c++11
>> SERVER_CFLAGS = -D__INCLUDED_FROM_PULSE_AUDIO
>>
>> AM_LIBADD = $(PTHREAD_LIBS) $(INTLLIBS)
>> diff --git a/src/modules/echo-cancel/webrtc.cc b/src/modules/echo-cancel/webrtc.cc
>> index 511c7ee..4a23377 100644
>> --- a/src/modules/echo-cancel/webrtc.cc
>> +++ b/src/modules/echo-cancel/webrtc.cc
>> @@ -33,8 +33,8 @@ PA_C_DECL_BEGIN
>> #include "echo-cancel.h"
>> PA_C_DECL_END
>>
>> -#include
>> -#include
>> +#include
>> +#include
>>
>> #define BLOCK_SIZE_US 10000
>>
>> @@ -80,6 +80,7 @@ bool pa_webrtc_ec_init(pa_core *c, pa_echo_canceller *ec,
>> pa_sample_spec *out_ss, pa_channel_map *out_map,
>> uint32_t *nframes, const char *args) {
>> webrtc::AudioProcessing *apm = NULL;
>> + webrtc::ProcessingConfig pconfig;
>> bool hpf, ns, agc, dgc, mobile, cn;
>> int rm = -1;
>> pa_modargs *ma;
>> @@ -153,7 +154,7 @@ bool pa_webrtc_ec_init(pa_core *c, pa_echo_canceller *ec,
>> }
>> }
>>
>> - apm = webrtc::AudioProcessing::Create(0);
>> + apm = webrtc::AudioProcessing::Create();
>>
>> out_ss->format = PA_SAMPLE_S16NE;
>> *play_ss = *out_ss;
>> @@ -163,22 +164,19 @@ bool pa_webrtc_ec_init(pa_core *c, pa_echo_canceller *ec,
>> *rec_ss = *out_ss;
>> *rec_map = *out_map;
>>
>> - apm->set_sample_rate_hz(out_ss->rate);
>> -
>> - apm->set_num_channels(out_ss->channels, out_ss->channels);
>> - apm->set_num_reverse_channels(play_ss->channels);
>> + pconfig = {
>> + webrtc::StreamConfig(out_ss->rate, out_ss->channels, false), /* input stream */
>> + webrtc::StreamConfig(out_ss->rate, out_ss->channels, false), /* output stream */
>> + webrtc::StreamConfig(out_ss->rate, out_ss->channels, false), /* reverse input stream */
>> + webrtc::StreamConfig(out_ss->rate, out_ss->channels, false), /* reverse output stream */
>> + };
>> + apm->Initialize(pconfig);
>>
>> if (hpf)
>> apm->high_pass_filter()->Enable(true);
>>
>> if (!mobile) {
>> - if (ec->params.drift_compensation) {
>> - apm->echo_cancellation()->set_device_sample_rate_hz(out_ss->rate);
>> - apm->echo_cancellation()->enable_drift_compensation(true);
>> - } else {
>> - apm->echo_cancellation()->enable_drift_compensation(false);
>> - }
>> -
>> + apm->echo_cancellation()->enable_drift_compensation(ec->params.drift_compensation);
>> apm->echo_cancellation()->Enable(true);
>> } else {
>> apm->echo_control_mobile()->set_routing_mode(static_cast(rm));
>> @@ -225,7 +223,7 @@ fail:
>> if (ma)
>> pa_modargs_free(ma);
>> if (apm)
>> - webrtc::AudioProcessing::Destroy(apm);
>> + delete apm;
>>
>> return false;
>> }
>> @@ -235,10 +233,13 @@ void pa_webrtc_ec_play(pa_echo_canceller *ec, const uint8_t *play) {
>> webrtc::AudioFrame play_frame;
>> const pa_sample_spec *ss = &ec->params.priv.webrtc.sample_spec;
>>
>> - play_frame._audioChannel = ss->channels;
>> - play_frame._frequencyInHz = ss->rate;
>> - play_frame._payloadDataLengthInSamples = ec->params.priv.webrtc.blocksize / pa_frame_size(ss);
>> - memcpy(play_frame._payloadData, play, ec->params.priv.webrtc.blocksize);
>> + play_frame.num_channels_ = ss->channels;
>> + play_frame.sample_rate_hz_ = ss->rate;
>> + play_frame.interleaved_ = false;
>
> Using non-interleaved data looked strange, but I thought that you
> probably know what you are doing. Then I accidentally noticed that
> patch 19 is a fixup for the interleaved setting. Why is patch 19 not
> squashed into this initial patch? Are there other similar fixups? Could
> you resend with fixup patches squashed into the patches that introduce
> the fixed bugs?
The problem is that as the changes came later, squashing became
progressively harder. I've squashed a few of these. The ones that
remain are related to some blocksize calculations when channel counts
for in/out/playback are not the same. Resending that now.
-- Arun
More information about the pulseaudio-discuss
mailing list