ref: 6bb1c1838d2b75da4ab38b59863ad10b462faec9
parent: 8fe8b8e0b64a162bea4e1101ec7f094389108dc1
author: Jean-Marc Valin <[email protected]>
date: Thu Aug 18 11:54:00 EDT 2011
opus_packet_parse() now returns the payload offset rather than the pointer
--- a/src/opus.h
+++ b/src/opus.h
@@ -219,7 +219,7 @@
OPUS_EXPORT int opus_packet_parse(const unsigned char *data, int len,
unsigned char *out_toc, const unsigned char *frames[48],
- short size[48], const unsigned char **payload);
+ short size[48], int *payload_offset);
OPUS_EXPORT int opus_packet_get_bandwidth(const unsigned char *data);
OPUS_EXPORT int opus_packet_get_samples_per_frame(const unsigned char *data, int Fs);
--- a/src/opus_decoder.c
+++ b/src/opus_decoder.c
@@ -446,12 +446,13 @@
int opus_packet_parse(const unsigned char *data, int len,
unsigned char *out_toc, const unsigned char *frames[48],
- short size[48], const unsigned char **payload)
+ short size[48], int *payload_offset)
{
int i, bytes;
int count;
unsigned char ch, toc;
int framesize;
+ const unsigned char *data0 = data;
if (size==NULL)
return OPUS_BAD_ARG;
@@ -556,8 +557,8 @@
if (out_toc)
*out_toc = toc;
- if (payload)
- *payload = data;
+ if (payload_offset)
+ *payload_offset = data-data0;
return count;
}
@@ -571,7 +572,7 @@
#endif
{
int i, nb_samples;
- int count;
+ int count, offset;
unsigned char toc;
/* 48 x 2.5 ms = 120 ms */
short size[48];
@@ -584,10 +585,11 @@
st->frame_size = opus_packet_get_samples_per_frame(data, st->Fs);
st->stream_channels = opus_packet_get_nb_channels(data);
- count = opus_packet_parse(data, len, &toc, NULL, size, &data);
+ count = opus_packet_parse(data, len, &toc, NULL, size, &offset);
if (count < 0)
return count;
+ data += offset;
if (count*st->frame_size > frame_size)
return OPUS_BAD_ARG;
nb_samples=0;