audio-buffer: Don't store whether unmapping is necessary in AudioBufferRef

This is already stored as part of the enum discriminant.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/merge_requests/1712>
This commit is contained in:
Sebastian Dröge 2025-04-10 15:54:38 +03:00
parent 56a6eb2146
commit 10b66eda23

View file

@ -151,7 +151,6 @@ impl<T> AudioBuffer<T> {
pub fn as_audio_buffer_ref(&self) -> AudioBufferRef<&gst::BufferRef> { pub fn as_audio_buffer_ref(&self) -> AudioBufferRef<&gst::BufferRef> {
AudioBufferRef { AudioBufferRef {
audio_buffer: AudioBufferPtr::Borrowed(ptr::NonNull::from(&*self.audio_buffer)), audio_buffer: AudioBufferPtr::Borrowed(ptr::NonNull::from(&*self.audio_buffer)),
unmap: false,
phantom: PhantomData, phantom: PhantomData,
} }
} }
@ -279,7 +278,6 @@ impl AudioBuffer<Writable> {
pub fn as_mut_audio_buffer_ref(&mut self) -> AudioBufferRef<&mut gst::BufferRef> { pub fn as_mut_audio_buffer_ref(&mut self) -> AudioBufferRef<&mut gst::BufferRef> {
AudioBufferRef { AudioBufferRef {
audio_buffer: AudioBufferPtr::Borrowed(ptr::NonNull::from(&mut *self.audio_buffer)), audio_buffer: AudioBufferPtr::Borrowed(ptr::NonNull::from(&mut *self.audio_buffer)),
unmap: false,
phantom: PhantomData, phantom: PhantomData,
} }
} }
@ -292,6 +290,7 @@ impl AudioBuffer<Writable> {
#[derive(Debug)] #[derive(Debug)]
enum AudioBufferPtr { enum AudioBufferPtr {
// Has to be boxed because it contains self-references
Owned(Box<ffi::GstAudioBuffer>), Owned(Box<ffi::GstAudioBuffer>),
Borrowed(ptr::NonNull<ffi::GstAudioBuffer>), Borrowed(ptr::NonNull<ffi::GstAudioBuffer>),
} }
@ -319,9 +318,7 @@ impl ops::DerefMut for AudioBufferPtr {
} }
pub struct AudioBufferRef<T> { pub struct AudioBufferRef<T> {
// Has to be boxed because it contains self-references
audio_buffer: AudioBufferPtr, audio_buffer: AudioBufferPtr,
unmap: bool,
phantom: PhantomData<T>, phantom: PhantomData<T>,
} }
@ -456,7 +453,6 @@ impl<'a> AudioBufferRef<&'a gst::BufferRef> {
audio_buffer: AudioBufferPtr::Borrowed(ptr::NonNull::new_unchecked( audio_buffer: AudioBufferPtr::Borrowed(ptr::NonNull::new_unchecked(
audio_buffer as *mut _, audio_buffer as *mut _,
)), )),
unmap: false,
phantom: PhantomData, phantom: PhantomData,
}) })
} }
@ -484,7 +480,6 @@ impl<'a> AudioBufferRef<&'a gst::BufferRef> {
} else { } else {
Ok(Self { Ok(Self {
audio_buffer: AudioBufferPtr::Owned(audio_buffer), audio_buffer: AudioBufferPtr::Owned(audio_buffer),
unmap: true,
phantom: PhantomData, phantom: PhantomData,
}) })
} }
@ -504,7 +499,6 @@ impl<'a> AudioBufferRef<&'a mut gst::BufferRef> {
Borrowed::new(Self { Borrowed::new(Self {
audio_buffer: AudioBufferPtr::Borrowed(ptr::NonNull::new_unchecked(audio_buffer)), audio_buffer: AudioBufferPtr::Borrowed(ptr::NonNull::new_unchecked(audio_buffer)),
unmap: false,
phantom: PhantomData, phantom: PhantomData,
}) })
} }
@ -532,7 +526,6 @@ impl<'a> AudioBufferRef<&'a mut gst::BufferRef> {
} else { } else {
Ok(Self { Ok(Self {
audio_buffer: AudioBufferPtr::Owned(audio_buffer), audio_buffer: AudioBufferPtr::Owned(audio_buffer),
unmap: true,
phantom: PhantomData, phantom: PhantomData,
}) })
} }
@ -594,7 +587,7 @@ impl<T> Drop for AudioBufferRef<T> {
#[inline] #[inline]
fn drop(&mut self) { fn drop(&mut self) {
unsafe { unsafe {
if self.unmap { if matches!(self.audio_buffer, AudioBufferPtr::Owned(..)) {
ffi::gst_audio_buffer_unmap(&mut *self.audio_buffer); ffi::gst_audio_buffer_unmap(&mut *self.audio_buffer);
} }
} }