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