diff options
Diffstat (limited to 'lib/rbcodec/codecs/libopus/opus.c')
-rw-r--r-- | lib/rbcodec/codecs/libopus/opus.c | 21 |
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 | ||
171 | int 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 | |||
171 | int opus_packet_parse_impl(const unsigned char *data, opus_int32 len, | 192 | int 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], |