[maemo-developers] DSP work updates (SBC & Tremor)
From: Simon Pickering S.G.Pickering at bath.ac.ukDate: Thu Jun 19 16:54:21 EEST 2008
- Previous message: Power management is going to drive me mad!
- Next message: DSP work updates (SBC & Tremor)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hello everyone, Just some updates. The SBC task appears to run correctly, it just runs too slow to be used for more than ~1s by Bluez. The next task is to speed it up. I will crack on with this, but if anyone fancies a look, then please feel free and send me advice/patches/abuse/etc. The output of gprof (run on X86) is shown below: % cumulative self self total time seconds seconds calls Ts/call Ts/call name 0.00 0.00 0.00 160672 0.00 0.00 _sbc_analyze_eight 0.00 0.00 0.00 160672 0.00 0.00 sbc_analyze_eight 0.00 0.00 0.00 5023 0.00 0.00 __read 0.00 0.00 0.00 5021 0.00 0.00 __write 0.00 0.00 0.00 5021 0.00 0.00 sbc_analyze_audio 0.00 0.00 0.00 5021 0.00 0.00 sbc_calculate_bits 0.00 0.00 0.00 5021 0.00 0.00 sbc_crc8 0.00 0.00 0.00 5021 0.00 0.00 sbc_encode 0.00 0.00 0.00 5021 0.00 0.00 sbc_pack_frame 0.00 0.00 0.00 1 0.00 0.00 encode 0.00 0.00 0.00 1 0.00 0.00 sbc_encoder_init 0.00 0.00 0.00 1 0.00 0.00 sbc_finish 0.00 0.00 0.00 1 0.00 0.00 sbc_get_codesize 0.00 0.00 0.00 1 0.00 0.00 sbc_get_frame_length 0.00 0.00 0.00 1 0.00 0.00 sbc_init 0.00 0.00 0.00 1 0.00 0.00 sbc_set_defaults So basically _sbc_analyze_eight() & sbc_analyze_eight() are the things to look at speeding up. To give people a head start, here is where you should be looking to work out how: A2DP specification which says how the SBC encoder is supposed to work: http://www.bluetooth.com/NR/rdonlyres/800D10CD-DE3D-4D51-ABC0-726C8DF26151/921/A2DPspecv10.pdf From here (Ti DSP docs): http://www.ti.com/sc/docs/psheets/man_dsp.htm SPRU281F.pdf - TMS320C55x Optimizing C/C++ Compiler User's Guide Ch3 - Optimizing Your Code SPRU376A.pdf - TMS320C55x DSP Programmer?s Guide Ch3 - Optimizing C Code SPRU422I.pdf - TMS320C55x DSP Library Programmer?s Reference On to Tremor. I've gone back to debugging why it doesn't recognise the Vorbis stream (while it's unpacking the code books) and it looks like some sort of buffer corruption. Here's the output from the DSP (the = A,B form is low,high 16bits): [276990.164062] vorbis_book_unpack: check alignment, byte 1 = 17218 [276990.164062] vorbis_book_unpack: check alignment, byte 2 = 86 [276990.164062] vorbis_book_unpack: Mapping Case 0 [276990.164062] vorbis_book_unpack: s->used_entries & 0xFFFF= 128 [276990.164062] vorbis_book_unpack: s->used_entries>>16 & 0xFFFF = 0 [276990.164062] vorbis_book_unpack: s->entries & 0xFFFF= 128 [276990.164062] vorbis_book_unpack: s->entries>>16 & 0xFFFF = 0 [276990.164062] vorbis_book_unpack: s->dec_nodeb=2 [276990.164062] vorbis_book_unpack: s->dec_leafw=1 [276990.164062] _make_words: Entered; n=128, 0; quantvals=0, 0 [276990.164062] _make_words: l[i]=5 [276990.164062] _make_words: entry=0,0 [276990.164062] _make_words: l[i]=5 [276990.164062] _make_words: entry=1,0 [276990.164062] _make_words: l[i]=5 [276990.164062] _make_words: entry=2,0 [276990.164062] _make_words: l[i]=5 [276990.164062] _make_words: entry=3,0 [276990.164062] _make_words: l[i]=6 [276990.164062] _make_words: entry=8,0 [276990.164062] _make_words: l[i]=5 [276990.164062] _make_words: entry=5,0 [276990.164062] _make_words: l[i]=6 [276990.164062] _make_words: entry=9,0 [276990.164062] _make_words: l[i]=5 [276990.164062] _make_words: entry=6,0 [276990.164062] _make_words: l[i]=6 [276990.164062] _make_words: entry=14,0 [276990.164062] _make_words: l[i]=5 [276990.164062] _make_words: entry=8,0 [276990.164062] _make_words: l[i]=6 [276990.164062] _make_words: entry=15,0 [276990.164062] _make_words: l[i]=5 [276990.164062] _make_words: entry=9,0 [276990.164062] _make_words: l[i]=6 [276990.171875] _make_words: entry=20,0 [276990.171875] _make_words: l[i]=5 [276990.171875] _make_words: entry=11,0 [276990.171875] _make_words: l[i]=2 [276990.171875] _make_words: entry=2,0 [276990.171875] _make_words: l[i]=26 [276990.171875] _make_words: entry=0,336 [276990.171875] _make_words: l[i]=5 [276990.171875] _make_words: entry=12,0 [276990.171875] _make_words: l[i]=31 [276990.171875] _make_words: entry=32,10752 [276990.171875] _make_words: l[i]=18 [276990.171875] _make_words: entry=20481,1 [276990.171875] _make_words: l[i]=30 [276990.171875] _make_words: entry=17,5376 [276990.171875] _make_words: l[i]=12 [276990.171875] _make_words: entry=1345,0 [276990.171875] _make_words: l[i]=3 [276990.171875] _make_words: entry=6,0 [276990.171875] _make_words: l[i]=1 [276990.171875] _make_words: entry=0,0 [276990.171875] _make_words: Overpopulated tree, return -1 [276990.171875] _make_decode_table: _make_words() 2 True [276990.171875] vorbis_book_unpack: Error in _make_decode_table(s,lengthlist,quantvals,opb,mapt [276990.171875] ype) [276990.171875] _vorbis_unpack_books: Error in vorbis_book_unpack(opb,ci->book_param+i) [276990.171875] _fetch_headers: ret=vorbis_dsp_headerin(vi,&op) is TRUE [276990.171875] _ov_open1: About to leave, ret=-133 [276990.171875] ov_open_callbacks: Entered [276990.171875] Input does not appear to be an Ogg bitstream. and here's the output from the "pretty much identical" test code running on X86: vorbis_book_unpack: check alignment, byte 1 = 17218 vorbis_book_unpack: check alignment, byte 2 = 86 vorbis_book_unpack: all entries used, no tagging vorbis_book_unpack: Mapping Case 0 vorbis_book_unpack: s->used_entries=128 vorbis_book_unpack: s->entries=128 vorbis_book_unpack: s->dec_nodeb=2 vorbis_book_unpack: s->dec_leafw=1 _make_words: Entered; n=128, 0; quantvals=0, 0 _make_words: (lower) l[i]=length=5 _make_words: entry=0,0 _make_words: (lower) l[i]=length=5 _make_words: entry=1,0 _make_words: (lower) l[i]=length=5 _make_words: entry=2,0 _make_words: (lower) l[i]=length=5 _make_words: entry=3,0 _make_words: (lower) l[i]=length=6 _make_words: entry=8,0 _make_words: (lower) l[i]=length=5 _make_words: entry=5,0 _make_words: (lower) l[i]=length=6 _make_words: entry=9,0 _make_words: (lower) l[i]=length=5 _make_words: entry=6,0 _make_words: (lower) l[i]=length=6 _make_words: entry=14,0 _make_words: (lower) l[i]=length=5 _make_words: entry=8,0 _make_words: (lower) l[i]=length=6 _make_words: entry=15,0 _make_words: (lower) l[i]=length=5 _make_words: entry=9,0 _make_words: (lower) l[i]=length=6 _make_words: entry=20,0 _make_words: (lower) l[i]=length=5 _make_words: entry=11,0 _make_words: (lower) l[i]=length=6 _make_words: entry=21,0 _make_words: (lower) l[i]=length=5 _make_words: entry=12,0 _make_words: (lower) l[i]=length=6 _make_words: entry=26,0 _make_words: (lower) l[i]=length=5 _make_words: entry=14,0 _make_words: (lower) l[i]=length=6 _make_words: entry=27,0 _make_words: (lower) l[i]=length=5 _make_words: entry=15,0 _make_words: (lower) l[i]=length=6 _make_words: entry=32,0 _make_words: (lower) l[i]=length=5 _make_words: entry=17,0 _make_words: (lower) l[i]=length=7 _make_words: entry=66,0 _make_words: (lower) l[i]=length=5 _make_words: entry=18,0 _make_words: (lower) l[i]=length=7 _make_words: entry=67,0 _make_words: (lower) l[i]=length=5 _make_words: entry=19,0 _make_words: (lower) l[i]=length=7 _make_words: entry=80,0 _make_words: (lower) l[i]=length=5 _make_words: entry=21,0 _make_words: (lower) l[i]=length=8 _make_words: entry=162,0 _make_words: (lower) l[i]=length=5 _make_words: entry=22,0 _make_words: (lower) l[i]=length=8 _make_words: entry=163,0 _make_words: (lower) l[i]=length=6 _make_words: entry=41,0 _make_words: (lower) l[i]=length=8 _make_words: entry=184,0 _make_words: (lower) l[i]=length=6 _make_words: entry=47,0 _make_words: (lower) l[i]=length=9 _make_words: entry=370,0 _make_words: (lower) l[i]=length=6 _make_words: entry=48,0 _make_words: (lower) l[i]=length=9 _make_words: entry=371,0 _make_words: (lower) l[i]=length=6 _make_words: entry=49,0 _make_words: (lower) l[i]=length=9 _make_words: entry=372,0 _make_words: (lower) l[i]=length=6 _make_words: entry=50,0 _make_words: (lower) l[i]=length=10 _make_words: entry=746,0 _make_words: (lower) l[i]=length=6 _make_words: entry=51,0 _make_words: (lower) l[i]=length=10 _make_words: entry=747,0 _make_words: (lower) l[i]=length=6 _make_words: entry=52,0 _make_words: (lower) l[i]=length=11 _make_words: entry=1496,0 _make_words: (lower) l[i]=length=6 _make_words: entry=53,0 _make_words: (lower) l[i]=length=11 _make_words: entry=1497,0 _make_words: (lower) l[i]=length=6 _make_words: entry=54,0 _make_words: (lower) l[i]=length=11 _make_words: entry=1498,0 _make_words: (lower) l[i]=length=6 _make_words: entry=55,0 _make_words: (lower) l[i]=length=12 _make_words: entry=2998,0 _make_words: (lower) l[i]=length=6 _make_words: entry=56,0 _make_words: (lower) l[i]=length=12 _make_words: entry=2999,0 _make_words: (lower) l[i]=length=7 _make_words: entry=114,0 _make_words: (lower) l[i]=length=12 _make_words: entry=3000,0 _make_words: (lower) l[i]=length=7 _make_words: entry=115,0 _make_words: (lower) l[i]=length=12 _make_words: entry=3001,0 _make_words: (lower) l[i]=length=7 _make_words: entry=116,0 _make_words: (lower) l[i]=length=12 _make_words: entry=3002,0 _make_words: (lower) l[i]=length=7 _make_words: entry=117,0 _make_words: (lower) l[i]=length=12 _make_words: entry=3003,0 _make_words: (lower) l[i]=length=7 _make_words: entry=118,0 _make_words: (lower) l[i]=length=12 _make_words: entry=3004,0 _make_words: (lower) l[i]=length=7 _make_words: entry=119,0 _make_words: (lower) l[i]=length=12 _make_words: entry=3005,0 _make_words: (lower) l[i]=length=7 _make_words: entry=120,0 _make_words: (lower) l[i]=length=12 _make_words: entry=3006,0 _make_words: (lower) l[i]=length=7 _make_words: entry=121,0 _make_words: (lower) l[i]=length=12 _make_words: entry=3007,0 _make_words: (lower) l[i]=length=7 _make_words: entry=122,0 _make_words: (lower) l[i]=length=12 _make_words: entry=3936,0 _make_words: (lower) l[i]=length=7 _make_words: entry=124,0 _make_words: (lower) l[i]=length=12 _make_words: entry=3937,0 _make_words: (lower) l[i]=length=8 _make_words: entry=247,0 _make_words: (lower) l[i]=length=12 _make_words: entry=3938,0 _make_words: (lower) l[i]=length=8 _make_words: entry=250,0 _make_words: (lower) l[i]=length=11 _make_words: entry=1970,0 _make_words: (lower) l[i]=length=8 _make_words: entry=251,0 _make_words: (lower) l[i]=length=11 _make_words: entry=1971,0 _make_words: (lower) l[i]=length=8 _make_words: entry=252,0 _make_words: (lower) l[i]=length=12 _make_words: entry=3939,0 _make_words: (lower) l[i]=length=9 _make_words: entry=493,0 _make_words: (lower) l[i]=length=11 _make_words: entry=2024,0 _make_words: (lower) l[i]=length=9 _make_words: entry=507,0 _make_words: (lower) l[i]=length=9 _make_words: entry=508,0 _make_words: (lower) l[i]=length=10 _make_words: entry=1013,0 _make_words: (lower) l[i]=length=11 _make_words: entry=2025,0 _make_words: (lower) l[i]=length=9 _make_words: entry=509,0 _make_words: (lower) l[i]=length=12 _make_words: entry=4080,0 _make_words: (lower) l[i]=length=9 _make_words: entry=511,0 _make_words: (lower) l[i]=length=12 _make_words: entry=4081,0 _make_words: (lower) l[i]=length=12 _make_words: entry=4082,0 _make_words: (lower) l[i]=length=14 _make_words: entry=16332,0 _make_words: (lower) l[i]=length=13 _make_words: entry=8167,0 _make_words: (lower) l[i]=length=13 _make_words: entry=8168,0 _make_words: (lower) l[i]=length=14 _make_words: entry=16333,0 _make_words: (lower) l[i]=length=13 _make_words: entry=8169,0 _make_words: (lower) l[i]=length=13 _make_words: entry=8170,0 _make_words: (lower) l[i]=length=13 _make_words: entry=8171,0 _make_words: (lower) l[i]=length=12 _make_words: entry=4086,0 _make_words: (lower) l[i]=length=14 _make_words: entry=16348,0 _make_words: (lower) l[i]=length=16 _make_words: entry=65396,0 _make_words: (lower) l[i]=length=20 _make_words: entry=63312,15 _make_words: (lower) l[i]=length=20 _make_words: entry=63313,15 _make_words: (lower) l[i]=length=21 _make_words: entry=61092,31 _make_words: (lower) l[i]=length=14 _make_words: entry=16350,0 _make_words: (lower) l[i]=length=14 _make_words: entry=16351,0 _make_words: (lower) l[i]=length=15 _make_words: entry=32699,0 _make_words: (lower) l[i]=length=21 _make_words: entry=61093,31 _make_words: (lower) l[i]=length=21 _make_words: entry=61094,31 _make_words: (lower) l[i]=length=21 _make_words: entry=61095,31 _make_words: (lower) l[i]=length=20 _make_words: entry=63316,15 _make_words: (lower) l[i]=length=21 _make_words: entry=61098,31 _make_words: (lower) l[i]=length=21 _make_words: entry=61099,31 _make_words: (lower) l[i]=length=21 _make_words: entry=61100,31 _make_words: (lower) l[i]=length=21 _make_words: entry=61101,31 _make_words: (lower) l[i]=length=21 _make_words: entry=61102,31 _make_words: (lower) l[i]=length=21 _make_words: entry=61103,31 _make_words: (lower) l[i]=length=21 _make_words: entry=61104,31 _make_words: (lower) l[i]=length=21 _make_words: entry=61105,31 _make_words: (lower) l[i]=length=21 _make_words: entry=61106,31 _make_words: (lower) l[i]=length=21 _make_words: entry=61107,31 _make_words: (lower) l[i]=length=20 _make_words: entry=63322,15 _make_words: (lower) l[i]=length=20 _make_words: entry=63323,15 _make_words: (lower) l[i]=length=20 _make_words: entry=63324,15 _make_words: (lower) l[i]=length=20 _make_words: entry=63325,15 _make_words: (lower) l[i]=length=20 _make_words: entry=63326,15 _make_words: (lower) l[i]=length=20 _make_words: entry=63327,15 Time to work out why that's happening. Sounds like fun! ;) Any thoughts & help appreciated of course. Cheers, Simon
- Previous message: Power management is going to drive me mad!
- Next message: DSP work updates (SBC & Tremor)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]