audiofx: Fix Nightly dangerous_implicit_autorefs, part 2

Skip using raw pointers altogether.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2291>
This commit is contained in:
L. E. Segovia 2025-06-16 13:21:45 -03:00
parent c74d859490
commit 7d3668a08a

View file

@ -474,10 +474,22 @@ impl State {
// Safety: Index ranges are checked below and both slices from buf are
// guaranteed to be non-overlapping (210ms limiter_buf difference).
let (buf_read, buf_write, limiter_buf) = unsafe {
let buf = &mut &mut *self.buf as *mut &mut [f64];
let buf_read = (&(*buf)).get_unchecked(self.buf_index..(self.buf_index + channels));
let buf_write = (&mut (*buf))
.get_unchecked_mut(self.prev_buf_index..(self.prev_buf_index + channels));
let (buf_read, buf_write) = {
let (a1, a2) = self.buf.split_at_mut_unchecked(self.buf_index);
let (buf_read, after_buf_read) = a2.split_at_mut_unchecked(channels);
let buf_write = if self.prev_buf_index < self.buf_index {
// Non-overlapping guarantee
&mut a1[self.prev_buf_index..self.prev_buf_index + channels]
} else {
// Split happens at buf_index + channels
let idx = self.prev_buf_index - (self.buf_index + channels);
&mut after_buf_read[idx..idx + channels]
};
// Seal the read buffer
(&*buf_read, buf_write)
};
let limiter_buf = self
.limiter_buf
.get_unchecked_mut(self.limiter_buf_index..(self.limiter_buf_index + channels));