From 447b04737a13866a3d39961dbb3688bde8992d65 Mon Sep 17 00:00:00 2001 From: Tage Johansson Date: Tue, 14 Jun 2022 10:49:57 +0200 Subject: [PATCH] Fix incorrect sizes for plane and data slices for audio frames. --- src/util/frame/audio.rs | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/src/util/frame/audio.rs b/src/util/frame/audio.rs index 9c9a6717..2f79c0b6 100644 --- a/src/util/frame/audio.rs +++ b/src/util/frame/audio.rs @@ -144,7 +144,18 @@ impl Audio { panic!("unsupported type"); } - unsafe { slice::from_raw_parts((*self.as_ptr()).data[index] as *const T, self.samples()) } + if self.is_planar() { + unsafe { + slice::from_raw_parts((*self.as_ptr()).data[index] as *const T, self.samples()) + } + } else { + unsafe { + slice::from_raw_parts( + (*self.as_ptr()).data[0] as *const T, + self.samples() * usize::from(self.channels()), + ) + } + } } #[inline] @@ -157,8 +168,20 @@ impl Audio { panic!("unsupported type"); } - unsafe { - slice::from_raw_parts_mut((*self.as_mut_ptr()).data[index] as *mut T, self.samples()) + if self.is_planar() { + unsafe { + slice::from_raw_parts_mut( + (*self.as_mut_ptr()).data[index] as *mut T, + self.samples(), + ) + } + } else { + unsafe { + slice::from_raw_parts_mut( + (*self.as_mut_ptr()).data[0] as *mut T, + self.samples() * usize::from(self.channels()), + ) + } } } @@ -171,7 +194,7 @@ impl Audio { unsafe { slice::from_raw_parts( (*self.as_ptr()).data[index], - (*self.as_ptr()).linesize[index] as usize, + (*self.as_ptr()).linesize[0] as usize, ) } } @@ -185,7 +208,7 @@ impl Audio { unsafe { slice::from_raw_parts_mut( (*self.as_mut_ptr()).data[index], - (*self.as_ptr()).linesize[index] as usize, + (*self.as_ptr()).linesize[0] as usize, ) } }