summaryrefslogtreecommitdiffstats
path: root/ext
diff options
context:
space:
mode:
authorMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>2009-09-18 11:53:12 +0200
committerMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>2009-09-18 14:46:38 +0200
commit50c41acdff0c54caefe026db1bc0aab704e917db (patch)
tree9147d29620cf3340d19458855fb886b37c507bf6 /ext
parent35f9efac8817af5632cc48eaddccede21a5fcc85 (diff)
speexdec: allow for unknown varying number of frames per buffer
In particular, this caters for RTP payloads with multiple frames per packet.
Diffstat (limited to 'ext')
-rw-r--r--ext/speex/gstspeexdec.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/ext/speex/gstspeexdec.c b/ext/speex/gstspeexdec.c
index 7494227d..38899b5d 100644
--- a/ext/speex/gstspeexdec.c
+++ b/ext/speex/gstspeexdec.c
@@ -655,7 +655,7 @@ speex_dec_chain_parse_data (GstSpeexDec * dec, GstBuffer * buf,
/* send data to the bitstream */
speex_bits_read_from (&dec->bits, (char *) data, size);
- fpp = dec->header->frames_per_packet;
+ fpp = 0;
bits = &dec->bits;
GST_DEBUG_OBJECT (dec, "received buffer of size %u, fpp %d", size, fpp);
@@ -677,8 +677,9 @@ speex_dec_chain_parse_data (GstSpeexDec * dec, GstBuffer * buf,
}
- /* now decode each frame */
- for (i = 0; i < fpp; i++) {
+ /* now decode each frame, catering for unknown number of them (e.g. rtp) */
+ for (i = 0; (!fpp || i < fpp) && (!bits || speex_bits_remaining (bits) > 0);
+ i++) {
GstBuffer *outbuf;
gint16 *out_data;
gint ret;