[pulseaudio-discuss] [PATCH 3/4] echo-cancel: Enable different blocksizes for sink and source

Tanu Kaskinen tanuk at iki.fi
Sat Dec 15 00:49:53 PST 2012


On Tue, 2012-12-04 at 14:55 +0100, Peter Meerwald wrote:
> --- a/src/modules/echo-cancel/module-echo-cancel.c
> +++ b/src/modules/echo-cancel/module-echo-cancel.c
> @@ -936,9 +940,9 @@ static void source_output_push_cb(pa_source_output *o, const pa_memchunk *chunk)
>              u->source_skip -= to_skip;
>          }
>  
> -        if (rlen && u->source_skip % u->blocksize) {
> -            u->sink_skip += u->blocksize - (u->source_skip % u->blocksize);
> -            u->source_skip -= (u->source_skip % u->blocksize);
> +        if (rlen && u->source_skip % u->source_blocksize) {
> +            u->sink_skip += u->source_blocksize - (u->source_skip % u->source_blocksize);

Should this be

    u->sink_skip += u->sink_blocksize - frames_to_sink_bytes(source_bytes_to_frames(u->source_skip % u->source_blocksize));

?

> @@ -2131,20 +2139,20 @@ int main(int argc, char* argv[]) {
>          }
>      }
>  
> -    rdata = pa_xmalloc(u.blocksize);
> -    pdata = pa_xmalloc(u.blocksize);
> -    cdata = pa_xmalloc(u.blocksize);
> +    rdata = pa_xmalloc(u->source_blocksize);
> +    pdata = pa_xmalloc(u->sink_blocksize);
> +    cdata = pa_xmalloc(u->source_blocksize);

u is not a pointer, this code will not compile. Same goes for the rest
of the changes in this file.

>  
>      if (!u.ec->params.drift_compensation) {
> -        while (fread(rdata, u.blocksize, 1, u.captured_file) > 0) {
> -            if (fread(pdata, u.blocksize, 1, u.played_file) == 0) {
> +        while (fread(rdata, u->source_blocksize, 1, u.captured_file) > 0) {
> +            if (fread(pdata, u->sink_blocksize, 1, u.played_file) == 0) {
>                  perror("Played file ended before captured file");
>                  goto fail;
>              }
>  
>              u.ec->run(u.ec, rdata, pdata, cdata);
>  
> -            unused = fwrite(cdata, u.blocksize, 1, u.canceled_file);
> +            unused = fwrite(cdata, u->source_blocksize, 1, u.canceled_file);
>          }
>      } else {
>          while (fscanf(u.drift_file, "%c", &c) > 0) {
> diff --git a/src/modules/echo-cancel/null.c b/src/modules/echo-cancel/null.c
> index bcdd3a6..5f8ced2 100644
> --- a/src/modules/echo-cancel/null.c
> +++ b/src/modules/echo-cancel/null.c
> @@ -28,22 +28,21 @@ PA_C_DECL_END
>  pa_bool_t pa_null_ec_init(pa_core *c, pa_echo_canceller *ec,
>                             pa_sample_spec *source_ss, pa_channel_map *source_map,
>                             pa_sample_spec *sink_ss, pa_channel_map *sink_map,
> -                           uint32_t *blocksize, const char *args) {
> -    unsigned framelen = 256;
> +                           uint32_t *nframes, const char *args) {
> +    *nframes = 256;
>  
>      source_ss->format = PA_SAMPLE_S16NE;
>      *sink_ss = *source_ss;
>      *sink_map = *source_map;
>  
> -    *blocksize = framelen * pa_frame_size(source_ss);
> -
> -    pa_log_debug("null AEC: framelen %u, blocksize %u, channels %d, rate %d", framelen, *blocksize, source_ss->channels, source_ss->rate);
> +    pa_log_debug("null AEC: nframes %u, channels %d, rate %d", *nframes, source_ss->channels, source_ss->rate);
>  
>      return TRUE;
>  }
>  
>  void pa_null_ec_run(pa_echo_canceller *ec, const uint8_t *rec, const uint8_t *play, uint8_t *out) {
> -    memcpy(out, rec, 256 * 2);
> +    // blocksize is nframes * frame-size
> +    memcpy(out, rec, 256 * 2 );

Extra space added after "256 * 2".

-- 
Tanu



More information about the pulseaudio-discuss mailing list