diff --git a/test/sbc/data/testfile.msbc b/test/sbc/data/testfile.msbc new file mode 100644 index 000000000..a41340b85 Binary files /dev/null and b/test/sbc/data/testfile.msbc differ diff --git a/test/sbc/sbc_decoder.py b/test/sbc/sbc_decoder.py index 8e5938ce0..e9b55b404 100755 --- a/test/sbc/sbc_decoder.py +++ b/test/sbc/sbc_decoder.py @@ -9,6 +9,7 @@ from sbc_synthesis_v1 import * V = np.zeros(shape = (2, 10*2*8)) N = np.zeros(shape = (16,8)) total_time_ms = 0 +mSBC_enabled = 1 def sbc_unpack_frame(fin, available_bytes, frame): if available_bytes == 0: @@ -16,12 +17,17 @@ def sbc_unpack_frame(fin, available_bytes, frame): raise TypeError frame.syncword = get_bits(fin,8) - if frame.syncword != 156: - print ("out of sync %02x" % frame.syncword) - return -1 + if mSBC_enabled: + if frame.syncword != 173: + print ("out of sync %02x" % frame.syncword) + return -1 + else: + if frame.syncword != 156: + print ("out of sync %02x" % frame.syncword) + return -1 + frame.sampling_frequency = get_bits(fin,2) frame.nr_blocks = nr_blocks[get_bits(fin,2)] - frame.channel_mode = get_bits(fin,2) if frame.channel_mode == MONO: @@ -31,12 +37,10 @@ def sbc_unpack_frame(fin, available_bytes, frame): frame.allocation_method = get_bits(fin,1) frame.nr_subbands = nr_subbands[get_bits(fin,1)] - frame.init(frame.nr_blocks, frame.nr_subbands, frame.nr_channels) - frame.bitpool = get_bits(fin,8) frame.crc_check = get_bits(fin,8) - # frame.join = np.zeros(frame.nr_subbands, dtype = np.uint8) + frame.init(frame.nr_blocks, frame.nr_subbands, frame.nr_channels) if frame.channel_mode == JOINT_STEREO: for sb in range(frame.nr_subbands-1): @@ -49,12 +53,40 @@ def sbc_unpack_frame(fin, available_bytes, frame): for ch in range(frame.nr_channels): for sb in range(frame.nr_subbands): frame.scale_factor[ch][sb] = get_bits(fin, 4) - + if mSBC_enabled: + #frame.nr_blocks = 16 + #frame.bitpool = 26 + #frame.nr_subbands = 1 + print "frequency: ", frame.sampling_frequency + print "subbands: ", frame.nr_blocks/4-1 + print "bitpool: ", frame.bitpool + print "blocks : ", frame.nr_blocks/4-1 + print "alloc : ", frame.allocation_method + print "mode : ", frame.channel_mode + print "scale factor: ", frame.scale_factor + crc = calculate_crc(frame) if crc != frame.crc_check: - print frame - print "error, crc not equal: ", crc, frame.crc_check - exit(1) + print "CRC mismatch: calculated %d, expected %d" % (crc, frame.crc_check) + exit(10) + + if mSBC_enabled: + frame.nr_subbands = 8 + frame.bitpool = 26 + frame.nr_blocks = 15 + #frame.sampling_frequency = 0 + + frame.init(frame.nr_blocks, frame.nr_subbands, frame.nr_channels) + + if frame.channel_mode == JOINT_STEREO: + for sb in range(frame.nr_subbands-1): + frame.join[sb] = get_bits(fin,1) + get_bits(fin,1) # RFA + + for ch in range(frame.nr_channels): + for sb in range(frame.nr_subbands): + frame.scale_factor[ch][sb] = get_bits(fin, 4) + frame.scalefactor = np.zeros(shape=(frame.nr_channels, frame.nr_subbands), dtype = np.int32) for ch in range(frame.nr_channels): @@ -266,10 +298,14 @@ if __name__ == "__main__": print(usage) sys.exit(1) try: + mSBC_enabled = 0 infile = sys.argv[1] if not infile.endswith('.sbc'): - print(usage) - sys.exit(1) + if infile.endswith('.msbc'): + mSBC_enabled = 1 + else: + print(usage) + sys.exit(1) wavfile = infile.replace('.sbc', '-decoded.wav') fout = False @@ -296,15 +332,13 @@ if __name__ == "__main__": print "== Frame %d == %d" % (frame_count, fin.tell()) err = sbc_unpack_frame(fin, file_size - fin.tell(), frame) - if frame_count == 0: - sbc_init_sythesis(frame.nr_subbands, implementation) - print frame - - if err: print "error, frame_count: ", frame_count - break - + continue + + if frame_count == 0: + sbc_init_sythesis(frame.nr_subbands, implementation) + print frame sbc_decode(frame, implementation)