summaryrefslogtreecommitdiff
path: root/lib/rbcodec/codecs/libopus/opus.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rbcodec/codecs/libopus/opus.c')
-rw-r--r--lib/rbcodec/codecs/libopus/opus.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/lib/rbcodec/codecs/libopus/opus.c b/lib/rbcodec/codecs/libopus/opus.c
index 989c6537cb..0526f8b414 100644
--- a/lib/rbcodec/codecs/libopus/opus.c
+++ b/lib/rbcodec/codecs/libopus/opus.c
@@ -168,6 +168,27 @@ static int parse_size(const unsigned char *data, opus_int32 len, opus_int16 *siz
168 } 168 }
169} 169}
170 170
171int opus_packet_get_samples_per_frame(const unsigned char *data,
172 opus_int32 Fs)
173{
174 int audiosize;
175 if (data[0]&0x80)
176 {
177 audiosize = ((data[0]>>3)&0x3);
178 audiosize = (Fs<<audiosize)/400;
179 } else if ((data[0]&0x60) == 0x60)
180 {
181 audiosize = (data[0]&0x08) ? Fs/50 : Fs/100;
182 } else {
183 audiosize = ((data[0]>>3)&0x3);
184 if (audiosize == 3)
185 audiosize = Fs*60/1000;
186 else
187 audiosize = (Fs<<audiosize)/100;
188 }
189 return audiosize;
190}
191
171int opus_packet_parse_impl(const unsigned char *data, opus_int32 len, 192int opus_packet_parse_impl(const unsigned char *data, opus_int32 len,
172 int self_delimited, unsigned char *out_toc, 193 int self_delimited, unsigned char *out_toc,
173 const unsigned char *frames[48], opus_int16 size[48], 194 const unsigned char *frames[48], opus_int16 size[48],