From 6bb1c1838d2b75da4ab38b59863ad10b462faec9 Mon Sep 17 00:00:00 2001
From: Jean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Date: Thu, 18 Aug 2011 15:54:00 -0400
Subject: [PATCH] opus_packet_parse() now returns the payload offset rather
 than the pointer

---
 src/opus.h         |  2 +-
 src/opus_decoder.c | 12 +++++++-----
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/opus.h b/src/opus.h
index 9bdb2f3f3..4ffe4446f 100644
--- a/src/opus.h
+++ b/src/opus.h
@@ -219,7 +219,7 @@ OPUS_EXPORT void opus_decoder_destroy(OpusDecoder *st);
 
 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);
diff --git a/src/opus_decoder.c b/src/opus_decoder.c
index e7d686183..7138854d8 100644
--- a/src/opus_decoder.c
+++ b/src/opus_decoder.c
@@ -446,12 +446,13 @@ static int parse_size(const unsigned char *data, int len, short *size)
 
 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 @@ int opus_packet_parse(const unsigned char *data, int len,
    if (out_toc)
       *out_toc = toc;
 
-   if (payload)
-      *payload = data;
+   if (payload_offset)
+      *payload_offset = data-data0;
 
    return count;
 }
@@ -571,7 +572,7 @@ int opus_decode_float(OpusDecoder *st, const unsigned char *data,
 #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 @@ int opus_decode_float(OpusDecoder *st, const unsigned char *data,
 	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;
-- 
GitLab