[pulseaudio-discuss] [PATCH] bluetooth: Fix rendering a2dp data

Colin Guthrie gmane at colin.guthr.ie
Sun Dec 12 12:37:32 PST 2010


Hi Maarten,

This one is a bit more in-depth, so would like to get the opinions from
some of the Bluetooth guru on these changes before pushing.

I've CC'ed some likely candidates for further comment.

Cheers

Col

'Twas brillig, and Maarten Lankhorst at 10/12/10 23:05 did gyre and gimble:
> makes my android phone slightly happier
> ---
>  src/modules/bluetooth/module-bluetooth-device.c |   11 ++++++++---
>  1 files changed, 8 insertions(+), 3 deletions(-)
> 
> diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c
> index 6d31c1e..8664001 100644
> --- a/src/modules/bluetooth/module-bluetooth-device.c
> +++ b/src/modules/bluetooth/module-bluetooth-device.c
> @@ -1387,7 +1387,7 @@ static int a2dp_process_push(struct userdata *u) {
>      pa_assert(u->source);
>      pa_assert(u->read_smoother);
>  
> -    memchunk.memblock = pa_memblock_new(u->core->mempool, u->block_size);
> +    memchunk.memblock = pa_memblock_new(u->core->mempool, u->block_size * 2);
>      memchunk.index = memchunk.length = 0;
>  
>      for (;;) {
> @@ -1442,7 +1442,8 @@ static int a2dp_process_push(struct userdata *u) {
>          to_decode = l - sizeof(*header) - sizeof(*payload);
>  
>          d = pa_memblock_acquire(memchunk.memblock);
> -        to_write = memchunk.length = pa_memblock_get_length(memchunk.memblock);
> +        to_write = pa_memblock_get_length(memchunk.memblock);
> +        memchunk.length = 0;
>  
>          while (PA_LIKELY(to_decode > 0 && to_write > 0)) {
>              size_t written;
> @@ -1464,7 +1465,7 @@ static int a2dp_process_push(struct userdata *u) {
>  /*             pa_log_debug("SBC: frame_length: %lu; codesize: %lu", (unsigned long) a2dp->frame_length, (unsigned long) a2dp->codesize); */
>  
>              pa_assert_fp((size_t) decoded <= to_decode);
> -            pa_assert_fp((size_t) decoded == a2dp->frame_length);
> +            pa_assert_fp((size_t) decoded <= a2dp->frame_length);
>  
>              pa_assert_fp((size_t) written <= to_write);
>              pa_assert_fp((size_t) written == a2dp->codesize);
> @@ -1474,10 +1475,14 @@ static int a2dp_process_push(struct userdata *u) {
>  
>              d = (uint8_t*) d + written;
>              to_write -= written;
> +            memchunk.length += written;
>  
>              frame_count++;
>          }
>  
> +        if (to_decode)
> +            pa_log_error("SBC: %lu bytes not decoded\n", to_decode);
> +
>          pa_memblock_release(memchunk.memblock);
>  
>          pa_source_post(u->source, &memchunk);


-- 

Colin Guthrie
gmane(at)colin.guthr.ie
http://colin.guthr.ie/

Day Job:
  Tribalogic Limited [http://www.tribalogic.net/]
Open Source:
  Mageia Contributor [http://www.mageia.org/]
  PulseAudio Hacker [http://www.pulseaudio.org/]
  Trac Hacker [http://trac.edgewall.org/]



More information about the pulseaudio-discuss mailing list