[Speex-dev] How to create a compact Speex library

ndno72-speex at yahoo.com ndno72-speex at yahoo.com
Mon Apr 17 17:53:30 PDT 2006



--- Jim Crichton <jim.crichton at 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


More information about the Speex-dev mailing list