Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
Opus
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Xiph.Org
Opus
Commits
c462ae92
Commit
c462ae92
authored
9 years ago
by
Koen Vos
Committed by
Jean-Marc Valin
8 years ago
Browse files
Options
Downloads
Patches
Plain Diff
NLSF_encode now also uses NLSF weights from table
parent
aa7e1748
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
silk/NLSF_encode.c
+10
-22
10 additions, 22 deletions
silk/NLSF_encode.c
with
10 additions
and
22 deletions
silk/NLSF_encode.c
+
10
−
22
View file @
c462ae92
...
@@ -39,7 +39,7 @@ opus_int32 silk_NLSF_encode( /* O Returns
...
@@ -39,7 +39,7 @@ opus_int32 silk_NLSF_encode( /* O Returns
opus_int8
*
NLSFIndices
,
/* I Codebook path vector [ LPC_ORDER + 1 ] */
opus_int8
*
NLSFIndices
,
/* I Codebook path vector [ LPC_ORDER + 1 ] */
opus_int16
*
pNLSF_Q15
,
/* I/O Quantized NLSF vector [ LPC_ORDER ] */
opus_int16
*
pNLSF_Q15
,
/* I/O Quantized NLSF vector [ LPC_ORDER ] */
const
silk_NLSF_CB_struct
*
psNLSF_CB
,
/* I Codebook object */
const
silk_NLSF_CB_struct
*
psNLSF_CB
,
/* I Codebook object */
const
opus_int16
*
pW_Q
W
,
/* I NLSF weight vector [ LPC_ORDER ] */
const
opus_int16
*
pW_Q
2
,
/* I NLSF weight vector [ LPC_ORDER ] */
const
opus_int
NLSF_mu_Q20
,
/* I Rate weight for the RD optimization */
const
opus_int
NLSF_mu_Q20
,
/* I Rate weight for the RD optimization */
const
opus_int
nSurvivors
,
/* I Max survivors after first stage */
const
opus_int
nSurvivors
,
/* I Max survivors after first stage */
const
opus_int
signalType
/* I Signal type: 0/1/2 */
const
opus_int
signalType
/* I Signal type: 0/1/2 */
...
@@ -47,18 +47,17 @@ opus_int32 silk_NLSF_encode( /* O Returns
...
@@ -47,18 +47,17 @@ opus_int32 silk_NLSF_encode( /* O Returns
{
{
opus_int
i
,
s
,
ind1
,
bestIndex
,
prob_Q8
,
bits_q7
;
opus_int
i
,
s
,
ind1
,
bestIndex
,
prob_Q8
,
bits_q7
;
opus_int32
W_tmp_Q9
,
ret
;
opus_int32
W_tmp_Q9
,
ret
;
VARDECL
(
opus_int32
,
err_Q2
6
);
VARDECL
(
opus_int32
,
err_Q2
4
);
VARDECL
(
opus_int32
,
RD_Q25
);
VARDECL
(
opus_int32
,
RD_Q25
);
VARDECL
(
opus_int
,
tempIndices1
);
VARDECL
(
opus_int
,
tempIndices1
);
VARDECL
(
opus_int8
,
tempIndices2
);
VARDECL
(
opus_int8
,
tempIndices2
);
opus_int16
res_Q15
[
MAX_LPC_ORDER
];
opus_int16
res_Q10
[
MAX_LPC_ORDER
];
opus_int16
res_Q10
[
MAX_LPC_ORDER
];
opus_int16
NLSF_tmp_Q15
[
MAX_LPC_ORDER
];
opus_int16
NLSF_tmp_Q15
[
MAX_LPC_ORDER
];
opus_int16
W_tmp_QW
[
MAX_LPC_ORDER
];
opus_int16
W_adj_Q5
[
MAX_LPC_ORDER
];
opus_int16
W_adj_Q5
[
MAX_LPC_ORDER
];
opus_uint8
pred_Q8
[
MAX_LPC_ORDER
];
opus_uint8
pred_Q8
[
MAX_LPC_ORDER
];
opus_int16
ec_ix
[
MAX_LPC_ORDER
];
opus_int16
ec_ix
[
MAX_LPC_ORDER
];
const
opus_uint8
*
pCB_element
,
*
iCDF_ptr
;
const
opus_uint8
*
pCB_element
,
*
iCDF_ptr
;
const
opus_int16
*
pCB_Wght_Q9
;
SAVE_STACK
;
SAVE_STACK
;
silk_assert
(
nSurvivors
<=
NLSF_VQ_MAX_SURVIVORS
);
silk_assert
(
nSurvivors
<=
NLSF_VQ_MAX_SURVIVORS
);
...
@@ -69,12 +68,12 @@ opus_int32 silk_NLSF_encode( /* O Returns
...
@@ -69,12 +68,12 @@ opus_int32 silk_NLSF_encode( /* O Returns
silk_NLSF_stabilize
(
pNLSF_Q15
,
psNLSF_CB
->
deltaMin_Q15
,
psNLSF_CB
->
order
);
silk_NLSF_stabilize
(
pNLSF_Q15
,
psNLSF_CB
->
deltaMin_Q15
,
psNLSF_CB
->
order
);
/* First stage: VQ */
/* First stage: VQ */
ALLOC
(
err_Q2
6
,
psNLSF_CB
->
nVectors
,
opus_int32
);
ALLOC
(
err_Q2
4
,
psNLSF_CB
->
nVectors
,
opus_int32
);
silk_NLSF_VQ
(
err_Q2
6
,
pNLSF_Q15
,
psNLSF_CB
->
CB1_NLSF_Q8
,
psNLSF_CB
->
CB1_Wght_Q9
,
psNLSF_CB
->
nVectors
,
psNLSF_CB
->
order
);
silk_NLSF_VQ
(
err_Q2
4
,
pNLSF_Q15
,
psNLSF_CB
->
CB1_NLSF_Q8
,
psNLSF_CB
->
CB1_Wght_Q9
,
psNLSF_CB
->
nVectors
,
psNLSF_CB
->
order
);
/* Sort the quantization errors */
/* Sort the quantization errors */
ALLOC
(
tempIndices1
,
nSurvivors
,
opus_int
);
ALLOC
(
tempIndices1
,
nSurvivors
,
opus_int
);
silk_insertion_sort_increasing
(
err_Q2
6
,
tempIndices1
,
psNLSF_CB
->
nVectors
,
nSurvivors
);
silk_insertion_sort_increasing
(
err_Q2
4
,
tempIndices1
,
psNLSF_CB
->
nVectors
,
nSurvivors
);
ALLOC
(
RD_Q25
,
nSurvivors
,
opus_int32
);
ALLOC
(
RD_Q25
,
nSurvivors
,
opus_int32
);
ALLOC
(
tempIndices2
,
nSurvivors
*
MAX_LPC_ORDER
,
opus_int8
);
ALLOC
(
tempIndices2
,
nSurvivors
*
MAX_LPC_ORDER
,
opus_int8
);
...
@@ -85,23 +84,12 @@ opus_int32 silk_NLSF_encode( /* O Returns
...
@@ -85,23 +84,12 @@ opus_int32 silk_NLSF_encode( /* O Returns
/* Residual after first stage */
/* Residual after first stage */
pCB_element
=
&
psNLSF_CB
->
CB1_NLSF_Q8
[
ind1
*
psNLSF_CB
->
order
];
pCB_element
=
&
psNLSF_CB
->
CB1_NLSF_Q8
[
ind1
*
psNLSF_CB
->
order
];
pCB_Wght_Q9
=
&
psNLSF_CB
->
CB1_Wght_Q9
[
ind1
*
psNLSF_CB
->
order
];
for
(
i
=
0
;
i
<
psNLSF_CB
->
order
;
i
++
)
{
for
(
i
=
0
;
i
<
psNLSF_CB
->
order
;
i
++
)
{
NLSF_tmp_Q15
[
i
]
=
silk_LSHIFT16
(
(
opus_int16
)
pCB_element
[
i
],
7
);
NLSF_tmp_Q15
[
i
]
=
silk_LSHIFT16
(
(
opus_int16
)
pCB_element
[
i
],
7
);
res_Q15
[
i
]
=
pNLSF_Q15
[
i
]
-
NLSF_tmp_Q15
[
i
];
W_tmp_Q9
=
pCB_Wght_Q9
[
i
];
}
res_Q10
[
i
]
=
(
opus_int16
)
silk_RSHIFT
(
silk_SMULBB
(
pNLSF_Q15
[
i
]
-
NLSF_tmp_Q15
[
i
],
W_tmp_Q9
),
14
);
W_adj_Q5
[
i
]
=
silk_DIV32_varQ
(
(
opus_int32
)
pW_Q2
[
i
],
silk_SMULBB
(
W_tmp_Q9
,
W_tmp_Q9
),
21
);
/* Weights from codebook vector */
silk_NLSF_VQ_weights_laroia
(
W_tmp_QW
,
NLSF_tmp_Q15
,
psNLSF_CB
->
order
);
/* Apply square-rooted weights */
for
(
i
=
0
;
i
<
psNLSF_CB
->
order
;
i
++
)
{
W_tmp_Q9
=
silk_SQRT_APPROX
(
silk_LSHIFT
(
(
opus_int32
)
W_tmp_QW
[
i
],
18
-
NLSF_W_Q
)
);
res_Q10
[
i
]
=
(
opus_int16
)
silk_RSHIFT
(
silk_SMULBB
(
res_Q15
[
i
],
W_tmp_Q9
),
14
);
}
/* Modify input weights accordingly */
for
(
i
=
0
;
i
<
psNLSF_CB
->
order
;
i
++
)
{
W_adj_Q5
[
i
]
=
silk_DIV32_16
(
silk_LSHIFT
(
(
opus_int32
)
pW_QW
[
i
],
5
),
W_tmp_QW
[
i
]
);
}
}
/* Unpack entropy table indices and predictor for current CB1 index */
/* Unpack entropy table indices and predictor for current CB1 index */
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment