Hi Fred, > sbc/sbc.c | 16 ++++++++++++++++ > sbc/sbc.h | 3 +++ > 2 files changed, 19 insertions(+) > > diff --git a/sbc/sbc.c b/sbc/sbc.c > index 6fff132..c40aa15 100644 > --- a/sbc/sbc.c > +++ b/sbc/sbc.c > @@ -52,6 +52,9 @@ > > #define SBC_SYNCWORD 0x9C > > +#define MSBC_SYNCWORD 0xAD > +#define MSBC_BLOCKS 15 > + > /* This structure contains an unpacked SBC frame. > Yes, there is probably quite some unused space herein */ > struct sbc_frame { > @@ -920,6 +923,7 @@ struct sbc_priv { > > static void sbc_set_defaults(sbc_t *sbc, unsigned long flags) > { > + sbc->flags = flags; > sbc->frequency = SBC_FREQ_44100; > sbc->mode = SBC_MODE_STEREO; > sbc->subbands = SBC_SB_8; > @@ -982,6 +986,8 @@ SBC_EXPORT ssize_t sbc_decode(sbc_t *sbc, const void *input, size_t input_len, > sbc->mode = priv->frame.mode; > sbc->subbands = priv->frame.subband_mode; > sbc->blocks = priv->frame.block_mode; > + if (sbc->flags & SBC_MSBC) > + sbc->blocks = MSBC_BLOCKS; Why are we doing this for every single call of sbc_decode. And even we wanted to do that, why do we first assign it to priv->frame.block_mode so we overwrite it one line later. > sbc->allocation = priv->frame.allocation; > sbc->bitpool = priv->frame.bitpool; > > @@ -1056,6 +1062,8 @@ SBC_EXPORT ssize_t sbc_encode(sbc_t *sbc, const void *input, size_t input_len, > priv->frame.subbands = sbc->subbands ? 8 : 4; > priv->frame.block_mode = sbc->blocks; > priv->frame.blocks = 4 + (sbc->blocks * 4); > + if (sbc->flags & SBC_MSBC) > + priv->frame.blocks = MSBC_BLOCKS; Same here. > priv->frame.bitpool = sbc->bitpool; > priv->frame.codesize = sbc_get_codesize(sbc); > priv->frame.length = sbc_get_frame_length(sbc); > @@ -1140,6 +1148,8 @@ SBC_EXPORT size_t sbc_get_frame_length(sbc_t *sbc) > > subbands = sbc->subbands ? 8 : 4; > blocks = 4 + (sbc->blocks * 4); > + if (sbc->flags & SBC_MSBC) > + blocks = MSBC_BLOCKS; And here again. > channels = sbc->mode == SBC_MODE_MONO ? 1 : 2; > joint = sbc->mode == SBC_MODE_JOINT_STEREO ? 1 : 0; > bitpool = sbc->bitpool; > @@ -1169,6 +1179,9 @@ SBC_EXPORT unsigned sbc_get_frame_duration(sbc_t *sbc) > blocks = priv->frame.blocks; > } > > + if (sbc->flags & SBC_MSBC) > + blocks = MSBC_BLOCKS; > + > switch (sbc->frequency) { > case SBC_FREQ_16000: > frequency = 16000; > @@ -1208,6 +1221,9 @@ SBC_EXPORT size_t sbc_get_codesize(sbc_t *sbc) > channels = priv->frame.channels; > } > > + if (sbc->flags & SBC_MSBC) > + blocks = MSBC_BLOCKS; > + > return subbands * blocks * channels * 2; > } > > diff --git a/sbc/sbc.h b/sbc/sbc.h > index bbd45da..3511119 100644 > --- a/sbc/sbc.h > +++ b/sbc/sbc.h > @@ -64,6 +64,9 @@ extern "C" { > #define SBC_LE 0x00 > #define SBC_BE 0x01 > > +/* Additional features */ > +#define SBC_MSBC 0x01 > + > struct sbc_struct { > unsigned long flags; > I think you get the idea. Just corrected an already assigned value in case of mSBC is a bad idea. It is either an if clause or we assign the proper value once in the private structure. Regards Marcel -- To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html