[PATCH] bluetooth: Fix rendering a2dp data

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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/]



[Index of Archives]     [Linux Audio Users]     [AMD Graphics]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux