ndno72-speex@yahoo.com
2006-Apr-13 21:18 UTC
[Speex-dev] How to create a compact Speex library
--- Jean-Marc Valin <jean-marc.valin@usherbrooke.ca> wrote:> > Sorry if this a repost but I want to create the > > smallest Speex library possible to be put in TI's > > TMS320 DSP. I'm only interested in one > configuration: > > 5.97 Kbps narrowband. What part of source code > can I > > remove? Currently, when I compiled the version > 1.1.12 > > libspeex.a library with the TI TMS320 and > > Fixed-Integer options, I get around 522Kb. > > You mean kilo-bit or kilo-byte? The former is what > I'd expect, so if > you're getting the latter, something's already > wrong. > > > I would > > like to reduce it to as small as possible given my > > above 5.97 Kbps operating constraints (I don't > need > > all the other extra features from Speex: jitter > > buffer, echo cancellation, etc). > > First, try --disable-wideband (or define > DISABLE_WIDEBAND). Then you can > start removing other stuff you don't need. To get > rid of the echo > canceller, simply remove mdf.c. Then you can get rid > of jitter.c, > preprocess.c, pcm_wrapper.c, smallft.c, ... > Basically, if you remove the > file and it still works, then it wasn't needed. In > addition to all the > files you can remove without the need to touch > anything else, the > following can be disabled as long as you disable a > bit of code: > - VBR (vbr.c and references to VBR in nb_celp.c) > - codebooks for other bit-rates: > * all exc_*.c files except exc_10_16_table.c > * gain_table.c > > There might be a few bits more that can be removed, > but I think this > summarizes it well. > > Jean-Marc >Thanks, that help a lot. I was able to reduced the library from 522Kb to 296Kb per your suggestions. I want to reduce it more but don't know what other files to remove; you wrote "..., smallft.c, etc.", would you mind specifying the "etc" files; I know I'm too lazy to figure it out myself and since you are the expert, I will trush you more. Thanks.
> Thanks, that help a lot. I was able to reduced the > library from 522Kb to 296Kb per your suggestions. I > want to reduce it more but don't know what other files > to remove; you wrote "..., smallft.c, etc.", would you > mind specifying the "etc" files; I know I'm too lazy > to figure it out myself and since you are the expert, > I will trush you more. Thanks.I'm willing to help, but not do the work for you, sorry. Another thing, if RAM is also an issue for you, the current code in SVN (which I should warn is a bit experimental) uses about half the RAM compared to 1.2.12. Last thing... kilobits or kilobytes? Jean-Marc
>> > Sorry if this a repost but I want to create the >> > smallest Speex library possible to be put in TI's >> > TMS320 DSP. I'm only interested in one >> configuration: >> > 5.97 Kbps narrowband. What part of source code >> can I >> > remove? Currently, when I compiled the version >> 1.1.12 >> > libspeex.a library with the TI TMS320 and >> > Fixed-Integer options, I get around 522Kb. >> >> You mean kilo-bit or kilo-byte? The former is what >> I'd expect, so if >> you're getting the latter, something's already >> wrong. >> >> > I would >> > like to reduce it to as small as possible given my >> > above 5.97 Kbps operating constraints (I don't >> need >> > all the other extra features from Speex: jitter >> > buffer, echo cancellation, etc). >> >> First, try --disable-wideband (or define >> DISABLE_WIDEBAND). Then you can >> start removing other stuff you don't need. To get >> rid of the echo >> canceller, simply remove mdf.c. Then you can get rid >> of jitter.c, >> preprocess.c, pcm_wrapper.c, smallft.c, ... >> Basically, if you remove the >> file and it still works, then it wasn't needed. In >> addition to all the >> files you can remove without the need to touch >> anything else, the >> following can be disabled as long as you disable a >> bit of code: >> - VBR (vbr.c and references to VBR in nb_celp.c) >> - codebooks for other bit-rates: >> * all exc_*.c files except exc_10_16_table.c >> * gain_table.c >> >> There might be a few bits more that can be removed, >> but I think this >> summarizes it well. >> >> Jean-Marc >> > > > Thanks, that help a lot. I was able to reduced the > library from 522Kb to 296Kb per your suggestions. I > want to reduce it more but don't know what other files > to remove; you wrote "..., smallft.c, etc.", would you > mind specifying the "etc" files; I know I'm too lazy > to figure it out myself and since you are the expert, > I will trush you more. Thanks. >Take a look at the TI subdirectory in the Speex tree, which has builds for some TI DSPs. Those builds are 8kbps narrowband, with no extra features. Change a couple of lines and you have 5.97 narrowband builds. There is also some instrumentation for measuring data memory usage. Clearly, though, if you are worried about data space then you should take a look at Jean-Marc's new code (I have not had a chance yet, myself). What families of TI DSPs are you looking at? Most everything TI makes starts with TMS320, but that is over 100 different parts in several different familys. If you say a little more about what you are trying to do, you may find that others here have already tried it. But you are not going to get much help saying "I know I'm too lazy to figure it out myself". Having said that, here is the contents of my speex library for TI C55x DSP (from the .pjt file): Source="libspeex\bits.c" Source="libspeex\cb_search.c" Source="libspeex\exc_10_16_table.c" Source="libspeex\exc_10_32_table.c" Source="libspeex\exc_20_32_table.c" Source="libspeex\exc_5_256_table.c" Source="libspeex\exc_5_64_table.c" Source="libspeex\exc_8_128_table.c" Source="libspeex\filters.c" Source="libspeex\gain_table.c" Source="libspeex\gain_table_lbr.c" Source="libspeex\lpc.c" Source="libspeex\lsp.c" Source="libspeex\lsp_tables_nb.c" Source="libspeex\ltp.c" Source="libspeex\math_approx.c" Source="libspeex\misc.c" Source="libspeex\modes.c" Source="libspeex\nb_celp.c" Source="libspeex\quant_lsp.c" Source="libspeex\sb_celp.c" Source="libspeex\speex.c" Source="libspeex\speex_callbacks.c" Source="libspeex\vbr.c" Source="libspeex\vq.c" Source="your-main-routine-here.c" I have not removed any files which require code changes, but I will have to look at Jean-Marc's tips about vbr.c, exc_*.c, and gain_table.c (thanks for those). By the way, do you really care about the size of the .a file? My library is 467kbytes, but that is meaningless, because the library was built with symbol information. Looking at the map file, Speex (including my interface routines) takes about 41kbytes in .text and 16kbytes in .const. That does not include data memory, which is what Jean-Marc is working on now. Regards, Jim Crichton
Hi Jim,> I have not removed any files which require code changes, but I will have to > look at Jean-Marc's tips about vbr.c, exc_*.c, and gain_table.c (thanks for > those).Basically, have a look at modes.c, which contains all the information about each of the Speex modes (*_submode* structs). If you remove some of these modes (and the other strucs they reference), then you can eventually get rid of the corresponding codebooks. At 8 kbps, the only codebooks you'll need are exc_10_32_table.c gain_table_lbr.c and lsp_tables_nb.c (half of which can go if you remove lsp_quant_nb and lsp_unquant_nb). As for vbr.c, what you need to remove in nb_celp.c is pretty much the big block of code that starts with /*VBR stuff*/. Then you can get rid of vbr.c.> By the way, do you really care about the size of the .a file? My library is > 467kbytes, but that is meaningless, because the library was built with > symbol information. Looking at the map file, Speex (including my interface > routines) takes about 41kbytes in .text and 16kbytes in .const. That does > not include data memory, which is what Jean-Marc is working on now.OK, I was a bit surprised to hear that the size was that big, but debug info explains it. Last think, I recently (in svn) moved the lpc window from the encoder state to static data in window.c. Could you add that to your project files? Jean-Marc
ndno72-speex@yahoo.com
2006-Apr-17 17:53 UTC
[Speex-dev] How to create a compact Speex library
--- Jim Crichton <jim.crichton@comcast.net> wrote:> >> > Sorry if this a repost but I want to create the > >> > smallest Speex library possible to be put in > TI's > >> > TMS320 DSP. I'm only interested in one > >> configuration: > >> > 5.97 Kbps narrowband. What part of source code > >> can I > >> > remove? Currently, when I compiled the version > >> 1.1.12 > >> > libspeex.a library with the TI TMS320 and > >> > Fixed-Integer options, I get around 522Kb. > >> > >> You mean kilo-bit or kilo-byte? The former is > what > >> I'd expect, so if > >> you're getting the latter, something's already > >> wrong. > >> > >> > I would > >> > like to reduce it to as small as possible given > my > >> > above 5.97 Kbps operating constraints (I don't > >> need > >> > all the other extra features from Speex: jitter > >> > buffer, echo cancellation, etc). > >> > >> First, try --disable-wideband (or define > >> DISABLE_WIDEBAND). Then you can > >> start removing other stuff you don't need. To get > >> rid of the echo > >> canceller, simply remove mdf.c. Then you can get > rid > >> of jitter.c, > >> preprocess.c, pcm_wrapper.c, smallft.c, ... > >> Basically, if you remove the > >> file and it still works, then it wasn't needed. > In > >> addition to all the > >> files you can remove without the need to touch > >> anything else, the > >> following can be disabled as long as you disable > a > >> bit of code: > >> - VBR (vbr.c and references to VBR in nb_celp.c) > >> - codebooks for other bit-rates: > >> * all exc_*.c files except exc_10_16_table.c > >> * gain_table.c > >> > >> There might be a few bits more that can be > removed, > >> but I think this > >> summarizes it well. > >> > >> Jean-Marc > >> > > > > > > Thanks, that help a lot. I was able to reduced > the > > library from 522Kb to 296Kb per your suggestions. > I > > want to reduce it more but don't know what other > files > > to remove; you wrote "..., smallft.c, etc.", would > you > > mind specifying the "etc" files; I know I'm too > lazy > > to figure it out myself and since you are the > expert, > > I will trush you more. Thanks. > > > > Take a look at the TI subdirectory in the Speex > tree, which has builds for > some TI DSPs. Those builds are 8kbps narrowband, > with no extra features. > Change a couple of lines and you have 5.97 > narrowband builds. There is also > some instrumentation for measuring data memory > usage. Clearly, though, if > you are worried about data space then you should > take a look at Jean-Marc's > new code (I have not had a chance yet, myself). > > What families of TI DSPs are you looking at? Most > everything TI makes > starts with TMS320, but that is over 100 different > parts in several > different familys. If you say a little more about > what you are trying to > do, you may find that others here have already tried > it. But you are not > going to get much help saying "I know I'm too lazy > to figure it out myself". > Having said that, here is the contents of my speex > library for TI C55x DSP > (from the .pjt file): > > Source="libspeex\bits.c" > Source="libspeex\cb_search.c" > Source="libspeex\exc_10_16_table.c" > Source="libspeex\exc_10_32_table.c" > Source="libspeex\exc_20_32_table.c" > Source="libspeex\exc_5_256_table.c" > Source="libspeex\exc_5_64_table.c" > Source="libspeex\exc_8_128_table.c" > Source="libspeex\filters.c" > Source="libspeex\gain_table.c" > Source="libspeex\gain_table_lbr.c" > Source="libspeex\lpc.c" > Source="libspeex\lsp.c" > Source="libspeex\lsp_tables_nb.c" > Source="libspeex\ltp.c" > Source="libspeex\math_approx.c" > Source="libspeex\misc.c" > Source="libspeex\modes.c" > Source="libspeex\nb_celp.c" > Source="libspeex\quant_lsp.c" > Source="libspeex\sb_celp.c" > Source="libspeex\speex.c" > Source="libspeex\speex_callbacks.c" > Source="libspeex\vbr.c" > Source="libspeex\vq.c" > Source="your-main-routine-here.c" > > I have not removed any files which require code > changes, but I will have to > look at Jean-Marc's tips about vbr.c, exc_*.c, and > gain_table.c (thanks for > those). > > By the way, do you really care about the size of the > .a file? My library is > 467kbytes, but that is meaningless, because the > library was built with > symbol information. Looking at the map file, Speex > (including my interface > routines) takes about 41kbytes in .text and 16kbytes > in .const. That does > not include data memory, which is what Jean-Marc is > working on now. > > Regards, > > Jim Crichton > > >Thanks for your help. And sorry to Jean-Marc for implying that I don't want to do any work and just "free-load" off everyone else's efforts. I just wanted some hints/pointers as to what I should remove given my operating Speex parameters (5.95 kilo bits /sec). Jim, you are correct, the .a has nothing to do with the final resources being used; the .a has other headers/data that don't show up when I linked with my application. By the way, I'm using a TMS320VC5510 DSP. Thanks to Jean-Marc for his help: I was able to remove vbr.c, all exc_*.c except exc_10_16_table.c, and gain_table.c (for references to those tables, I just replaced them with "0", is that OK?). Regards, Andy