rendered paste bodyIndex: sbc.c
===================================================================
RCS file: /cvsroot/bluez/utils/sbc/sbc.c,v
retrieving revision 1.25
diff -u -3 -p -u -r1.25 sbc.c
--- sbc.c 23 Nov 2007 14:24:23 -0000 1.25
+++ sbc.c 26 Nov 2007 21:28:07 -0000
@@ -980,9 +980,6 @@ static int sbc_pack_frame(uint8_t *data,
u_int32_t scalefactor[2][8]; /* derived from frame->scale_factor */
- if (len < 4)
- return -1;
-
/* Clear first 4 bytes of data (that's the constant length part of the
* SBC header) */
memset(data, 0, 4);
@@ -1041,11 +1038,11 @@ static int sbc_pack_frame(uint8_t *data,
data[2] = frame->bitpool;
if ((frame->channel_mode == MONO || frame->channel_mode == DUAL_CHANNEL) &&
- frame->bitpool > 16 * frame->subbands)
+ frame->bitpool > frame->subbands << 4)
return -5;
if ((frame->channel_mode == STEREO || frame->channel_mode == JOINT_STEREO) &&
- frame->bitpool > 32 * frame->subbands)
+ frame->bitpool > frame->subbands << 5)
return -5;
/* Can't fill in crc yet */
@@ -1121,31 +1118,25 @@ static int sbc_pack_frame(uint8_t *data,
}
}
- if (len * 8 < produced + frame->subbands)
- return -1;
-
data[4] = 0;
for (sb = 0; sb < frame->subbands - 1; sb++)
data[4] |= ((frame->join >> sb) & 0x01) << (7 - sb);
if (frame->subbands == 4)
- crc_header[crc_pos / 8] = data[4] & 0xf0;
+ crc_header[crc_pos >> 3] = data[4] & 0xf0;
else
- crc_header[crc_pos / 8] = data[4];
+ crc_header[crc_pos >> 3] = data[4];
produced += frame->subbands;
crc_pos += frame->subbands;
}
- if (len * 8 < produced + (4 * frame->subbands * frame->channels))
- return -1;
-
for (ch = 0; ch < frame->channels; ch++) {
for (sb = 0; sb < frame->subbands; sb++) {
if (produced % 8 == 0)
data[produced / 8] = 0;
- data[produced / 8] |= ((frame->scale_factor[ch][sb] & 0x0F) << (4 - (produced % 8)));
- crc_header[crc_pos / 8] |= ((frame->scale_factor[ch][sb] & 0x0F) << (4 - (crc_pos % 8)));
+ data[produced >> 3] |= ((frame->scale_factor[ch][sb] & 0x0F) << (4 - (produced % 8)));
+ crc_header[crc_pos >> 3] |= ((frame->scale_factor[ch][sb] & 0x0F) << (4 - (crc_pos % 8)));
produced += 4;
crc_pos += 4;
@@ -1171,23 +1162,15 @@ static int sbc_pack_frame(uint8_t *data,
levels[ch][sb]) >> 1);
else
frame->audio_sample[blk][ch][sb] = 0;
- }
- }
- }
- for (blk = 0; blk < frame->blocks; blk++) {
- for (ch = 0; ch < frame->channels; ch++) {
- for (sb = 0; sb < frame->subbands; sb++) {
if (bits[ch][sb] != 0) {
for (bit = 0; bit < bits[ch][sb]; bit++) {
int b; /* A bit */
- if (produced > len * 8)
- return -1;
if (produced % 8 == 0)
- data[produced / 8] = 0;
+ data[produced >> 3] = 0;
b = ((frame->audio_sample[blk][ch][sb]) >>
(bits[ch][sb] - bit - 1)) & 0x01;
- data[produced / 8] |= b << (7 - (produced % 8));
+ data[produced >> 3] |= b << (7 - (produced % 8));
produced++;
}
}
@@ -1198,7 +1181,7 @@ static int sbc_pack_frame(uint8_t *data,
if (produced % 8 != 0)
produced += 8 - (produced % 8);
- return produced / 8;
+ return produced >> 3;
}
struct sbc_priv {