<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.6000.16481" name=GENERATOR></HEAD>
<BODY style="MARGIN: 4px 4px 1px; FONT: 10pt Tahoma">
<DIV>Thank you, I really appreciate the help.</DIV>
<DIV>&nbsp;</DIV>
<DIV>-Mike<BR><BR>&gt;&gt;&gt; Jean-Marc Valin &lt;jean-marc.valin@usherbrooke.ca&gt; 08/07/07 8:34 AM &gt;&gt;&gt;<BR></DIV>
<DIV style="COLOR: #000000">Michael Jacobson a écrit :<BR>&gt; I'm glad to hear that my data size can be shrunk considerably,<BR>&gt; however I do not know the minimum values that I would set the static<BR>&gt; arrays to be.&nbsp; I hate to be a bother but could you tell me the<BR>&gt; minimum values for these arrays/structures in the state structure?<BR>&gt; Thanks!<BR>&gt; <BR>&gt; encode: stack winBuf excBuf swBuf lagWindow old_lsp old_qlsp mem_sp <BR>&gt; mem_sw mem_sw_whole mem_exc mem_exc2 pi_gain pitch<BR>&gt; <BR>&gt; decode: stack excBuf interp_qlpc old_qlsp mem_sp pi_gain<BR><BR>What I meant is that you can reduce the stack part (assuming you're not<BR>already using VAR_ARRAYS or USE_ALLOCA). The other variables above still<BR>require the same size they are currently using. For the stack, the<BR>easiest way to measure (it's platform-dependent to some extent), the<BR>easiest is to fill the memory with 0xdeadbeef and see how far gets<BR>written. The amount of stack used is exactly the same every time you<BR>encode or decode.<BR><BR>&nbsp;&nbsp;&nbsp; Jean-Marc<BR><BR><BR>&gt;&gt;&gt;&gt; Jean-Marc Valin &lt;jean-marc.valin@usherbrooke.ca&gt; 08/06/07 7:04<BR>&gt;&gt;&gt;&gt; PM &gt;&gt;&gt;<BR>&gt; <BR>&gt; Last thing. All the codebooks are stored as tables of char, so you're<BR>&gt;&nbsp; probably wasting a lot of space from the fact that chars on C5x are <BR>&gt; 16-bit long. You might be able to pack the values in one 16-bit value<BR>&gt;&nbsp; and unpack in the code. As for the memory allocation in the encoder,<BR>&gt; the best is to use C99 variable-size arrays (VAR_ARRAYS) or alloca <BR>&gt; (USE_ALLOCA). Otherwise, you can make the static array much smaller.<BR>&gt; For 8 kbps, the total RAM requirement (not counting code or static<BR>&gt; tables) should be around 4 kB (2 kWords).<BR>&gt; <BR>&gt; Jean-Marc<BR>&gt; <BR>&gt; Michael Jacobson a écrit :<BR>&gt;&gt; Hi,<BR>&gt;&gt; <BR>&gt;&gt; I am using speex 1.2beta2 on a narrowband 16-bit, 8khz system that<BR>&gt;&gt; has a severe program space problem and will not fit speex in its<BR>&gt;&gt; normal operation.&nbsp; In an attempt to shrink speex I placed a<BR>&gt;&gt; breakpoint in every function and ran a decode and encode and<BR>&gt;&gt; removed the breakpoints that I hit.&nbsp; in the functions that had a<BR>&gt;&gt; breakpoint that I didn't hit I commented out those functions (as<BR>&gt;&gt; well as some functions that I know I won't hit).<BR>&gt;&gt; <BR>&gt;&gt; I am aware that some of these functions are only not called because<BR>&gt;&gt; I don't do a GET_ in the ctl functions or don't use ALLOC to<BR>&gt;&gt; initialize the bit buffer, but some of these I am not entirely sure<BR>&gt;&gt; why they would or would not be used.&nbsp; I would like to know if they<BR>&gt;&gt; are just rarely called functions and that I could be breaking the<BR>&gt;&gt; codec by removing them or if all that I removed is just fine.<BR>&gt;&gt; <BR>&gt;&gt; I did get a .patch file from Jim Crichton as well to shrink<BR>&gt;&gt; nb_celp, but is there anything else I can do to shrink the code or<BR>&gt;&gt; am I reaching my limit? Thanks.<BR>&gt;&gt; <BR>&gt;&gt; <BR>&gt;&gt; these are the functions that I removed:<BR>&gt;&gt; <BR>&gt;&gt; In bits.c: speex_bits_init speex_bits_init_buffer <BR>&gt;&gt; speex_bits_destroy speex_bits_reset speex_bits_rewind <BR>&gt;&gt; speex_bits_read_from speex_bits_flush speex_bits_read_whole_bytes <BR>&gt;&gt; speex_bits_write speex_bits_write_whole_bytes <BR>&gt;&gt; speex_bits_unpack_signed speex_bits_peek_unsigned speex_bits_peek <BR>&gt;&gt; speex_bits_nbytes speex_bits_insert_terminator<BR>&gt;&gt; <BR>&gt;&gt; In cd_search.c: noise_codebook_quant noise_codebook_unquant<BR>&gt;&gt; <BR>&gt;&gt; In filters.c: compute_rms syn_percep_zero16 qmf_decomp qmf_synth<BR>&gt;&gt; <BR>&gt;&gt; In ltp.c: forced_pitch_quant forced_pitch_unquant<BR>&gt;&gt; <BR>&gt;&gt; In math_approx.c: spx_ilog2 _spx_cos_pi_2 spx_cos_norm spx_exp2 <BR>&gt;&gt; spx_atan<BR>&gt;&gt; <BR>&gt;&gt; In nb_celp.c: nb_encoder_destroy nb_decoder_destroy<BR>&gt;&gt; <BR>&gt;&gt; In quant_lsp.c: lsp_quant_nb lsp_unquant_nb lsp_quant_high <BR>&gt;&gt; lsp_unquant_high<BR>&gt;&gt; <BR>&gt;&gt; In speex.c: speex_encoder_destroy speex_decoder_destroy <BR>&gt;&gt; speex_encode speex_decode nb_mode_query wb_mode_query speex_lib_ctl<BR>&gt;&gt; <BR>&gt;&gt; <BR>&gt;&gt; In speex_callbacks.c: speex_inband_handler <BR>&gt;&gt; speex_std_mode_request_handler speex_std_low_mode_request_handler <BR>&gt;&gt; speex_std_high_mode_request_handler speex_std_vbr_request_handler <BR>&gt;&gt; speex_std_enh_request_handler speex_std_vbr_quality_request_handler<BR>&gt;&gt;&nbsp; speex_std_char_handler speex_default_user_handler<BR>&gt;&gt; <BR>&gt;&gt; In vbr.c: vbr_analysis vbr_destroy<BR>&gt;&gt; <BR>&gt;&gt; In vq.c: vq_index vq_nbest_sign<BR>&gt;&gt; <BR>&gt;&gt; <BR>&gt;&gt; <BR>&gt;&gt; <BR>&gt;&gt; <BR>&gt;&gt; ------------------------------------------------------------------------<BR>&gt;&gt; <BR>&gt;&gt; <BR>&gt;&gt; _______________________________________________ Speex-dev mailing<BR>&gt;&gt; list Speex-dev@xiph.org <BR>&gt;&gt; <A href="http://lists.xiph.org/mailman/listinfo/speex-dev">http://lists.xiph.org/mailman/listinfo/speex-dev</A><BR>&gt; <BR>&gt; <BR>&gt; <BR>&gt; <BR>&gt; ------------------------------------------------------------------------<BR>&gt; <BR>&gt; <BR>&gt; _______________________________________________ Speex-dev mailing<BR>&gt; list Speex-dev@xiph.org <BR>&gt; <A href="http://lists.xiph.org/mailman/listinfo/speex-dev">http://lists.xiph.org/mailman/listinfo/speex-dev</A><BR></DIV></BODY></HTML>