Michael Jacobson
2007-Aug-07 06:01 UTC
[Speex-dev] Attempting to shrink speex: Are these functions necessary?
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@usherbrooke.ca> 08/06/07 7:00 PM >>>> I am aware that some of these functions are only not called becauseI> don't do a GET_ in the ctl functions or don't use ALLOC toinitialize> the bit buffer, but some of these I am not entirely sure why theywould> 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 removingthem> 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_terminatorYou 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_unquantNo need for that (assuming you only want 8 kbps).> In filters.c: > compute_rms > syn_percep_zero16 > qmf_decomp > qmf_synthNo need for that.> In ltp.c: > forced_pitch_quant > forced_pitch_unquantNo need for that.> In math_approx.c: > spx_ilog2 > _spx_cos_pi_2 > spx_cos_norm > spx_exp2 > spx_atanNo need for that.> In nb_celp.c: > nb_encoder_destroy > nb_decoder_destroyNo 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_highNo 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_ctlNo 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_handlerNo need for that.> In vbr.c: > vbr_analysis > vbr_destroyNo need for that.> In vq.c: > vq_index > vq_nbest_signNo 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
Jean-Marc Valin
2007-Aug-07 06:16 UTC
[Speex-dev] Attempting to shrink speex: Are these functions necessary?
Michael Jacobson a ?crit :> 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.I see. Just be careful how you handle the bits.> what part is the vocoder part of the decode?Look for this bit: /*Vocoder mode*/ if (st->submodeID==1) {... In general, any code that depends on st->submodeID being anything else than the one you're using can go away. Jean-Marc> Thanks for your help! > > -Mike > >>>> Jean-Marc Valin <jean-marc.valin@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 > > > > > ------------------------------------------------------------------------ > > _______________________________________________ > Speex-dev mailing list > Speex-dev@xiph.org > http://lists.xiph.org/mailman/listinfo/speex-dev