Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Tim-Philipp Müller
Opus
Commits
a70729c0
Commit
a70729c0
authored
Jan 31, 2011
by
Jean-Marc Valin
Browse files
Koen's decoder updates
parent
9ed526cc
Changes
3
Hide whitespace changes
Inline
Side-by-side
configure.ac
View file @
a70729c0
...
...
@@ -3,7 +3,7 @@
AC_PREREQ([2.59])
AC_INIT(src/opus.h)
AM_INIT_AUTOMAKE(opus,201101
22
)
AM_INIT_AUTOMAKE(opus,201101
31
)
# Checks for programs.
AC_PROG_CC
...
...
src/opus_decoder.c
View file @
a70729c0
...
...
@@ -130,6 +130,7 @@ int opus_decode(OpusDecoder *st, const unsigned char *data,
if
(
st
->
mode
!=
MODE_CELT_ONLY
)
{
SKP_int16
*
pcm_ptr
=
pcm
;
DecControl
.
API_sampleRate
=
st
->
Fs
;
DecControl
.
payloadSize_ms
=
1000
*
audiosize
/
st
->
Fs
;
if
(
st
->
mode
==
MODE_SILK_ONLY
)
{
...
...
@@ -147,15 +148,18 @@ int opus_decode(OpusDecoder *st, const unsigned char *data,
DecControl
.
internalSampleRate
=
16000
;
}
/* We Should eventually have to set the bandwidth here */
/* Call SILK encoder for the low band */
silk_ret
=
SKP_Silk_SDK_Decode
(
st
->
silk_dec
,
&
DecControl
,
data
==
NULL
,
&
dec
,
len
,
pcm
,
&
silk_frame_size
);
if
(
silk_ret
)
{
fprintf
(
stderr
,
"SILK decode error
\n
"
);
/* Handle error */
}
/* FIXME: Add a check here to avoid a buffer overflow if there are more
samples in the SILK frame. In fact the TOC byte should tell us how many
frames there are */
do
{
/* Call SILK decoder */
silk_ret
=
SKP_Silk_SDK_Decode
(
st
->
silk_dec
,
&
DecControl
,
data
==
NULL
,
&
dec
,
len
,
pcm_ptr
,
&
silk_frame_size
);
if
(
silk_ret
)
{
fprintf
(
stderr
,
"SILK decode error
\n
"
);
/* Handle error */
}
pcm_ptr
+=
silk_frame_size
;
}
while
(
DecControl
.
moreInternalDecoderFrames
);
}
else
{
for
(
i
=
0
;
i
<
frame_size
*
st
->
channels
;
i
++
)
pcm
[
i
]
=
0
;
...
...
@@ -169,7 +173,7 @@ int opus_decode(OpusDecoder *st, const unsigned char *data,
celt_decoder_ctl
(
st
->
celt_dec
,
CELT_SET_START_BAND
(
0
));
}
if
(
st
->
mode
!=
MODE_SILK_ONLY
&&
st
->
bandwidth
>
BANDWIDTH_WIDEBAND
)
if
(
st
->
mode
!=
MODE_SILK_ONLY
)
{
int
endband
;
...
...
@@ -194,7 +198,7 @@ int opus_decode(OpusDecoder *st, const unsigned char *data,
/* Encode high band with CELT */
celt_ret
=
celt_decode_with_ec
(
st
->
celt_dec
,
data
,
len
,
pcm_celt
,
frame_size
,
&
dec
);
for
(
i
=
0
;
i
<
frame_size
*
st
->
channels
;
i
++
)
pcm
[
i
]
+
=
pcm_celt
[
i
];
pcm
[
i
]
=
ADD_SAT16
(
pcm
[
i
],
pcm_celt
[
i
]
)
;
}
return
celt_ret
<
0
?
celt_ret
:
audiosize
;
...
...
src/opus_decoder.h
View file @
a70729c0
...
...
@@ -47,6 +47,10 @@ struct OpusDecoder {
int
Fs
;
};
inline
short
ADD_SAT16
(
a
,
b
)
{
int
sum
=
a
+
b
;
return
sum
>
32767
?
32767
:
sum
<
-
32768
?
-
32768
:
(
short
)
sum
;
}
#endif
/* OPUS_DECODER_H */
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment