Hi, what is the good way to encode / decode multiple frames in packet ? I read that I must do multiple call to encode and thats it. But when I'm trying to decode,, it doesn't work. Maybe, the problem is my decode function.
<br><br>Here is my encode function<br><br><font size="1">void ms_speex_enc_process(MSSpeexEnc *obj)<br>{<br>&nbsp;&nbsp;&nbsp; ....<br><br>&nbsp;&nbsp;&nbsp; </font><font size="1"><span style="font-weight: bold;"><font size="2"><span style="font-weight: bold;">
Do I need to increase gran value to 640 or read / encode (2 times)</span></font></span></font><br><font size="1">&nbsp;&nbsp;&nbsp; ms_fifo_get_read_ptr(inf,gran,(void**)&amp;input);&nbsp;&nbsp; (gran = 320)<br>&nbsp;&nbsp;&nbsp; g_return_if_fail(input!=NULL);<br>
&nbsp;&nbsp;&nbsp; /* encode */<br>&nbsp;&nbsp;&nbsp; speex_bits_reset(&amp;obj-&gt;bits);&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; speex_encode_int(obj-&gt;speex_state,(short*)input,&amp;obj-&gt;bits);<br><span style="font-weight: bold;"><font size="2"><span style="font-weight: bold;">
</span></font></span></font><font size="1"><span style="font-weight: bold;"><font size="2"><span style="font-weight: bold;"><span style="font-weight: bold;"></span></span></font></span></font><font size="1"><br>&nbsp;&nbsp;&nbsp; m=ms_message_new(speex_bits_nbytes(&amp;obj-&gt;bits));
<br>&nbsp;&nbsp;&nbsp; //speex_bits_insert_terminator(&amp;obj-&gt;bits);<br>&nbsp;&nbsp;&nbsp; m-&gt;size=speex_bits_write(&amp;obj-&gt;bits,m-&gt;data,m-&gt;size);<br>&nbsp;&nbsp;&nbsp; ms_queue_put(outq,m);<br>}<br><br><font size="2">And my decode function <br><br>
<font size="1">void ms_speex_dec_process(MSSpeexDec *obj)<br>{<br>&nbsp;&nbsp;&nbsp; ....<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; m=ms_queue_get(inq);<br>&nbsp;&nbsp;&nbsp; g_return_if_fail(m!=NULL);<br>&nbsp;&nbsp;&nbsp; speex_bits_reset(&amp;obj-&gt;bits);<br>&nbsp;&nbsp;&nbsp; ms_fifo_get_write_ptr(outf,gran,(void**)&amp;output);
<br>&nbsp;&nbsp;&nbsp; g_return_if_fail(output!=NULL);<br>&nbsp;&nbsp;&nbsp; if (m-&gt;data!=NULL){<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; speex_bits_read_from(&amp;obj-&gt;bits,m-&gt;data,m-&gt;size);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /* decode */<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int ret = 1;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <font style="font-weight: bold;" size="2">
while( ret != -1 &amp;&amp; speex_bits_remaining(&amp;obj-&gt;bits) &gt; 0 )<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret = speex_decode_int(obj-&gt;speex_state,&amp;obj-&gt;bits,(short*)output);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; }else{<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /* we have a missing packet */<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; speex_decode_int(obj-&gt;speex_state,NULL,(short*)output);<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; ms_message_destroy(m);<br>&nbsp;&nbsp;&nbsp; <br>}<br><br><font size="2">Jonathan Blais</font><br>
</font></font></font>