[Speex-dev] Decoded output buffer size
conrad at metadecks.org
Thu Apr 15 02:17:17 PDT 2010
On 15 April 2010 17:55, Daniele Barzotti
<daniele.barzotti at eurocomtel.com> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> Il 15/04/2010 01:30, Conrad Parker wrote:
>>> But how can I know the size of each speex frame into a multiframe payload?
>> use speex_bit_read_from() just once on the packet, then call
>> speex_decode() once for each frame.
> Thanks for the reply, Conrad.
> What is not clear for me (and I didn't found it on the manual) is how to
> decode a multi-frame payload.
> Once have called speex_bits_read_from, I need a way to know how many
> speex frames there are, how can I do this?
> I try to use speex_bits_remaining, but after some cycles it returns
> always 4.
> UINT DecodePayload( char* payload, UINT payload_len )
> speex_bits_read_from(&spx_bits_, payload, payload_len);
> UINT nbBytes = speex_bits_remaining(&spx_bits_);
> while (nbBytes>0)
> speex_decode(spx_state_, &spx_bits_, spx_dec_frame_);
> nbBytes = speex_bits_remaining(&spx_bits_);
> // Save the speex frame into the buffer
> DecOutBuffer_.Write(spx_dec_frame_, spx_frame_size_);
> Any suggestion?
I think speex_decode() updates the number of bits remaining; here's what I use:
but the number of frames in a packet is up to your application. For an
Ogg stream it will be a field in the speex_header, for RTP using SDP
it is calculated from ptime according to section 5.6 of RFC5574:
Without SDP, section 3.5 states:
"The Speex decoder [SPEEX] can detect the bit-rate from the payload
and is responsible for detecting the 20 msec boundaries between each
but I don't know how that translates into libspeex calls. Jean-Marc?
More information about the Speex-dev