Skip to content

Commit 70cd0d1

Browse files
committed
refactor: make silk_short2float_array safe
1 parent 3ad1abd commit 70cd0d1

File tree

4 files changed

+22
-21
lines changed

4 files changed

+22
-21
lines changed

src/silk/control_codec.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,9 +116,8 @@ unsafe fn silk_setup_resamplers(psEnc: *mut silk_encoder_state_FLP, fs_kHz: i32)
116116
&x_buf_API_fs_Hz[..api_buf_samples as usize],
117117
);
118118
silk_short2float_array(
119-
((*psEnc).x_buf).as_mut_ptr(),
120-
x_bufFIX.as_mut_ptr(),
121-
new_buf_samples,
119+
&mut (*psEnc).x_buf[..new_buf_samples as usize],
120+
&x_bufFIX[..new_buf_samples as usize],
122121
);
123122
}
124123
}

src/silk/float/SigProc_FLP.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ pub fn silk_float2short_array(out: &mut [i16], input: &[f32]) {
1717
}
1818

1919
#[inline]
20-
pub unsafe fn silk_short2float_array(out: *mut f32, in_0: *const i16, length: i32) {
21-
let mut k: i32 = 0;
22-
k = length - 1;
23-
while k >= 0 {
24-
*out.offset(k as isize) = *in_0.offset(k as isize) as f32;
25-
k -= 1;
20+
pub fn silk_short2float_array(out: &mut [f32], input: &[i16]) {
21+
let length = out.len();
22+
assert_eq!(length, input.len());
23+
24+
for k in (0..length).rev() {
25+
out[k] = input[k] as f32;
2626
}
2727
}
2828

src/silk/float/encode_frame_FLP.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,9 +153,14 @@ pub unsafe fn silk_encode_frame_FLP(
153153
(*psEnc).sCmn.frame_length,
154154
);
155155
silk_short2float_array(
156-
x_frame.offset((LA_SHAPE_MS * (*psEnc).sCmn.fs_kHz) as isize),
157-
((*psEnc).sCmn.inputBuf).as_mut_ptr().offset(1 as isize),
158-
(*psEnc).sCmn.frame_length,
156+
std::slice::from_raw_parts_mut(
157+
x_frame.offset((LA_SHAPE_MS * (*psEnc).sCmn.fs_kHz) as isize),
158+
(*psEnc).sCmn.frame_length as usize,
159+
),
160+
std::slice::from_raw_parts(
161+
((*psEnc).sCmn.inputBuf).as_mut_ptr().offset(1 as isize),
162+
(*psEnc).sCmn.frame_length as usize,
163+
),
159164
);
160165
i = 0;
161166
while i < 8 {

src/silk/float/pitch_analysis_core_FLP.rs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -125,9 +125,8 @@ pub unsafe fn silk_pitch_analysis_core_FLP(
125125
&frame_16_FIX[..frame_length as usize],
126126
);
127127
silk_short2float_array(
128-
frame_8kHz.as_mut_ptr(),
129-
frame_8_FIX.as_mut_ptr(),
130-
frame_length_8kHz,
128+
&mut frame_8kHz[..frame_length_8kHz as usize],
129+
&frame_8_FIX[..frame_length_8kHz as usize],
131130
);
132131
} else if Fs_kHz == 12 {
133132
let mut frame_12_FIX: [i16; 480] = [0; 480];
@@ -142,9 +141,8 @@ pub unsafe fn silk_pitch_analysis_core_FLP(
142141
&frame_12_FIX[..frame_length as usize],
143142
);
144143
silk_short2float_array(
145-
frame_8kHz.as_mut_ptr(),
146-
frame_8_FIX.as_mut_ptr(),
147-
frame_length_8kHz,
144+
&mut frame_8kHz[..frame_length_8kHz as usize],
145+
&frame_8_FIX[..frame_length_8kHz as usize],
148146
);
149147
} else {
150148
assert!(Fs_kHz == 8);
@@ -163,9 +161,8 @@ pub unsafe fn silk_pitch_analysis_core_FLP(
163161
);
164162
}
165163
silk_short2float_array(
166-
frame_4kHz.as_mut_ptr(),
167-
frame_4_FIX.as_mut_ptr(),
168-
frame_length_4kHz,
164+
&mut frame_4kHz[..frame_length_4kHz as usize],
165+
&frame_4_FIX[..frame_length_4kHz as usize],
169166
);
170167
i = frame_length_4kHz - 1;
171168
while i > 0 {

0 commit comments

Comments
 (0)