[Speex-dev] Attempting to shrink speex: Are these functions necessary?

Michael Jacobson Michael.Jacobson at ultratec.com
Tue Aug 7 06:00:37 PDT 2007


for the bits init I am using speex_bits_set_bit_buffer and I don't use
the write to or read from because the data is already in the buffer I am
reading from and I am writing to the final buffer so I don't need to
move arrays around.  
 
what part is the vocoder part of the decode?
Thanks for your help!
 
-Mike

>>> Jean-Marc Valin <jean-marc.valin at usherbrooke.ca> 08/06/07 7:00 PM
>>>

> I am aware that some of these functions are only not called because
I
> don't do a GET_ in the ctl functions or don't use ALLOC to
initialize
> the bit buffer, but some of these I am not entirely sure why they
would
> or would not be used.  I would like to know if they are just rarely
> called functions and that I could be breaking the codec by removing
them
> or if all that I removed is just fine.

Assuming you're not changing your code, there are very few functions
that would be "rarely called" (either it is every time, or it's not).
The only exception might be the packet loss concealment function
(nb_decode_lost).

> these are the functions that I removed:
>  
> In bits.c:
> speex_bits_init
> speex_bits_init_buffer
> speex_bits_destroy
> speex_bits_reset
> speex_bits_rewind
> speex_bits_read_from
> speex_bits_flush
> speex_bits_read_whole_bytes
> speex_bits_write
> speex_bits_write_whole_bytes
> speex_bits_unpack_signed
> speex_bits_peek_unsigned
> speex_bits_peek
> speex_bits_nbytes
> speex_bits_insert_terminator

You probably don't need most of these, but I'm surprised you're not at
least using speex_bits_init(), speex_bits_read_from() and
speex_bits_write(). What are you using instead?

> In cd_search.c:
> noise_codebook_quant
> noise_codebook_unquant

No need for that (assuming you only want 8 kbps).

> In filters.c:
> compute_rms
> syn_percep_zero16
> qmf_decomp
> qmf_synth

No need for that.

> In ltp.c:
> forced_pitch_quant
> forced_pitch_unquant

No need for that.

> In math_approx.c:
> spx_ilog2
> _spx_cos_pi_2
> spx_cos_norm
> spx_exp2
> spx_atan

No need for that.

> In nb_celp.c:
> nb_encoder_destroy
> nb_decoder_destroy

No need for that if you never plan on freeing the memory

> In quant_lsp.c:
> lsp_quant_nb
> lsp_unquant_nb
> lsp_quant_high
> lsp_unquant_high

No need for that if you just want 8 kbps.

> In speex.c:
> speex_encoder_destroy
> speex_decoder_destroy
> speex_encode
> speex_decode
> nb_mode_query
> wb_mode_query
> speex_lib_ctl

No need for that if you're not using them in your code.

> In speex_callbacks.c:
> speex_inband_handler
> speex_std_mode_request_handler
> speex_std_low_mode_request_handler
> speex_std_high_mode_request_handler
> speex_std_vbr_request_handler
> speex_std_enh_request_handler
> speex_std_vbr_quality_request_handler
> speex_std_char_handler
> speex_default_user_handler

No need for that.

> In vbr.c:
> vbr_analysis
> vbr_destroy

No need for that.

> In vq.c:
> vq_index
> vq_nbest_sign

No need for those.


So yes, there's a lot of stuff you can remove. You can also get rid of
the stereo preprocess, mdf files. You can also remove the VBR part of
the narrowband encoder and the vocoder part of the decoder. As I was
saying, there are very few codepaths that are only taken sometimes. So
unless a bit of code was executed in your test, it's very likely you
don't need it (packet loss concealment being the exception, because
it's
only needed when you lose packets).

    Jean-Marc

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.xiph.org/pipermail/speex-dev/attachments/20070807/511a5cb8/attachment-0001.htm


More information about the Speex-dev mailing list