On Mon, 2016-01-18 at 13:06 +0530, a...@accosted.net wrote:
> From: Arun Raghavan <g...@arunraghavan.net>
> 
> Needed for upcoming beamforming code.
> ---
>  src/modules/echo-cancel/echo-cancel.h |  2 +-
>  src/modules/echo-cancel/webrtc.cc     | 14 ++++++++------
>  2 files changed, 9 insertions(+), 7 deletions(-)
> 
> diff --git a/src/modules/echo-cancel/echo-cancel.h 
> b/src/modules/echo-cancel/echo-cancel.h
> index 4693516..613f7e3 100644
> --- a/src/modules/echo-cancel/echo-cancel.h
> +++ b/src/modules/echo-cancel/echo-cancel.h
> @@ -65,7 +65,7 @@ struct pa_echo_canceller_params {
>               * to C++ linkage. apm is a pointer to an AudioProcessing object 
> */
>              void *apm;
>              int32_t blocksize; /* in frames */
> -            pa_sample_spec rec_ss, play_ss;
> +            pa_sample_spec rec_ss, play_ss, out_ss;
>              bool agc;
>              bool trace;
>              bool first;
> diff --git a/src/modules/echo-cancel/webrtc.cc 
> b/src/modules/echo-cancel/webrtc.cc
> index 5741f45..5f00286 100644
> --- a/src/modules/echo-cancel/webrtc.cc
> +++ b/src/modules/echo-cancel/webrtc.cc
> @@ -333,6 +333,7 @@ bool pa_webrtc_ec_init(pa_core *c, pa_echo_canceller *ec,
>      ec->params.webrtc.apm = apm;
>      ec->params.webrtc.rec_ss = *rec_ss;
>      ec->params.webrtc.play_ss = *play_ss;
> +    ec->params.webrtc.out_ss = *out_ss;
>      ec->params.webrtc.blocksize =
>          (uint64_t) (pa_bytes_per_second(out_ss) / pa_frame_size(out_ss)) * 
> BLOCK_SIZE_US / PA_USEC_PER_SEC;
>      *nframes = ec->params.webrtc.blocksize;
> @@ -372,17 +373,18 @@ void pa_webrtc_ec_play(pa_echo_canceller *ec, const 
> uint8_t *play) {
>  void pa_webrtc_ec_record(pa_echo_canceller *ec, const uint8_t *rec, uint8_t 
> *out) {
>      webrtc::AudioProcessing *apm = 
> (webrtc::AudioProcessing*)ec->params.webrtc.apm;
>      webrtc::AudioFrame out_frame;
> -    const pa_sample_spec *ss = &ec->params.webrtc.rec_ss;
> +    const pa_sample_spec *rec_ss = &ec->params.webrtc.rec_ss;
> +    const pa_sample_spec *out_ss = &ec->params.webrtc.out_ss;
>      pa_cvolume v;
>      int old_volume, new_volume;
>  
> -    out_frame.num_channels_ = ss->channels;
> -    out_frame.sample_rate_hz_ = ss->rate;
> +    out_frame.num_channels_ = rec_ss->channels;
> +    out_frame.sample_rate_hz_ = rec_ss->rate;
>      out_frame.interleaved_ = true;
>      out_frame.samples_per_channel_ = ec->params.webrtc.blocksize;
>  
>      pa_assert(out_frame.samples_per_channel_ <= 
> webrtc::AudioFrame::kMaxDataSizeSamples);

Not directly related to this patch, but this assertion seems wrong. We
compare kMaxDataSizeSamples to the number of frames, but
kMaxDataSizeSamples is calculated as frames * channels.

Also, kMaxDataSizeSamples assumes that the maximum sample spec is 16-
bit, stereo, 32 kHz, and that the maximum buffer size is 60 ms.
However, we seem to allow using 48 kHz, and I didn't find any
limitations for the channel count. We seem to use 10 ms buffers, so
that gives some headroom. webrtc_ec_fixate_spec() should check all
this, and make sure that our parameters don't exceed
kMaxDataSizeSamples.

The changes in this patch all look good.

-- 
Tanu
_______________________________________________
pulseaudio-discuss mailing list
pulseaudio-discuss@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss

Reply via email to