Skip to main content

CpuBytes

Struct CpuBytes 

Source
pub struct CpuBytes { /* private fields */ }
Expand description

Flat CPU byte buffer. The raw ptr is non-owning; keep_alive pins whatever owns the backing allocation (an SDK decoder’s frame anchor, an aligned-buffer pool slot, a boxed expand buffer, …) so the bytes outlive every clone the caller hands off. Pass None only when the caller guarantees the allocation’s lifetime by other means (e.g. a test stack buffer that outlives the handle).

Implementations§

Source§

impl CpuBytes

Source

pub unsafe fn try_from_raw( ptr: *mut u8, size: usize, row_pitch: u32, format: PixelFormat, keep_alive: Option<KeepAlive>, ) -> Result<Self, InvalidHandleError>

Wrap a flat CPU byte buffer. Borrowing: the handle is stored non-owningly, this type has no Drop, and every obligation below extends to each Clone.

§Safety
  • ptr must point to size bytes that are valid to read and write — upload paths read the whole range, readback paths write it. Both ptr == null and size == 0 are rejected (InvalidHandleError::NullPointer / InvalidHandleError::ZeroSize) and are therefore not caller obligations; nothing else about the range is checkable here.
  • row_pitch must be the real row stride in bytes and format the real layout, such that row_pitch * <rows implied by format and the consumer's extent> fits inside size. Consumers index rows by row_pitch, so an over-stated pitch or format walks off the end of the allocation.
  • Aliasing. The pointer is stored as *mut u8 and handed to consumers that may write through it, while Clone hands out further copies. For the duration of this value and every clone the caller must not hold a &/&mut Rust reference to the same bytes, and must not let two consumers write the same range concurrently — CpuBytes provides no synchronisation of its own even though it is Send + Sync.
  • Lifetime. Nothing is retained and there is no Drop: the backing allocation is neither freed nor kept alive here. It must outlive this value and every clone, pinned either by the keep_alive anchor (an SDK decoder’s frame anchor, an aligned-buffer pool slot, a boxed expand buffer) or, when keep_alive is None, by the caller directly. A pool slot recycled while a clone survives is a use-after-free.
Source

pub fn ptr(&self) -> *mut u8

Source

pub fn size(&self) -> usize

Source

pub fn row_pitch(&self) -> u32

Source

pub fn format(&self) -> PixelFormat

Source

pub fn keep_alive(&self) -> Option<&KeepAlive>

Trait Implementations§

Source§

impl Clone for CpuBytes

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for CpuBytes

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Send for CpuBytes

Source§

impl Sync for CpuBytes

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> MaybeSend for T
where T: Send + ?Sized,

Source§

impl<T> MaybeSendSync for T
where T: Send + Sync + ?Sized,

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,