[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