[pulseaudio-discuss] [RFC PATCH] bluetooth: Fix assertion failure (decoded == a2dp->frame_length)
Arun Raghavan
arun.raghavan at collabora.co.uk
Fri Oct 19 09:12:28 PDT 2012
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
More information about the pulseaudio-discuss
mailing list