ffmpeg_the_third/codec/parameters/
borrowed.rs

1use std::marker::PhantomData;
2use std::ptr::NonNull;
3
4use crate::ffi::*;
5use crate::AsPtr;
6
7pub struct ParametersRef<'p> {
8    ptr: NonNull<AVCodecParameters>,
9    _marker: PhantomData<&'p AVCodecParameters>,
10}
11
12impl<'p> ParametersRef<'p> {
13    /// # Safety
14    ///
15    /// Ensure that
16    /// - `ptr` is either null or valid,
17    /// - the shared borrow represented by `ptr` follows Rust borrow rules and
18    /// - the lifetime of the returned struct is correctly bounded.
19    pub unsafe fn from_raw(ptr: *const AVCodecParameters) -> Option<Self> {
20        NonNull::new(ptr as *mut _).map(|ptr| Self {
21            ptr,
22            _marker: PhantomData,
23        })
24    }
25
26    /// Exposes a pointer to the contained [`AVCodecParameters`] for FFI purposes.
27    ///
28    /// This is guaranteed to be a non-null pointer.
29    pub fn as_ptr(&self) -> *const AVCodecParameters {
30        self.ptr.as_ptr()
31    }
32}
33
34impl<'p> AsPtr<AVCodecParameters> for ParametersRef<'p> {
35    fn as_ptr(&self) -> *const AVCodecParameters {
36        self.ptr.as_ptr()
37    }
38}