@@ -3,40 +3,35 @@ use crate::silk::define::MAX_LPC_STABILIZE_ITERATIONS;
3
3
use crate :: silk:: table_LSF_cos:: silk_LSFCosTab_FIX_Q12;
4
4
use crate :: silk:: LPC_fit :: silk_LPC_fit;
5
5
use crate :: silk:: LPC_inv_pred_gain :: silk_LPC_inverse_pred_gain_c;
6
+ use crate :: silk:: SigProc_FIX :: { silk_RSHIFT_ROUND64, SILK_MAX_ORDER_LPC } ;
6
7
7
8
pub const QA : i32 = 16 ;
9
+
10
+ /// helper function for NLSF2A(..)
11
+ ///
12
+ /// ```text
13
+ /// out O intermediate polynomial, QA [dd+1]
14
+ /// cLSF I vector of interleaved 2*cos(LSFs), QA [d]
15
+ /// dd I polynomial order (= 1/2 * filter order)
16
+ /// ```
8
17
#[ inline]
9
- unsafe fn silk_NLSF2A_find_poly ( out : * mut i32 , cLSF : * const i32 , dd : i32 ) {
10
- let mut k: i32 = 0 ;
11
- let mut n: i32 = 0 ;
12
- let mut ftmp: i32 = 0 ;
13
- * out. offset ( 0 as isize ) = ( ( 1 ) << 16 ) as i32 ;
14
- * out. offset ( 1 as isize ) = -* cLSF. offset ( 0 as isize ) ;
15
- k = 1 ;
16
- while k < dd {
17
- ftmp = * cLSF. offset ( ( 2 * k) as isize ) ;
18
- * out. offset ( ( k + 1 ) as isize ) = ( ( * out. offset ( ( k - 1 ) as isize ) as u32 ) << 1 ) as i32
19
- - ( if 16 == 1 {
20
- ( ftmp as i64 * * out. offset ( k as isize ) as i64 >> 1 )
21
- + ( ftmp as i64 * * out. offset ( k as isize ) as i64 & 1 )
22
- } else {
23
- ( ftmp as i64 * * out. offset ( k as isize ) as i64 >> 16 - 1 ) + 1 >> 1
24
- } ) as i32 ;
25
- n = k;
26
- while n > 1 {
27
- let ref mut fresh0 = * out. offset ( n as isize ) ;
28
- * fresh0 += * out. offset ( ( n - 2 ) as isize )
29
- - ( if 16 == 1 {
30
- ( ftmp as i64 * * out. offset ( ( n - 1 ) as isize ) as i64 >> 1 )
31
- + ( ftmp as i64 * * out. offset ( ( n - 1 ) as isize ) as i64 & 1 )
32
- } else {
33
- ( ftmp as i64 * * out. offset ( ( n - 1 ) as isize ) as i64 >> 16 - 1 ) + 1 >> 1
34
- } ) as i32 ;
35
- n -= 1 ;
18
+ fn silk_NLSF2A_find_poly ( out : & mut [ i32 ] , cLSF : & [ i32 ] ) {
19
+ let d = cLSF. len ( ) ;
20
+ let dd = d / 2 ;
21
+ assert_eq ! ( out. len( ) , dd + 1 ) ;
22
+
23
+ out[ 0 ] = 1 << QA ;
24
+ out[ 1 ] = -cLSF[ 0 ] ;
25
+
26
+ for k in 1 ..dd {
27
+ let ftmp = cLSF[ 2 * k] ; /* QA */
28
+ out[ k + 1 ] = out[ k - 1 ] * 2 - silk_RSHIFT_ROUND64 ( ftmp as i64 * out[ k] as i64 , QA ) as i32 ;
29
+
30
+ for n in ( 2 ..=k) . rev ( ) {
31
+ out[ n] += out[ n - 2 ] - silk_RSHIFT_ROUND64 ( ftmp as i64 * out[ n - 1 ] as i64 , QA ) as i32 ;
36
32
}
37
- let ref mut fresh1 = * out. offset ( 1 as isize ) ;
38
- * fresh1 -= ftmp;
39
- k += 1 ;
33
+
34
+ out[ 1 ] -= ftmp;
40
35
}
41
36
}
42
37
@@ -48,16 +43,16 @@ pub unsafe fn silk_NLSF2A(a_Q12: *mut i16, NLSF: *const i16, d: i32, _arch: i32)
48
43
let mut k: i32 = 0 ;
49
44
let mut i: i32 = 0 ;
50
45
let mut dd: i32 = 0 ;
51
- let mut cos_LSF_QA: [ i32 ; 24 ] = [ 0 ; 24 ] ;
52
- let mut P : [ i32 ; 13 ] = [ 0 ; 13 ] ;
53
- let mut Q : [ i32 ; 13 ] = [ 0 ; 13 ] ;
46
+ let mut cos_LSF_QA: [ i32 ; SILK_MAX_ORDER_LPC ] = [ 0 ; 24 ] ;
47
+ let mut P : [ i32 ; SILK_MAX_ORDER_LPC / 2 + 1 ] = [ 0 ; 13 ] ;
48
+ let mut Q : [ i32 ; SILK_MAX_ORDER_LPC / 2 + 1 ] = [ 0 ; 13 ] ;
54
49
let mut Ptmp : i32 = 0 ;
55
50
let mut Qtmp : i32 = 0 ;
56
51
let mut f_int: i32 = 0 ;
57
52
let mut f_frac: i32 = 0 ;
58
53
let mut cos_val: i32 = 0 ;
59
54
let mut delta: i32 = 0 ;
60
- let mut a32_QA1: [ i32 ; 24 ] = [ 0 ; 24 ] ;
55
+ let mut a32_QA1: [ i32 ; SILK_MAX_ORDER_LPC ] = [ 0 ; 24 ] ;
61
56
assert ! ( d == 10 || d == 16 ) ;
62
57
ordering = if d == 16 {
63
58
ordering16. as_ptr ( )
@@ -79,16 +74,8 @@ pub unsafe fn silk_NLSF2A(a_Q12: *mut i16, NLSF: *const i16, d: i32, _arch: i32)
79
74
k += 1 ;
80
75
}
81
76
dd = d >> 1 ;
82
- silk_NLSF2A_find_poly (
83
- P . as_mut_ptr ( ) ,
84
- & mut * cos_LSF_QA. as_mut_ptr ( ) . offset ( 0 as isize ) ,
85
- dd,
86
- ) ;
87
- silk_NLSF2A_find_poly (
88
- Q . as_mut_ptr ( ) ,
89
- & mut * cos_LSF_QA. as_mut_ptr ( ) . offset ( 1 as isize ) ,
90
- dd,
91
- ) ;
77
+ silk_NLSF2A_find_poly ( & mut P [ ..dd as usize + 1 ] , & cos_LSF_QA[ ..d as usize ] ) ;
78
+ silk_NLSF2A_find_poly ( & mut Q [ ..dd as usize + 1 ] , & cos_LSF_QA[ 1 ..] [ ..d as usize ] ) ;
92
79
k = 0 ;
93
80
while k < dd {
94
81
Ptmp = P [ ( k + 1 ) as usize ] + P [ k as usize ] ;
0 commit comments