[RFC PATCH] bluetooth: Fix assertion failure (decoded == a2dp->frame_length)

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

 



On Sun, 2012-10-14 at 21:03 +0300, Tanu Kaskinen wrote:
[...]
> > diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c
> > index e3ec6ae..06c783d 100644
> > --- a/src/modules/bluetooth/module-bluetooth-device.c
> > +++ b/src/modules/bluetooth/module-bluetooth-device.c
> > @@ -999,9 +999,9 @@ static int a2dp_process_push(struct userdata *u) {
> >              a2dp->frame_length = sbc_get_frame_length(&a2dp->sbc);
> >  
> >              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 == a2dp->codesize);
> > +            pa_assert_fp((size_t) written <= a2dp->codesize);
> >  
> >              p = (const uint8_t*) p + decoded;
> >              to_decode -= decoded;
> 
> I'm no SBC expert either, but I had a look at sbc_decode()
> implementation, and to me it looks like at least "decoded ==
> a2dp->frame_length" should hold. Extrapolating from that, "written ==
> a2dp->codesize" probably should hold too. And it makes sense:
> sbc_decode() is supposed to decode one frame, and I think one frame will
> always have encoded size of a2dp->frame_length and decoded size of
> a2dp->codesize.

Same caveat about not being an expert, but my understanding of the SBC
codec is that the original assertion is correct. If this problem is
consistently reproducible, I think it's worth taking up with the BlueZ
folks.

-- Arun




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

  Powered by Linux