diff --git a/test/sbc/sbc.py b/test/sbc/sbc.py index a2785537d..241e1213a 100644 --- a/test/sbc/sbc.py +++ b/test/sbc/sbc.py @@ -4,7 +4,6 @@ import wave import struct import sys - # channel mode MONO = 0 DUAL_CHANNEL = 1 @@ -172,7 +171,6 @@ class SBCFrame: return res - def sbc_bit_allocation_stereo_joint(frame, ch): bitneed = np.zeros(shape=(frame.nr_channels, frame.nr_subbands)) bits = np.zeros(shape=(frame.nr_channels, frame.nr_subbands)) @@ -206,8 +204,6 @@ def sbc_bit_allocation_stereo_joint(frame, ch): for sb in range(frame.nr_subbands): if bitneed[ch][sb] > max_bitneed: max_bitneed = bitneed[ch][sb] - - # # print "max_bitneed: ", max_bitneed # calculate how many bitslices fit into the bitpool bitcount = 0 @@ -227,8 +223,6 @@ def sbc_bit_allocation_stereo_joint(frame, ch): if bitcount + slicecount >= frame.bitpool: break - # print "bitcount %d, slicecount %d" % (bitcount, slicecount) - if bitcount + slicecount == frame.bitpool: bitcount = bitcount + slicecount bitslice = bitslice - 1 @@ -241,7 +235,6 @@ def sbc_bit_allocation_stereo_joint(frame, ch): else: bits[ch][sb] = min(bitneed[ch][sb]-bitslice,16) - ch = 0 sb = 0 while bitcount < frame.bitpool and sb < frame.nr_subbands: @@ -304,13 +297,11 @@ def sbc_bit_allocation_mono_dual(frame): for sb in range(frame.nr_subbands): if bitneed[ch][sb] > max_bitneed: max_bitneed = bitneed[ch][sb] - - #print "max_bitneed: ", max_bitneed - + # calculate how many bitslices fit into the bitpool bitcount = 0 slicecount = 0 - bitslice = max_bitneed + 1 #/* init just above the largest sf */ + bitslice = max_bitneed + 1 while True: bitslice = bitslice - 1 @@ -324,20 +315,16 @@ def sbc_bit_allocation_mono_dual(frame): if bitcount + slicecount >= frame.bitpool: break - #print "bitcount %d, slicecount %d" % (bitcount, slicecount) - if bitcount + slicecount == frame.bitpool: bitcount = bitcount + slicecount bitslice = bitslice - 1 - # bits are distributed until the last bitslice is reached for sb in range(frame.nr_subbands): if bitneed[ch][sb] < bitslice+2 : bits[ch][sb]=0; else: bits[ch][sb] = min(bitneed[ch][sb]-bitslice,16) - # The remaining bits are allocated starting at subband 0. sb = 0 while bitcount < frame.bitpool and sb < frame.nr_subbands: if bits[ch][sb] >= 2 and bits[ch][sb] < 16: @@ -377,30 +364,9 @@ def sbc_sampling_frequency_index(sample_rate): break return sbc_sampling_frequency_index -# static uint8_t sbc_crc8(const uint8_t * data, size_t len) -# 158 { -# 159 uint8_t crc = 0x0f; -# 160 size_t i; -# 161 uint8_t octet; -# 162 -# 163 for (i = 0; i < len / 8; i++) -# 164 crc = crc_table[crc ^ data[i]]; -# 165 -# 166 octet = data[i]; -# 167 for (i = 0; i < len % 8; i++) { -# 168 char bit = ((octet ^ crc) & 0x80) >> 7; -# 169 -# 170 crc = ((crc & 0x7f) << 1) ^ (bit ? 0x1d : 0); -# 171 -# 172 octet = octet << 1; -# 173 } -# 174 -# 175 return crc; -# 176 } def sbc_crc8(data, data_len): crc = 0x0f - j = 0 for i in range(data_len / 8): crc = crc_table[crc ^ data[i]] @@ -463,7 +429,7 @@ def calculate_crc(frame): for ch in range(frame.nr_channels): for sb in range(frame.nr_subbands): add_bits(frame.scale_factor[ch][sb], 4) - # bitstream_len = 16 + frame.nr_subbands + frame.nr_channels * frame.nr_subbands * 4 + bitstream_len = (bitstream_index + 1) * 8 if bitstream_bits_available: bitstream_len += (8-bitstream_bits_available) diff --git a/test/sbc/sbc_decoder.py b/test/sbc/sbc_decoder.py index 65a0f51fc..2c44e0db5 100755 --- a/test/sbc/sbc_decoder.py +++ b/test/sbc/sbc_decoder.py @@ -116,15 +116,8 @@ def sbc_unpack_frame(fin, frame): AS = frame.audio_sample[blk][ch][sb] SF = frame.scalefactor[ch][sb] L = frame.levels[ch][sb] - - SB = SF * ((AS*2.0+1.0) / L -1.0 ) - # if sb == 3: - # print "decoder SF, L, AS ", SF, L, AS - frame.sb_sample[blk][ch][sb] = SB - # tmpa = (((frame.audio_sample[blk][ch][sb] << 16) | 0x8000) / levels[ch][sb] ) - 0x8000 - # tmpb = tmpa >> 3 - # frame.sb_sample[blk][ch][sb] = tmpb * frame.scalefactor[ch][sb] - + + frame.sb_sample[blk][ch][sb] = SF * ((AS*2.0+1.0) / L -1.0 ) else: frame.sb_sample[blk][ch][sb] = 0 @@ -137,14 +130,7 @@ def sbc_unpack_frame(fin, frame): ch_b = frame.sb_sample[blk][0][sb] - frame.sb_sample[blk][1][sb] frame.sb_sample[blk][0][sb] = ch_a frame.sb_sample[blk][1][sb] = ch_b - - - # print "Scale factors ", frame.scale_factor[0] - # print "\nReconstructed subband samples: " - # for blk in range(frame.nr_blocks): - # print "block %2d - recon. sample: %s" % (blk, frame.sb_sample[blk][0]) - # print return 0 diff --git a/test/sbc/sbc_encoder.py b/test/sbc/sbc_encoder.py index a1bed60f6..988738cc8 100755 --- a/test/sbc/sbc_encoder.py +++ b/test/sbc/sbc_encoder.py @@ -5,7 +5,7 @@ import struct import sys from sbc import * -X = np.zeros(40) +X = np.zeros(80) def fetch_samples_for_next_sbc_frame(fin, nr_audio_frames, frame): raw_data = fin.readframes(nr_audio_frames) # Returns byte data @@ -16,11 +16,6 @@ def fetch_samples_for_next_sbc_frame(fin, nr_audio_frames, frame): frame.pcm = np.array(struct.unpack(fmt, raw_data)) del raw_data - # channels = [ [] for ch in range(frame.nr_channels) ] - # for index, value in enumerate(integer_data): - # bucket = index % nr_channels - # channels[bucket].append(value) - def sbc_analyse(frame, ch, blk, C, debug): global X @@ -72,25 +67,18 @@ def sbc_encode(frame,debug): return -1 frame.sb_sample = np.ndarray(shape=(frame.nr_blocks, frame.nr_channels, frame.nr_subbands)) - - # channels = [ [] for ch in range(frame.nr_channels) ] - # for index, value in enumerate(frame.pcm): - # bucket = index % frame.nr_channels - # channels[bucket].append(value) - - # print "encoder pcm ", frame.pcm - index = 0 for ch in range(frame.nr_channels): for blk in range(frame.nr_blocks): for sb in range(frame.nr_subbands): - frame.EX[sb] = frame.pcm[index] #channels[ch][blk * frame.nr_subbands + sb] + frame.EX[sb] = frame.pcm[index] index+=1 sbc_analyse(frame, ch, blk, proto_table,debug) sbc_quantization(frame) def should_use_joint_coding(frame): + # TODO: implement this return False def calculate_scalefactor(max_subbandsample): @@ -128,11 +116,9 @@ def frame_to_bitstream(frame): for sb in range(frame.nr_subbands): add_bits(frame.audio_sample[blk][ch][sb], frame.bits[ch][sb]) - # bitstream_len = 16 + frame.nr_subbands + frame.nr_channels * frame.nr_subbands * 4 return bitstream def sbc_quantization(frame): - frame.join = np.zeros(frame.nr_subbands, dtype = np.uint8) if should_use_joint_coding(frame): return @@ -169,8 +155,8 @@ def sbc_quantization(frame): SB = frame.sb_sample[blk][ch][sb] SF = frame.scalefactor[ch][sb] L = frame.levels[ch][sb] - AS = np.uint16(((SB * L / SF + L) - 1.0)/2.0) - frame.audio_sample[blk][ch][sb] = AS + + frame.audio_sample[blk][ch][sb] = np.uint16(((SB * L / SF + L) - 1.0)/2.0) else: frame.audio_sample[blk][ch][sb] = 0 diff --git a/test/sbc/sbc_test.py b/test/sbc/sbc_test.py index 855e200e0..94a6abb89 100755 --- a/test/sbc/sbc_test.py +++ b/test/sbc/sbc_test.py @@ -151,7 +151,7 @@ try: sbc_decoder_frame.bitpool) sbc_encoder_frame.pcm = np.array(sbc_decoder_frame.pcm) - # TODO: joi field + # TODO: join field # TODO: clear memory # sbc_encoder_frame.sb_sample = np.array(sbc_decoder_frame.sb_sample)