Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Mark Harris
Opus
Commits
fb3a437c
Commit
fb3a437c
authored
Sep 16, 2011
by
Jean-Marc Valin
Browse files
Renaming the SKP_ prefix to silk_
parent
c0f050e7
Changes
145
Expand all
Hide whitespace changes
Inline
Side-by-side
silk/fixed/silk_LTP_analysis_filter_FIX.c
View file @
fb3a437c
...
...
@@ -62,17 +62,17 @@ void silk_LTP_analysis_filter_FIX(
LTP_res_ptr
[
i
]
=
x_ptr
[
i
];
/* Long-term prediction */
LTP_est
=
SKP
_SMULBB
(
x_lag_ptr
[
LTP_ORDER
/
2
],
Btmp_Q14
[
0
]
);
LTP_est
=
silk
_SMULBB
(
x_lag_ptr
[
LTP_ORDER
/
2
],
Btmp_Q14
[
0
]
);
for
(
j
=
1
;
j
<
LTP_ORDER
;
j
++
)
{
LTP_est
=
SKP
_SMLABB_ovflw
(
LTP_est
,
x_lag_ptr
[
LTP_ORDER
/
2
-
j
],
Btmp_Q14
[
j
]
);
LTP_est
=
silk
_SMLABB_ovflw
(
LTP_est
,
x_lag_ptr
[
LTP_ORDER
/
2
-
j
],
Btmp_Q14
[
j
]
);
}
LTP_est
=
SKP
_RSHIFT_ROUND
(
LTP_est
,
14
);
/* round and -> Q0*/
LTP_est
=
silk
_RSHIFT_ROUND
(
LTP_est
,
14
);
/* round and -> Q0*/
/* Subtract long-term prediction */
LTP_res_ptr
[
i
]
=
(
opus_int16
)
SKP
_SAT16
(
(
opus_int32
)
x_ptr
[
i
]
-
LTP_est
);
LTP_res_ptr
[
i
]
=
(
opus_int16
)
silk
_SAT16
(
(
opus_int32
)
x_ptr
[
i
]
-
LTP_est
);
/* Scale residual */
LTP_res_ptr
[
i
]
=
SKP
_SMULWB
(
invGains_Q16
[
k
],
LTP_res_ptr
[
i
]
);
LTP_res_ptr
[
i
]
=
silk
_SMULWB
(
invGains_Q16
[
k
],
LTP_res_ptr
[
i
]
);
x_lag_ptr
++
;
}
...
...
silk/fixed/silk_LTP_scale_ctrl_FIX.c
View file @
fb3a437c
...
...
@@ -39,15 +39,15 @@ void silk_LTP_scale_ctrl_FIX(
opus_int
round_loss
;
/* 1st order high-pass filter */
psEnc
->
HPLTPredCodGain_Q7
=
SKP
_max_int
(
psEncCtrl
->
LTPredCodGain_Q7
-
SKP
_RSHIFT
(
psEnc
->
prevLTPredCodGain_Q7
,
1
),
0
)
+
SKP
_RSHIFT
(
psEnc
->
HPLTPredCodGain_Q7
,
1
);
psEnc
->
HPLTPredCodGain_Q7
=
silk
_max_int
(
psEncCtrl
->
LTPredCodGain_Q7
-
silk
_RSHIFT
(
psEnc
->
prevLTPredCodGain_Q7
,
1
),
0
)
+
silk
_RSHIFT
(
psEnc
->
HPLTPredCodGain_Q7
,
1
);
psEnc
->
prevLTPredCodGain_Q7
=
psEncCtrl
->
LTPredCodGain_Q7
;
/* Only scale if first frame in packet */
if
(
psEnc
->
sCmn
.
nFramesEncoded
==
0
)
{
round_loss
=
psEnc
->
sCmn
.
PacketLoss_perc
+
psEnc
->
sCmn
.
nFramesPerPacket
-
1
;
psEnc
->
sCmn
.
indices
.
LTP_scaleIndex
=
(
opus_int8
)
SKP
_LIMIT
(
SKP
_SMULWB
(
SKP
_SMULBB
(
round_loss
,
psEnc
->
HPLTPredCodGain_Q7
),
SILK_FIX_CONST
(
0
.
1
,
9
)
),
0
,
2
);
psEnc
->
sCmn
.
indices
.
LTP_scaleIndex
=
(
opus_int8
)
silk
_LIMIT
(
silk
_SMULWB
(
silk
_SMULBB
(
round_loss
,
psEnc
->
HPLTPredCodGain_Q7
),
SILK_FIX_CONST
(
0
.
1
,
9
)
),
0
,
2
);
}
else
{
/* Default is minimum scaling */
psEnc
->
sCmn
.
indices
.
LTP_scaleIndex
=
0
;
...
...
silk/fixed/silk_corrMatrix_FIX.c
View file @
fb3a437c
...
...
@@ -57,13 +57,13 @@ void silk_corrVector_FIX(
for
(
lag
=
0
;
lag
<
order
;
lag
++
)
{
inner_prod
=
0
;
for
(
i
=
0
;
i
<
L
;
i
++
)
{
inner_prod
+=
SKP
_RSHIFT32
(
SKP
_SMULBB
(
ptr1
[
i
],
ptr2
[
i
]
),
rshifts
);
inner_prod
+=
silk
_RSHIFT32
(
silk
_SMULBB
(
ptr1
[
i
],
ptr2
[
i
]
),
rshifts
);
}
Xt
[
lag
]
=
inner_prod
;
/* X[:,lag]'*t */
ptr1
--
;
/* Go to next column of X */
}
}
else
{
SKP
_assert
(
rshifts
==
0
);
silk
_assert
(
rshifts
==
0
);
for
(
lag
=
0
;
lag
<
order
;
lag
++
)
{
Xt
[
lag
]
=
silk_inner_prod_aligned
(
ptr1
,
ptr2
,
L
);
/* X[:,lag]'*t */
ptr1
--
;
/* Go to next column of X */
...
...
@@ -88,19 +88,19 @@ void silk_corrMatrix_FIX(
/* Calculate energy to find shift used to fit in 32 bits */
silk_sum_sqr_shift
(
&
energy
,
&
rshifts_local
,
x
,
L
+
order
-
1
);
/* Add shifts to get the desired head room */
head_room_rshifts
=
SKP
_max
(
head_room
-
silk_CLZ32
(
energy
),
0
);
head_room_rshifts
=
silk
_max
(
head_room
-
silk_CLZ32
(
energy
),
0
);
energy
=
SKP
_RSHIFT32
(
energy
,
head_room_rshifts
);
energy
=
silk
_RSHIFT32
(
energy
,
head_room_rshifts
);
rshifts_local
+=
head_room_rshifts
;
/* Calculate energy of first column (0) of X: X[:,0]'*X[:,0] */
/* Remove contribution of first order - 1 samples */
for
(
i
=
0
;
i
<
order
-
1
;
i
++
)
{
energy
-=
SKP
_RSHIFT32
(
SKP
_SMULBB
(
x
[
i
],
x
[
i
]
),
rshifts_local
);
energy
-=
silk
_RSHIFT32
(
silk
_SMULBB
(
x
[
i
],
x
[
i
]
),
rshifts_local
);
}
if
(
rshifts_local
<
*
rshifts
)
{
/* Adjust energy */
energy
=
SKP
_RSHIFT32
(
energy
,
*
rshifts
-
rshifts_local
);
energy
=
silk
_RSHIFT32
(
energy
,
*
rshifts
-
rshifts_local
);
rshifts_local
=
*
rshifts
;
}
...
...
@@ -109,8 +109,8 @@ void silk_corrMatrix_FIX(
matrix_ptr
(
XX
,
0
,
0
,
order
)
=
energy
;
ptr1
=
&
x
[
order
-
1
];
/* First sample of column 0 of X */
for
(
j
=
1
;
j
<
order
;
j
++
)
{
energy
=
SKP
_SUB32
(
energy
,
SKP
_RSHIFT32
(
SKP
_SMULBB
(
ptr1
[
L
-
j
],
ptr1
[
L
-
j
]
),
rshifts_local
)
);
energy
=
SKP
_ADD32
(
energy
,
SKP
_RSHIFT32
(
SKP
_SMULBB
(
ptr1
[
-
j
],
ptr1
[
-
j
]
),
rshifts_local
)
);
energy
=
silk
_SUB32
(
energy
,
silk
_RSHIFT32
(
silk
_SMULBB
(
ptr1
[
L
-
j
],
ptr1
[
L
-
j
]
),
rshifts_local
)
);
energy
=
silk
_ADD32
(
energy
,
silk
_RSHIFT32
(
silk
_SMULBB
(
ptr1
[
-
j
],
ptr1
[
-
j
]
),
rshifts_local
)
);
matrix_ptr
(
XX
,
j
,
j
,
order
)
=
energy
;
}
...
...
@@ -122,14 +122,14 @@ void silk_corrMatrix_FIX(
/* Inner product of column 0 and column lag: X[:,0]'*X[:,lag] */
energy
=
0
;
for
(
i
=
0
;
i
<
L
;
i
++
)
{
energy
+=
SKP
_RSHIFT32
(
SKP
_SMULBB
(
ptr1
[
i
],
ptr2
[
i
]
),
rshifts_local
);
energy
+=
silk
_RSHIFT32
(
silk
_SMULBB
(
ptr1
[
i
],
ptr2
[
i
]
),
rshifts_local
);
}
/* Calculate remaining off diagonal: X[:,j]'*X[:,j + lag] */
matrix_ptr
(
XX
,
lag
,
0
,
order
)
=
energy
;
matrix_ptr
(
XX
,
0
,
lag
,
order
)
=
energy
;
for
(
j
=
1
;
j
<
(
order
-
lag
);
j
++
)
{
energy
=
SKP
_SUB32
(
energy
,
SKP
_RSHIFT32
(
SKP
_SMULBB
(
ptr1
[
L
-
j
],
ptr2
[
L
-
j
]
),
rshifts_local
)
);
energy
=
SKP
_ADD32
(
energy
,
SKP
_RSHIFT32
(
SKP
_SMULBB
(
ptr1
[
-
j
],
ptr2
[
-
j
]
),
rshifts_local
)
);
energy
=
silk
_SUB32
(
energy
,
silk
_RSHIFT32
(
silk
_SMULBB
(
ptr1
[
L
-
j
],
ptr2
[
L
-
j
]
),
rshifts_local
)
);
energy
=
silk
_ADD32
(
energy
,
silk
_RSHIFT32
(
silk
_SMULBB
(
ptr1
[
-
j
],
ptr2
[
-
j
]
),
rshifts_local
)
);
matrix_ptr
(
XX
,
lag
+
j
,
j
,
order
)
=
energy
;
matrix_ptr
(
XX
,
j
,
lag
+
j
,
order
)
=
energy
;
}
...
...
@@ -143,8 +143,8 @@ void silk_corrMatrix_FIX(
matrix_ptr
(
XX
,
0
,
lag
,
order
)
=
energy
;
/* Calculate remaining off diagonal: X[:,j]'*X[:,j + lag] */
for
(
j
=
1
;
j
<
(
order
-
lag
);
j
++
)
{
energy
=
SKP
_SUB32
(
energy
,
SKP
_SMULBB
(
ptr1
[
L
-
j
],
ptr2
[
L
-
j
]
)
);
energy
=
SKP
_SMLABB
(
energy
,
ptr1
[
-
j
],
ptr2
[
-
j
]
);
energy
=
silk
_SUB32
(
energy
,
silk
_SMULBB
(
ptr1
[
L
-
j
],
ptr2
[
L
-
j
]
)
);
energy
=
silk
_SMLABB
(
energy
,
ptr1
[
-
j
],
ptr2
[
-
j
]
);
matrix_ptr
(
XX
,
lag
+
j
,
j
,
order
)
=
energy
;
matrix_ptr
(
XX
,
j
,
lag
+
j
,
order
)
=
energy
;
}
...
...
silk/fixed/silk_encode_frame_FIX.c
View file @
fb3a437c
...
...
@@ -96,7 +96,7 @@ TOC(VAD)
/*******************************************/
/* Copy new frame to front of input buffer */
/*******************************************/
SKP
_memcpy
(
x_frame
+
LA_SHAPE_MS
*
psEnc
->
sCmn
.
fs_kHz
,
psEnc
->
sCmn
.
inputBuf
+
1
,
psEnc
->
sCmn
.
frame_length
*
sizeof
(
opus_int16
)
);
silk
_memcpy
(
x_frame
+
LA_SHAPE_MS
*
psEnc
->
sCmn
.
fs_kHz
,
psEnc
->
sCmn
.
inputBuf
+
1
,
psEnc
->
sCmn
.
frame_length
*
sizeof
(
opus_int16
)
);
/*****************************************/
/* Find pitch lags, initial LPC analysis */
...
...
@@ -156,7 +156,7 @@ TIC(NSQ)
TOC
(
NSQ
)
/* Update input buffer */
SKP
_memmove
(
psEnc
->
x_buf
,
&
psEnc
->
x_buf
[
psEnc
->
sCmn
.
frame_length
],
silk
_memmove
(
psEnc
->
x_buf
,
&
psEnc
->
x_buf
[
psEnc
->
sCmn
.
frame_length
],
(
psEnc
->
sCmn
.
ltp_mem_length
+
LA_SHAPE_MS
*
psEnc
->
sCmn
.
fs_kHz
)
*
sizeof
(
opus_int16
)
);
/* Parameters needed for next frame */
...
...
@@ -191,7 +191,7 @@ TOC(ENCODE_PULSES)
psEnc
->
sCmn
.
first_frame_after_reset
=
0
;
if
(
++
psEnc
->
sCmn
.
nFramesEncoded
>=
psEnc
->
sCmn
.
nFramesPerPacket
)
{
/* Payload size */
*
pnBytesOut
=
SKP
_RSHIFT
(
ec_tell
(
psRangeEnc
)
+
7
,
3
);
*
pnBytesOut
=
silk
_RSHIFT
(
ec_tell
(
psRangeEnc
)
+
7
,
3
);
/* Reset the number of frames in payload buffer */
psEnc
->
sCmn
.
nFramesEncoded
=
0
;
...
...
@@ -203,40 +203,40 @@ TOC(ENCODE_FRAME)
#ifdef SAVE_ALL_INTERNAL_DATA
{
SKP
_float
tmp
[
MAX_NB_SUBFR
*
LTP_ORDER
];
silk
_float
tmp
[
MAX_NB_SUBFR
*
LTP_ORDER
];
int
i
;
DEBUG_STORE_DATA
(
xf
.
dat
,
x_frame
+
LA_SHAPE_MS
*
psEnc
->
sCmn
.
fs_kHz
,
psEnc
->
sCmn
.
frame_length
*
sizeof
(
opus_int16
)
);
DEBUG_STORE_DATA
(
xfw
.
dat
,
xfw
,
psEnc
->
sCmn
.
frame_length
*
sizeof
(
opus_int16
)
);
DEBUG_STORE_DATA
(
pitchL
.
dat
,
sEncCtrl
.
pitchL
,
psEnc
->
sCmn
.
nb_subfr
*
sizeof
(
opus_int
)
);
for
(
i
=
0
;
i
<
psEnc
->
sCmn
.
nb_subfr
*
LTP_ORDER
;
i
++
)
{
tmp
[
i
]
=
(
SKP
_float
)
sEncCtrl
.
LTPCoef_Q14
[
i
]
/
16384
.
0
f
;
tmp
[
i
]
=
(
silk
_float
)
sEncCtrl
.
LTPCoef_Q14
[
i
]
/
16384
.
0
f
;
}
DEBUG_STORE_DATA
(
pitchG_quantized
.
dat
,
tmp
,
psEnc
->
sCmn
.
nb_subfr
*
LTP_ORDER
*
sizeof
(
SKP
_float
)
);
DEBUG_STORE_DATA
(
pitchG_quantized
.
dat
,
tmp
,
psEnc
->
sCmn
.
nb_subfr
*
LTP_ORDER
*
sizeof
(
silk
_float
)
);
for
(
i
=
0
;
i
<
psEnc
->
sCmn
.
predictLPCOrder
;
i
++
)
{
tmp
[
i
]
=
(
SKP
_float
)
sEncCtrl
.
PredCoef_Q12
[
1
][
i
]
/
4096
.
0
f
;
tmp
[
i
]
=
(
silk
_float
)
sEncCtrl
.
PredCoef_Q12
[
1
][
i
]
/
4096
.
0
f
;
}
DEBUG_STORE_DATA
(
PredCoef
.
dat
,
tmp
,
psEnc
->
sCmn
.
predictLPCOrder
*
sizeof
(
SKP
_float
)
);
tmp
[
0
]
=
(
SKP
_float
)
sEncCtrl
.
LTPredCodGain_Q7
/
128
.
0
f
;
DEBUG_STORE_DATA
(
LTPredCodGain
.
dat
,
tmp
,
sizeof
(
SKP
_float
)
);
tmp
[
0
]
=
(
SKP
_float
)
psEnc
->
LTPCorr_Q15
/
32768
.
0
f
;
DEBUG_STORE_DATA
(
LTPcorr
.
dat
,
tmp
,
sizeof
(
SKP
_float
)
);
tmp
[
0
]
=
(
SKP
_float
)
psEnc
->
sCmn
.
input_tilt_Q15
/
32768
.
0
f
;
DEBUG_STORE_DATA
(
tilt
.
dat
,
tmp
,
sizeof
(
SKP
_float
)
);
DEBUG_STORE_DATA
(
PredCoef
.
dat
,
tmp
,
psEnc
->
sCmn
.
predictLPCOrder
*
sizeof
(
silk
_float
)
);
tmp
[
0
]
=
(
silk
_float
)
sEncCtrl
.
LTPredCodGain_Q7
/
128
.
0
f
;
DEBUG_STORE_DATA
(
LTPredCodGain
.
dat
,
tmp
,
sizeof
(
silk
_float
)
);
tmp
[
0
]
=
(
silk
_float
)
psEnc
->
LTPCorr_Q15
/
32768
.
0
f
;
DEBUG_STORE_DATA
(
LTPcorr
.
dat
,
tmp
,
sizeof
(
silk
_float
)
);
tmp
[
0
]
=
(
silk
_float
)
psEnc
->
sCmn
.
input_tilt_Q15
/
32768
.
0
f
;
DEBUG_STORE_DATA
(
tilt
.
dat
,
tmp
,
sizeof
(
silk
_float
)
);
for
(
i
=
0
;
i
<
psEnc
->
sCmn
.
nb_subfr
;
i
++
)
{
tmp
[
i
]
=
(
SKP
_float
)
sEncCtrl
.
Gains_Q16
[
i
]
/
65536
.
0
f
;
tmp
[
i
]
=
(
silk
_float
)
sEncCtrl
.
Gains_Q16
[
i
]
/
65536
.
0
f
;
}
DEBUG_STORE_DATA
(
gains
.
dat
,
tmp
,
psEnc
->
sCmn
.
nb_subfr
*
sizeof
(
SKP
_float
)
);
DEBUG_STORE_DATA
(
gains
.
dat
,
tmp
,
psEnc
->
sCmn
.
nb_subfr
*
sizeof
(
silk
_float
)
);
DEBUG_STORE_DATA
(
gains_indices
.
dat
,
&
psEnc
->
sCmn
.
indices
.
GainsIndices
,
psEnc
->
sCmn
.
nb_subfr
*
sizeof
(
opus_int
)
);
tmp
[
0
]
=
(
SKP
_float
)
sEncCtrl
.
current_SNR_dB_Q7
/
128
.
0
f
;
DEBUG_STORE_DATA
(
current_SNR_db
.
dat
,
tmp
,
sizeof
(
SKP
_float
)
);
tmp
[
0
]
=
(
silk
_float
)
sEncCtrl
.
current_SNR_dB_Q7
/
128
.
0
f
;
DEBUG_STORE_DATA
(
current_SNR_db
.
dat
,
tmp
,
sizeof
(
silk
_float
)
);
DEBUG_STORE_DATA
(
quantOffsetType
.
dat
,
&
psEnc
->
sCmn
.
indices
.
quantOffsetType
,
sizeof
(
opus_int
)
);
tmp
[
0
]
=
(
SKP
_float
)
psEnc
->
sCmn
.
speech_activity_Q8
/
256
.
0
f
;
DEBUG_STORE_DATA
(
speech_activity
.
dat
,
tmp
,
sizeof
(
SKP
_float
)
);
tmp
[
0
]
=
(
silk
_float
)
psEnc
->
sCmn
.
speech_activity_Q8
/
256
.
0
f
;
DEBUG_STORE_DATA
(
speech_activity
.
dat
,
tmp
,
sizeof
(
silk
_float
)
);
for
(
i
=
0
;
i
<
VAD_N_BANDS
;
i
++
)
{
tmp
[
i
]
=
(
SKP
_float
)
psEnc
->
sCmn
.
input_quality_bands_Q15
[
i
]
/
32768
.
0
f
;
tmp
[
i
]
=
(
silk
_float
)
psEnc
->
sCmn
.
input_quality_bands_Q15
[
i
]
/
32768
.
0
f
;
}
DEBUG_STORE_DATA
(
input_quality_bands
.
dat
,
tmp
,
VAD_N_BANDS
*
sizeof
(
SKP
_float
)
);
DEBUG_STORE_DATA
(
input_quality_bands
.
dat
,
tmp
,
VAD_N_BANDS
*
sizeof
(
silk
_float
)
);
DEBUG_STORE_DATA
(
signalType
.
dat
,
&
psEnc
->
sCmn
.
indices
.
signalType
,
sizeof
(
opus_int8
)
);
DEBUG_STORE_DATA
(
lag_index
.
dat
,
&
psEnc
->
sCmn
.
indices
.
lagIndex
,
sizeof
(
opus_int16
)
);
DEBUG_STORE_DATA
(
contour_index
.
dat
,
&
psEnc
->
sCmn
.
indices
.
contourIndex
,
sizeof
(
opus_int8
)
);
...
...
@@ -264,11 +264,11 @@ void silk_LBRR_encode_FIX(
psEnc
->
sCmn
.
LBRR_flags
[
psEnc
->
sCmn
.
nFramesEncoded
]
=
1
;
/* Copy noise shaping quantizer state and quantization indices from regular encoding */
SKP
_memcpy
(
&
sNSQ_LBRR
,
&
psEnc
->
sCmn
.
sNSQ
,
sizeof
(
silk_nsq_state
)
);
SKP
_memcpy
(
psIndices_LBRR
,
&
psEnc
->
sCmn
.
indices
,
sizeof
(
SideInfoIndices
)
);
silk
_memcpy
(
&
sNSQ_LBRR
,
&
psEnc
->
sCmn
.
sNSQ
,
sizeof
(
silk_nsq_state
)
);
silk
_memcpy
(
psIndices_LBRR
,
&
psEnc
->
sCmn
.
indices
,
sizeof
(
SideInfoIndices
)
);
/* Save original gains */
SKP
_memcpy
(
TempGains_Q16
,
psEncCtrl
->
Gains_Q16
,
psEnc
->
sCmn
.
nb_subfr
*
sizeof
(
opus_int32
)
);
silk
_memcpy
(
TempGains_Q16
,
psEncCtrl
->
Gains_Q16
,
psEnc
->
sCmn
.
nb_subfr
*
sizeof
(
opus_int32
)
);
if
(
psEnc
->
sCmn
.
nFramesEncoded
==
0
||
psEnc
->
sCmn
.
LBRR_flags
[
psEnc
->
sCmn
.
nFramesEncoded
-
1
]
==
0
)
{
/* First frame in packet or previous frame not LBRR coded */
...
...
@@ -276,7 +276,7 @@ void silk_LBRR_encode_FIX(
/* Increase Gains to get target LBRR rate */
psIndices_LBRR
->
GainsIndices
[
0
]
=
psIndices_LBRR
->
GainsIndices
[
0
]
+
psEnc
->
sCmn
.
LBRR_GainIncreases
;
psIndices_LBRR
->
GainsIndices
[
0
]
=
SKP
_min_int
(
psIndices_LBRR
->
GainsIndices
[
0
],
N_LEVELS_QGAIN
-
1
);
psIndices_LBRR
->
GainsIndices
[
0
]
=
silk
_min_int
(
psIndices_LBRR
->
GainsIndices
[
0
],
N_LEVELS_QGAIN
-
1
);
}
/* Decode to get gains in sync with decoder */
...
...
@@ -300,6 +300,6 @@ void silk_LBRR_encode_FIX(
}
/* Restore original gains */
SKP
_memcpy
(
psEncCtrl
->
Gains_Q16
,
TempGains_Q16
,
psEnc
->
sCmn
.
nb_subfr
*
sizeof
(
opus_int32
)
);
silk
_memcpy
(
psEncCtrl
->
Gains_Q16
,
TempGains_Q16
,
psEnc
->
sCmn
.
nb_subfr
*
sizeof
(
opus_int32
)
);
}
}
silk/fixed/silk_find_LPC_FIX.c
View file @
fb3a437c
...
...
@@ -83,11 +83,11 @@ void silk_find_LPC_FIX(
shift
=
res_tmp_nrg_Q
-
res_nrg_Q
;
if
(
shift
>=
0
)
{
if
(
shift
<
32
)
{
res_nrg
=
res_nrg
-
SKP
_RSHIFT
(
res_tmp_nrg
,
shift
);
res_nrg
=
res_nrg
-
silk
_RSHIFT
(
res_tmp_nrg
,
shift
);
}
}
else
{
SKP
_assert
(
shift
>
-
32
);
res_nrg
=
SKP
_RSHIFT
(
res_nrg
,
-
shift
)
-
res_tmp_nrg
;
silk
_assert
(
shift
>
-
32
);
res_nrg
=
silk
_RSHIFT
(
res_nrg
,
-
shift
)
-
res_tmp_nrg
;
res_nrg_Q
=
res_tmp_nrg_Q
;
}
...
...
@@ -95,7 +95,7 @@ void silk_find_LPC_FIX(
silk_A2NLSF
(
NLSF_Q15
,
a_tmp_Q16
,
LPC_order
);
/* Search over interpolation indices to find the one with lowest residual energy */
res_nrg_2nd
=
SKP
_int32_MAX
;
res_nrg_2nd
=
silk
_int32_MAX
;
for
(
k
=
3
;
k
>=
0
;
k
--
)
{
/* Interpolate NLSFs for first half */
silk_interpolate
(
NLSF0_Q15
,
prev_NLSFq_Q15
,
NLSF_Q15
,
k
,
LPC_order
);
...
...
@@ -112,36 +112,36 @@ void silk_find_LPC_FIX(
/* Add subframe energies from first half frame */
shift
=
rshift0
-
rshift1
;
if
(
shift
>=
0
)
{
res_nrg1
=
SKP
_RSHIFT
(
res_nrg1
,
shift
);
res_nrg1
=
silk
_RSHIFT
(
res_nrg1
,
shift
);
res_nrg_interp_Q
=
-
rshift0
;
}
else
{
res_nrg0
=
SKP
_RSHIFT
(
res_nrg0
,
-
shift
);
res_nrg0
=
silk
_RSHIFT
(
res_nrg0
,
-
shift
);
res_nrg_interp_Q
=
-
rshift1
;
}
res_nrg_interp
=
SKP
_ADD32
(
res_nrg0
,
res_nrg1
);
res_nrg_interp
=
silk
_ADD32
(
res_nrg0
,
res_nrg1
);
/* Compare with first half energy without NLSF interpolation, or best interpolated value so far */
shift
=
res_nrg_interp_Q
-
res_nrg_Q
;
if
(
shift
>=
0
)
{
if
(
SKP
_RSHIFT
(
res_nrg_interp
,
shift
)
<
res_nrg
)
{
isInterpLower
=
SKP
_TRUE
;
if
(
silk
_RSHIFT
(
res_nrg_interp
,
shift
)
<
res_nrg
)
{
isInterpLower
=
silk
_TRUE
;
}
else
{
isInterpLower
=
SKP
_FALSE
;
isInterpLower
=
silk
_FALSE
;
}
}
else
{
if
(
-
shift
<
32
)
{
if
(
res_nrg_interp
<
SKP
_RSHIFT
(
res_nrg
,
-
shift
)
)
{
isInterpLower
=
SKP
_TRUE
;
if
(
res_nrg_interp
<
silk
_RSHIFT
(
res_nrg
,
-
shift
)
)
{
isInterpLower
=
silk
_TRUE
;
}
else
{
isInterpLower
=
SKP
_FALSE
;
isInterpLower
=
silk
_FALSE
;
}
}
else
{
isInterpLower
=
SKP
_FALSE
;
isInterpLower
=
silk
_FALSE
;
}
}
/* Determine whether current interpolated NLSFs are best so far */
if
(
isInterpLower
==
SKP
_TRUE
)
{
if
(
isInterpLower
==
silk
_TRUE
)
{
/* Interpolation has lower residual energy */
res_nrg
=
res_nrg_interp
;
res_nrg_Q
=
res_nrg_interp_Q
;
...
...
@@ -157,5 +157,5 @@ void silk_find_LPC_FIX(
silk_A2NLSF
(
NLSF_Q15
,
a_Q16
,
LPC_order
);
}
SKP
_assert
(
*
interpIndex
==
4
||
(
useInterpNLSFs
&&
!
firstFrameAfterReset
&&
nb_subfr
==
MAX_NB_SUBFR
)
);
silk
_assert
(
*
interpIndex
==
4
||
(
useInterpNLSFs
&&
!
firstFrameAfterReset
&&
nb_subfr
==
MAX_NB_SUBFR
)
);
}
silk/fixed/silk_find_LTP_FIX.c
View file @
fb3a437c
...
...
@@ -80,7 +80,7 @@ void silk_find_LTP_FIX(
/* Assure headroom */
LZs
=
silk_CLZ32
(
rr
[
k
]
);
if
(
LZs
<
LTP_CORRS_HEAD_ROOM
)
{
rr
[
k
]
=
SKP
_RSHIFT_ROUND
(
rr
[
k
],
LTP_CORRS_HEAD_ROOM
-
LZs
);
rr
[
k
]
=
silk
_RSHIFT_ROUND
(
rr
[
k
],
LTP_CORRS_HEAD_ROOM
-
LZs
);
rr_shifts
+=
(
LTP_CORRS_HEAD_ROOM
-
LZs
);
}
corr_rshifts
[
k
]
=
rr_shifts
;
...
...
@@ -89,14 +89,14 @@ void silk_find_LTP_FIX(
/* The correlation vector always has lower max abs value than rr and/or RR so head room is assured */
silk_corrVector_FIX
(
lag_ptr
,
r_ptr
,
subfr_length
,
LTP_ORDER
,
Rr
,
corr_rshifts
[
k
]
);
/* Rr_fix_ptr in Q( -corr_rshifts[ k ] ) */
if
(
corr_rshifts
[
k
]
>
rr_shifts
)
{
rr
[
k
]
=
SKP
_RSHIFT
(
rr
[
k
],
corr_rshifts
[
k
]
-
rr_shifts
);
/* rr[ k ] in Q( -corr_rshifts[ k ] ) */
rr
[
k
]
=
silk
_RSHIFT
(
rr
[
k
],
corr_rshifts
[
k
]
-
rr_shifts
);
/* rr[ k ] in Q( -corr_rshifts[ k ] ) */
}
SKP
_assert
(
rr
[
k
]
>=
0
);
silk
_assert
(
rr
[
k
]
>=
0
);
regu
=
1
;
regu
=
SKP
_SMLAWB
(
regu
,
rr
[
k
],
SILK_FIX_CONST
(
LTP_DAMPING
/
3
,
16
)
);
regu
=
SKP
_SMLAWB
(
regu
,
matrix_ptr
(
WLTP_ptr
,
0
,
0
,
LTP_ORDER
),
SILK_FIX_CONST
(
LTP_DAMPING
/
3
,
16
)
);
regu
=
SKP
_SMLAWB
(
regu
,
matrix_ptr
(
WLTP_ptr
,
LTP_ORDER
-
1
,
LTP_ORDER
-
1
,
LTP_ORDER
),
SILK_FIX_CONST
(
LTP_DAMPING
/
3
,
16
)
);
regu
=
silk
_SMLAWB
(
regu
,
rr
[
k
],
SILK_FIX_CONST
(
LTP_DAMPING
/
3
,
16
)
);
regu
=
silk
_SMLAWB
(
regu
,
matrix_ptr
(
WLTP_ptr
,
0
,
0
,
LTP_ORDER
),
SILK_FIX_CONST
(
LTP_DAMPING
/
3
,
16
)
);
regu
=
silk
_SMLAWB
(
regu
,
matrix_ptr
(
WLTP_ptr
,
LTP_ORDER
-
1
,
LTP_ORDER
-
1
,
LTP_ORDER
),
SILK_FIX_CONST
(
LTP_DAMPING
/
3
,
16
)
);
silk_regularize_correlations_FIX
(
WLTP_ptr
,
&
rr
[
k
],
regu
,
LTP_ORDER
);
silk_solve_LDL_FIX
(
WLTP_ptr
,
LTP_ORDER
,
Rr
,
b_Q16
);
/* WLTP_fix_ptr and Rr_fix_ptr both in Q(-corr_rshifts[k]) */
...
...
@@ -108,29 +108,29 @@ void silk_find_LTP_FIX(
nrg
[
k
]
=
silk_residual_energy16_covar_FIX
(
b_Q14_ptr
,
WLTP_ptr
,
Rr
,
rr
[
k
],
LTP_ORDER
,
14
);
/* nrg_fix in Q( -corr_rshifts[ k ] ) */
/* temp = Wght[ k ] / ( nrg[ k ] * Wght[ k ] + 0.01f * subfr_length ); */
extra_shifts
=
SKP
_min_int
(
corr_rshifts
[
k
],
LTP_CORRS_HEAD_ROOM
);
denom32
=
SKP
_LSHIFT_SAT32
(
SKP
_SMULWB
(
nrg
[
k
],
Wght_Q15
[
k
]
),
1
+
extra_shifts
)
+
/* Q( -corr_rshifts[ k ] + extra_shifts ) */
SKP
_RSHIFT
(
SKP
_SMULWB
(
subfr_length
,
655
),
corr_rshifts
[
k
]
-
extra_shifts
);
/* Q( -corr_rshifts[ k ] + extra_shifts ) */
denom32
=
SKP
_max
(
denom32
,
1
);
SKP
_assert
(
((
opus_int64
)
Wght_Q15
[
k
]
<<
16
)
<
SKP
_int32_MAX
);
/* Wght always < 0.5 in Q0 */
temp32
=
SKP
_DIV32
(
SKP
_LSHIFT
(
(
opus_int32
)
Wght_Q15
[
k
],
16
),
denom32
);
/* Q( 15 + 16 + corr_rshifts[k] - extra_shifts ) */
temp32
=
SKP
_RSHIFT
(
temp32
,
31
+
corr_rshifts
[
k
]
-
extra_shifts
-
26
);
/* Q26 */
extra_shifts
=
silk
_min_int
(
corr_rshifts
[
k
],
LTP_CORRS_HEAD_ROOM
);
denom32
=
silk
_LSHIFT_SAT32
(
silk
_SMULWB
(
nrg
[
k
],
Wght_Q15
[
k
]
),
1
+
extra_shifts
)
+
/* Q( -corr_rshifts[ k ] + extra_shifts ) */
silk
_RSHIFT
(
silk
_SMULWB
(
subfr_length
,
655
),
corr_rshifts
[
k
]
-
extra_shifts
);
/* Q( -corr_rshifts[ k ] + extra_shifts ) */
denom32
=
silk
_max
(
denom32
,
1
);
silk
_assert
(
((
opus_int64
)
Wght_Q15
[
k
]
<<
16
)
<
silk
_int32_MAX
);
/* Wght always < 0.5 in Q0 */
temp32
=
silk
_DIV32
(
silk
_LSHIFT
(
(
opus_int32
)
Wght_Q15
[
k
],
16
),
denom32
);
/* Q( 15 + 16 + corr_rshifts[k] - extra_shifts ) */
temp32
=
silk
_RSHIFT
(
temp32
,
31
+
corr_rshifts
[
k
]
-
extra_shifts
-
26
);
/* Q26 */
/* Limit temp such that the below scaling never wraps around */
WLTP_max
=
0
;
for
(
i
=
0
;
i
<
LTP_ORDER
*
LTP_ORDER
;
i
++
)
{
WLTP_max
=
SKP
_max
(
WLTP_ptr
[
i
],
WLTP_max
);
WLTP_max
=
silk
_max
(
WLTP_ptr
[
i
],
WLTP_max
);
}
lshift
=
silk_CLZ32
(
WLTP_max
)
-
1
-
3
;
/* keep 3 bits free for vq_nearest_neighbor_fix */
SKP
_assert
(
26
-
18
+
lshift
>=
0
);
silk
_assert
(
26
-
18
+
lshift
>=
0
);
if
(
26
-
18
+
lshift
<
31
)
{
temp32
=
SKP
_min_32
(
temp32
,
SKP
_LSHIFT
(
(
opus_int32
)
1
,
26
-
18
+
lshift
)
);
temp32
=
silk
_min_32
(
temp32
,
silk
_LSHIFT
(
(
opus_int32
)
1
,
26
-
18
+
lshift
)
);
}
silk_scale_vector32_Q26_lshift_18
(
WLTP_ptr
,
temp32
,
LTP_ORDER
*
LTP_ORDER
);
/* WLTP_ptr in Q( 18 - corr_rshifts[ k ] ) */
w
[
k
]
=
matrix_ptr
(
WLTP_ptr
,
LTP_ORDER
/
2
,
LTP_ORDER
/
2
,
LTP_ORDER
);
/* w in Q( 18 - corr_rshifts[ k ] ) */
SKP
_assert
(
w
[
k
]
>=
0
);
silk
_assert
(
w
[
k
]
>=
0
);
r_ptr
+=
subfr_length
;
b_Q14_ptr
+=
LTP_ORDER
;
...
...
@@ -139,24 +139,24 @@ void silk_find_LTP_FIX(
maxRshifts
=
0
;
for
(
k
=
0
;
k
<
nb_subfr
;
k
++
)
{
maxRshifts
=
SKP
_max_int
(
corr_rshifts
[
k
],
maxRshifts
);
maxRshifts
=
silk
_max_int
(
corr_rshifts
[
k
],
maxRshifts
);
}
/* Compute LTP coding gain */
if
(
LTPredCodGain_Q7
!=
NULL
)
{
LPC_LTP_res_nrg
=
0
;
LPC_res_nrg
=
0
;
SKP
_assert
(
LTP_CORRS_HEAD_ROOM
>=
2
);
/* Check that no overflow will happen when adding */
silk
_assert
(
LTP_CORRS_HEAD_ROOM
>=
2
);
/* Check that no overflow will happen when adding */
for
(
k
=
0
;
k
<
nb_subfr
;
k
++
)
{
LPC_res_nrg
=
SKP
_ADD32
(
LPC_res_nrg
,
SKP
_RSHIFT
(
SKP
_ADD32
(
SKP
_SMULWB
(
rr
[
k
],
Wght_Q15
[
k
]
),
1
),
1
+
(
maxRshifts
-
corr_rshifts
[
k
]
)
)
);
/* Q( -maxRshifts ) */
LPC_LTP_res_nrg
=
SKP
_ADD32
(
LPC_LTP_res_nrg
,
SKP
_RSHIFT
(
SKP
_ADD32
(
SKP
_SMULWB
(
nrg
[
k
],
Wght_Q15
[
k
]
),
1
),
1
+
(
maxRshifts
-
corr_rshifts
[
k
]
)
)
);
/* Q( -maxRshifts ) */
LPC_res_nrg
=
silk
_ADD32
(
LPC_res_nrg
,
silk
_RSHIFT
(
silk
_ADD32
(
silk
_SMULWB
(
rr
[
k
],
Wght_Q15
[
k
]
),
1
),
1
+
(
maxRshifts
-
corr_rshifts
[
k
]
)
)
);
/* Q( -maxRshifts ) */
LPC_LTP_res_nrg
=
silk
_ADD32
(
LPC_LTP_res_nrg
,
silk
_RSHIFT
(
silk
_ADD32
(
silk
_SMULWB
(
nrg
[
k
],
Wght_Q15
[
k
]
),
1
),
1
+
(
maxRshifts
-
corr_rshifts
[
k
]
)
)
);
/* Q( -maxRshifts ) */
}
LPC_LTP_res_nrg
=
SKP
_max
(
LPC_LTP_res_nrg
,
1
);
/* avoid division by zero */
LPC_LTP_res_nrg
=
silk
_max
(
LPC_LTP_res_nrg
,
1
);
/* avoid division by zero */
div_Q16
=
silk_DIV32_varQ
(
LPC_res_nrg
,
LPC_LTP_res_nrg
,
16
);
*
LTPredCodGain_Q7
=
(
opus_int
)
SKP
_SMULBB
(
3
,
silk_lin2log
(
div_Q16
)
-
(
16
<<
7
)
);
*
LTPredCodGain_Q7
=
(
opus_int
)
silk
_SMULBB
(
3
,
silk_lin2log
(
div_Q16
)
-
(
16
<<
7
)
);
SKP
_assert
(
*
LTPredCodGain_Q7
==
(
opus_int
)
SKP
_SAT16
(
SKP
_MUL
(
3
,
silk_lin2log
(
div_Q16
)
-
(
16
<<
7
)
)
)
);
silk
_assert
(
*
LTPredCodGain_Q7
==
(
opus_int
)
silk
_SAT16
(
silk
_MUL
(
3
,
silk_lin2log
(
div_Q16
)
-
(
16
<<
7
)
)
)
);
}
/* smoothing */
...
...
@@ -176,30 +176,30 @@ void silk_find_LTP_FIX(
max_abs_d_Q14
=
0
;
max_w_bits
=
0
;
for
(
k
=
0
;
k
<
nb_subfr
;
k
++
)
{
max_abs_d_Q14
=
SKP
_max_32
(
max_abs_d_Q14
,
SKP
_abs
(
d_Q14
[
k
]
)
);
max_abs_d_Q14
=
silk
_max_32
(
max_abs_d_Q14
,
silk
_abs
(
d_Q14
[
k
]
)
);
/* w[ k ] is in Q( 18 - corr_rshifts[ k ] ) */
/* Find bits needed in Q( 18 - maxRshifts ) */
max_w_bits
=
SKP
_max_32
(
max_w_bits
,
32
-
silk_CLZ32
(
w
[
k
]
)
+
corr_rshifts
[
k
]
-
maxRshifts
);
max_w_bits
=
silk
_max_32
(
max_w_bits
,
32
-
silk_CLZ32
(
w
[
k
]
)
+
corr_rshifts
[
k
]
-
maxRshifts
);
}
/* max_abs_d_Q14 = (5 << 15); worst case, i.e. LTP_ORDER * -
SKP
_int16_MIN */
SKP
_assert
(
max_abs_d_Q14
<=
(
5
<<
15
)
);
/* max_abs_d_Q14 = (5 << 15); worst case, i.e. LTP_ORDER * -
silk
_int16_MIN */
silk
_assert
(
max_abs_d_Q14
<=
(
5
<<
15
)
);
/* How many bits is needed for w*d' in Q( 18 - maxRshifts ) in the worst case, of all d_Q14's being equal to max_abs_d_Q14 */
extra_shifts
=
max_w_bits
+
32
-
silk_CLZ32
(
max_abs_d_Q14
)
-
14
;
/* Subtract what we got available; bits in output var plus maxRshifts */
extra_shifts
-=
(
32
-
1
-
2
+
maxRshifts
);
/* Keep sign bit free as well as 2 bits for accumulation */
extra_shifts
=
SKP
_max_int
(
extra_shifts
,
0
);
extra_shifts
=
silk
_max_int
(
extra_shifts
,
0
);
maxRshifts_wxtra
=
maxRshifts
+
extra_shifts
;
temp32
=
SKP
_RSHIFT
(
262
,
maxRshifts
+
extra_shifts
)
+
1
;
/* 1e-3f in Q( 18 - (maxRshifts + extra_shifts) ) */
temp32
=
silk
_RSHIFT
(
262
,
maxRshifts
+
extra_shifts
)
+
1
;
/* 1e-3f in Q( 18 - (maxRshifts + extra_shifts) ) */
wd
=
0
;
for
(
k
=
0
;
k
<
nb_subfr
;
k
++
)
{
/* w has at least 2 bits of headroom so no overflow should happen */
temp32
=
SKP
_ADD32
(
temp32
,
SKP
_RSHIFT
(
w
[
k
],
maxRshifts_wxtra
-
corr_rshifts
[
k
]
)
);
/* Q( 18 - maxRshifts_wxtra ) */
wd
=
SKP
_ADD32
(
wd
,
SKP
_LSHIFT
(
SKP
_SMULWW
(
SKP
_RSHIFT
(
w
[
k
],
maxRshifts_wxtra
-
corr_rshifts
[
k
]
),
d_Q14
[
k
]
),
2
)
);
/* Q( 18 - maxRshifts_wxtra ) */
temp32
=
silk
_ADD32
(
temp32
,
silk
_RSHIFT
(
w
[
k
],
maxRshifts_wxtra
-
corr_rshifts
[
k
]
)
);
/* Q( 18 - maxRshifts_wxtra ) */
wd
=
silk
_ADD32
(
wd
,
silk
_LSHIFT
(
silk
_SMULWW
(
silk
_RSHIFT
(
w
[
k
],
maxRshifts_wxtra
-
corr_rshifts
[
k
]
),
d_Q14
[
k
]
),
2
)
);
/* Q( 18 - maxRshifts_wxtra ) */
}
m_Q12
=
silk_DIV32_varQ
(
wd
,
temp32
,
12
);
...
...
@@ -207,25 +207,25 @@ void silk_find_LTP_FIX(
for
(
k
=
0
;
k
<
nb_subfr
;
k
++
)
{
/* w_fix[ k ] from Q( 18 - corr_rshifts[ k ] ) to Q( 16 ) */
if
(
2
-
corr_rshifts
[
k
]
>
0
)
{
temp32
=
SKP
_RSHIFT
(
w
[
k
],
2
-
corr_rshifts
[
k
]
);
temp32
=
silk
_RSHIFT
(
w
[
k
],
2
-
corr_rshifts
[
k
]
);
}
else
{
temp32
=
SKP
_LSHIFT_SAT32
(
w
[
k
],
corr_rshifts
[
k
]
-
2
);
temp32
=
silk
_LSHIFT_SAT32
(
w
[
k
],
corr_rshifts
[
k
]
-
2
);
}
g_Q26
=
SKP
_MUL
(
SKP
_DIV32
(
g_Q26
=
silk
_MUL
(
silk
_DIV32
(
SILK_FIX_CONST
(
LTP_SMOOTHING
,
26
),
SKP
_RSHIFT
(
SILK_FIX_CONST
(
LTP_SMOOTHING
,
26
),
10
)
+
temp32
),
/* Q10 */
SKP
_LSHIFT_SAT32
(
SKP
_SUB_SAT32
(
(
opus_int32
)
m_Q12
,
SKP
_RSHIFT
(
d_Q14
[
k
],
2
)
),
4
)
);
/* Q16 */
silk
_RSHIFT
(
SILK_FIX_CONST
(
LTP_SMOOTHING
,
26
),
10
)
+
temp32
),
/* Q10 */
silk
_LSHIFT_SAT32
(
silk
_SUB_SAT32
(
(
opus_int32
)
m_Q12
,
silk
_RSHIFT
(
d_Q14
[
k
],
2
)
),
4
)
);
/* Q16 */
temp32
=
0
;
for
(
i
=
0
;
i
<
LTP_ORDER
;
i
++
)
{
delta_b_Q14
[
i
]
=
SKP
_max_16
(
b_Q14_ptr
[
i
],
1638
);
/* 1638_Q14 = 0.1_Q0 */
delta_b_Q14
[
i
]
=
silk
_max_16
(
b_Q14_ptr
[
i
],
1638
);
/* 1638_Q14 = 0.1_Q0 */
temp32
+=
delta_b_Q14
[
i
];
/* Q14 */
}
temp32
=
SKP
_DIV32
(
g_Q26
,
temp32
);
/* Q14->Q12 */
temp32
=
silk
_DIV32
(
g_Q26
,
temp32
);
/* Q14->Q12 */
for
(
i
=
0
;
i
<
LTP_ORDER
;
i
++
)
{
b_Q14_ptr
[
i
]
=
SKP
_LIMIT_32
(
(
opus_int32
)
b_Q14_ptr
[
i
]
+
SKP
_SMULWB
(
SKP
_LSHIFT_SAT32
(
temp32
,
4
),
delta_b_Q14
[
i
]
),
-
16000
,
28000
);
b_Q14_ptr
[
i
]
=
silk
_LIMIT_32
(
(
opus_int32
)
b_Q14_ptr
[
i
]
+
silk
_SMULWB
(
silk
_LSHIFT_SAT32
(
temp32
,
4
),
delta_b_Q14
[
i
]
),
-
16000
,
28000
);
}
b_Q14_ptr
+=
LTP_ORDER
;
}
...
...
@@ -240,6 +240,6 @@ void silk_fit_LTP(
opus_int
i
;
for
(
i
=
0
;
i
<
LTP_ORDER
;
i
++
)
{
LTP_coefs_Q14
[
i
]
=
(
opus_int16
)
SKP
_SAT16
(
SKP
_RSHIFT_ROUND
(
LTP_coefs_Q16
[
i
],
2
)
);
LTP_coefs_Q14
[
i
]
=
(
opus_int16
)
silk
_SAT16
(
silk
_RSHIFT_ROUND
(
LTP_coefs_Q16
[
i
],
2
)
);
}
}
silk/fixed/silk_find_pitch_lags_FIX.c
View file @
fb3a437c
...
...
@@ -55,7 +55,7 @@ void silk_find_pitch_lags_FIX(
buf_len
=
psEnc
->
sCmn
.
la_pitch
+
psEnc
->
sCmn
.
frame_length
+
psEnc
->
sCmn
.
ltp_mem_length
;
/* Safty check */
SKP
_assert
(
buf_len
>=
psEnc
->
sCmn
.
pitch_LPC_win_length
);
silk
_assert
(
buf_len
>=
psEnc
->
sCmn
.
pitch_LPC_win_length
);
x_buf
=
x
-
psEnc
->
sCmn
.
ltp_mem_length
;
...
...
@@ -73,31 +73,31 @@ void silk_find_pitch_lags_FIX(
/* Middle un - windowed samples */
Wsig_ptr
+=
psEnc
->
sCmn
.
la_pitch
;
x_buf_ptr
+=
psEnc
->
sCmn
.
la_pitch
;
SKP
_memcpy
(
Wsig_ptr
,
x_buf_ptr
,
(
psEnc
->
sCmn
.
pitch_LPC_win_length
-
SKP
_LSHIFT
(
psEnc
->
sCmn
.
la_pitch
,
1
)
)
*
sizeof
(
opus_int16
)
);
silk
_memcpy
(
Wsig_ptr
,
x_buf_ptr
,
(
psEnc
->
sCmn
.
pitch_LPC_win_length
-
silk
_LSHIFT
(
psEnc
->
sCmn
.
la_pitch
,
1
)
)
*
sizeof
(
opus_int16
)
);
/* Last LA_LTP samples */
Wsig_ptr
+=
psEnc
->
sCmn
.
pitch_LPC_win_length
-
SKP
_LSHIFT
(
psEnc
->
sCmn
.
la_pitch
,
1
);
x_buf_ptr
+=
psEnc
->
sCmn
.
pitch_LPC_win_length
-
SKP
_LSHIFT
(
psEnc
->
sCmn
.
la_pitch
,
1
);
Wsig_ptr
+=
psEnc
->
sCmn
.
pitch_LPC_win_length
-
silk
_LSHIFT
(
psEnc
->
sCmn
.
la_pitch
,
1
);
x_buf_ptr
+=
psEnc
->
sCmn
.
pitch_LPC_win_length
-
silk
_LSHIFT
(
psEnc
->
sCmn
.
la_pitch
,
1
);
silk_apply_sine_window
(
Wsig_ptr
,
x_buf_ptr
,
2
,
psEnc
->
sCmn
.
la_pitch
);
/* Calculate autocorrelation sequence */
silk_autocorr
(
auto_corr
,
&
scale
,
Wsig
,
psEnc
->
sCmn
.
pitch_LPC_win_length
,
psEnc
->
sCmn
.
pitchEstimationLPCOrder
+
1
);
/* Add white noise, as fraction of energy */
auto_corr
[
0
]
=
SKP
_SMLAWB
(
auto_corr
[
0
],
auto_corr
[
0
],
SILK_FIX_CONST
(
FIND_PITCH_WHITE_NOISE_FRACTION
,
16
)
)
+
1
;
auto_corr
[
0
]
=
silk
_SMLAWB
(
auto_corr
[
0
],
auto_corr
[
0
],
SILK_FIX_CONST
(
FIND_PITCH_WHITE_NOISE_FRACTION
,
16
)
)
+
1
;
/* Calculate the reflection coefficients using schur */
res_nrg
=
silk_schur
(
rc_Q15
,
auto_corr
,
psEnc
->
sCmn
.
pitchEstimationLPCOrder
);
/* Prediction gain */
psEncCtrl
->
predGain_Q16
=
silk_DIV32_varQ
(
auto_corr
[
0
],
SKP
_max_int
(
res_nrg
,
1
),
16
);
psEncCtrl
->
predGain_Q16
=
silk_DIV32_varQ
(
auto_corr
[
0
],
silk
_max_int
(
res_nrg
,
1
),
16
);
/* Convert reflection coefficients to prediction coefficients */
silk_k2a
(
A_Q24
,
rc_Q15
,
psEnc
->
sCmn
.
pitchEstimationLPCOrder
);
/* Convert From 32 bit Q24 to 16 bit Q12 coefs */
for
(
i
=
0
;
i
<
psEnc
->
sCmn
.
pitchEstimationLPCOrder
;
i
++
)
{
A_Q12
[
i
]
=
(
opus_int16
)
SKP
_SAT16
(
SKP
_RSHIFT
(
A_Q24
[
i
],
12
)
);
A_Q12
[
i
]
=
(
opus_int16
)
silk
_SAT16
(
silk
_RSHIFT
(
A_Q24
[
i
],
12
)
);
}
/* Do BWE */
...
...
@@ -111,11 +111,11 @@ void silk_find_pitch_lags_FIX(
if
(
psEnc
->
sCmn
.
indices
.
signalType
!=
TYPE_NO_VOICE_ACTIVITY
&&
psEnc
->
sCmn
.
first_frame_after_reset
==
0
)
{
/* Threshold for pitch estimator */
thrhld_Q15
=
SILK_FIX_CONST
(
0
.
6
,
15
);
thrhld_Q15
=
SKP
_SMLABB
(
thrhld_Q15
,
SILK_FIX_CONST
(
-
0
.
004
,
15
),
psEnc
->
sCmn
.
pitchEstimationLPCOrder
);
thrhld_Q15
=
SKP
_SMLABB
(
thrhld_Q15
,
SILK_FIX_CONST
(
-
0
.
1
,
7
),
psEnc
->
sCmn
.
speech_activity_Q8
);
thrhld_Q15
=
SKP
_SMLABB
(
thrhld_Q15
,
SILK_FIX_CONST
(
-
0
.
15
,
15
),
SKP
_RSHIFT
(
psEnc
->
sCmn
.
prevSignalType
,
1
)
);
thrhld_Q15
=
SKP
_SMLAWB
(
thrhld_Q15
,
SILK_FIX_CONST
(
-
0
.
1
,
16
),
psEnc
->
sCmn
.
input_tilt_Q15
);