[Speex-dev] NB encoder with multiple channels
jean-marc.valin at usherbrooke.ca
Mon Feb 13 21:26:43 PST 2006
On Mon, 2006-02-13 at 23:01 -0600, Jerry Trantow wrote:
> I am trying to implement a relatively high number of encoders (24/32) on a
> single DSP and would like to minimize the memory requirements. Has anyone
> optimized the persistent EncState memory allocation for multiple channels.
> The default C64x fixed point implementation allocates 5280 bytes of
> persistent memory per encoder.
First thing I suggest if not already done is to use define VAR_ARRAY so
all the temporary stuff gets allocated from the the stack instead of
being malloc()ed for each encoder (unless you're already using a scratch
> I'm willing to restrict my settings to complexity 1, quality 3.
> It looks like I can share the st->window, lagWindow,
Those are constant for all encoders, so it's fine.
> bw_lpc1, bw_lpc2,
You can't share those, but they can be allocated as temporary (stack or
> variables which would save 562 bytes per encoder. Are there more variables
> that can be shared or eliminated if I stick to narrow band?
You can also use temp allocation for lpc, autocorr, interp_lpc,
interp_qlpc (encoder only), interp_lsp and interp_qlsp. You can probably
completely remove all the vbr, abr, vad and dtx stuff.
> The biggest variables are the inBuf, excBuf, swBuf, innov and I think these
> have to stay.
A lot of those could be converted to 16-bit, but of course that requires
more work. inBuf is partially redundant with the input, but again it
would require a bit of code rewriting to take advantage of that.
More information about the Speex-dev