use core::cell::UnsafeCell;
use core::ffi::*;
use core::marker::{PhantomData, PhantomPinned};
use core::ptr::NonNull;
#[cfg(feature = "objc2")]
use objc2::__framework_prelude::*;
use objc2_core_foundation::*;
use crate::*;
pub const kCMBlockBufferNoErr: OSStatus = 0;
pub const kCMBlockBufferStructureAllocationFailedErr: OSStatus = -12700;
pub const kCMBlockBufferBlockAllocationFailedErr: OSStatus = -12701;
pub const kCMBlockBufferBadCustomBlockSourceErr: OSStatus = -12702;
pub const kCMBlockBufferBadOffsetParameterErr: OSStatus = -12703;
pub const kCMBlockBufferBadLengthParameterErr: OSStatus = -12704;
pub const kCMBlockBufferBadPointerParameterErr: OSStatus = -12705;
pub const kCMBlockBufferEmptyBBufErr: OSStatus = -12706;
pub const kCMBlockBufferUnallocatedBlockErr: OSStatus = -12707;
pub const kCMBlockBufferInsufficientSpaceErr: OSStatus = -12708;
pub type CMBlockBufferFlags = u32;
pub const kCMBlockBufferAssureMemoryNowFlag: CMBlockBufferFlags = 1 << 0;
pub const kCMBlockBufferAlwaysCopyDataFlag: CMBlockBufferFlags = 1 << 1;
pub const kCMBlockBufferDontOptimizeDepthFlag: CMBlockBufferFlags = 1 << 2;
pub const kCMBlockBufferPermitEmptyReferenceFlag: CMBlockBufferFlags = 1 << 3;
#[doc(alias = "CMBlockBufferRef")]
#[repr(C)]
pub struct CMBlockBuffer {
inner: [u8; 0],
_p: UnsafeCell<PhantomData<(*const UnsafeCell<()>, PhantomPinned)>>,
}
cf_type!(
unsafe impl CMBlockBuffer {}
);
#[cfg(feature = "objc2")]
cf_objc2_type!(
unsafe impl RefEncode<"OpaqueCMBlockBuffer"> for CMBlockBuffer {}
);
#[repr(C, packed(4))]
#[allow(unpredictable_function_pointer_comparisons)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct CMBlockBufferCustomBlockSource {
pub version: u32,
pub AllocateBlock: Option<unsafe extern "C-unwind" fn(*mut c_void, usize) -> *mut c_void>,
pub FreeBlock: Option<unsafe extern "C-unwind" fn(*mut c_void, NonNull<c_void>, usize)>,
pub refCon: *mut c_void,
}
#[cfg(feature = "objc2")]
unsafe impl Encode for CMBlockBufferCustomBlockSource {
const ENCODING: Encoding = Encoding::Struct(
"?",
&[
<u32>::ENCODING,
<Option<unsafe extern "C-unwind" fn(*mut c_void, usize) -> *mut c_void>>::ENCODING,
<Option<unsafe extern "C-unwind" fn(*mut c_void, NonNull<c_void>, usize)>>::ENCODING,
<*mut c_void>::ENCODING,
],
);
}
#[cfg(feature = "objc2")]
unsafe impl RefEncode for CMBlockBufferCustomBlockSource {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
pub const kCMBlockBufferCustomBlockSourceVersion: u32 = 0;
impl CMBlockBuffer {
#[doc(alias = "CMBlockBufferCreateEmpty")]
#[inline]
pub unsafe fn create_empty(
structure_allocator: Option<&CFAllocator>,
sub_block_capacity: u32,
flags: CMBlockBufferFlags,
block_buffer_out: NonNull<*mut CMBlockBuffer>,
) -> OSStatus {
extern "C-unwind" {
fn CMBlockBufferCreateEmpty(
structure_allocator: Option<&CFAllocator>,
sub_block_capacity: u32,
flags: CMBlockBufferFlags,
block_buffer_out: NonNull<*mut CMBlockBuffer>,
) -> OSStatus;
}
unsafe {
CMBlockBufferCreateEmpty(
structure_allocator,
sub_block_capacity,
flags,
block_buffer_out,
)
}
}
#[doc(alias = "CMBlockBufferCreateWithMemoryBlock")]
#[inline]
pub unsafe fn create_with_memory_block(
structure_allocator: Option<&CFAllocator>,
memory_block: *mut c_void,
block_length: usize,
block_allocator: Option<&CFAllocator>,
custom_block_source: *const CMBlockBufferCustomBlockSource,
offset_to_data: usize,
data_length: usize,
flags: CMBlockBufferFlags,
block_buffer_out: NonNull<*mut CMBlockBuffer>,
) -> OSStatus {
extern "C-unwind" {
fn CMBlockBufferCreateWithMemoryBlock(
structure_allocator: Option<&CFAllocator>,
memory_block: *mut c_void,
block_length: usize,
block_allocator: Option<&CFAllocator>,
custom_block_source: *const CMBlockBufferCustomBlockSource,
offset_to_data: usize,
data_length: usize,
flags: CMBlockBufferFlags,
block_buffer_out: NonNull<*mut CMBlockBuffer>,
) -> OSStatus;
}
unsafe {
CMBlockBufferCreateWithMemoryBlock(
structure_allocator,
memory_block,
block_length,
block_allocator,
custom_block_source,
offset_to_data,
data_length,
flags,
block_buffer_out,
)
}
}
#[doc(alias = "CMBlockBufferCreateWithBufferReference")]
#[inline]
pub unsafe fn create_with_buffer_reference(
structure_allocator: Option<&CFAllocator>,
buffer_reference: &CMBlockBuffer,
offset_to_data: usize,
data_length: usize,
flags: CMBlockBufferFlags,
block_buffer_out: NonNull<*mut CMBlockBuffer>,
) -> OSStatus {
extern "C-unwind" {
fn CMBlockBufferCreateWithBufferReference(
structure_allocator: Option<&CFAllocator>,
buffer_reference: &CMBlockBuffer,
offset_to_data: usize,
data_length: usize,
flags: CMBlockBufferFlags,
block_buffer_out: NonNull<*mut CMBlockBuffer>,
) -> OSStatus;
}
unsafe {
CMBlockBufferCreateWithBufferReference(
structure_allocator,
buffer_reference,
offset_to_data,
data_length,
flags,
block_buffer_out,
)
}
}
#[doc(alias = "CMBlockBufferCreateContiguous")]
#[inline]
pub unsafe fn create_contiguous(
structure_allocator: Option<&CFAllocator>,
source_buffer: &CMBlockBuffer,
block_allocator: Option<&CFAllocator>,
custom_block_source: *const CMBlockBufferCustomBlockSource,
offset_to_data: usize,
data_length: usize,
flags: CMBlockBufferFlags,
block_buffer_out: NonNull<*mut CMBlockBuffer>,
) -> OSStatus {
extern "C-unwind" {
fn CMBlockBufferCreateContiguous(
structure_allocator: Option<&CFAllocator>,
source_buffer: &CMBlockBuffer,
block_allocator: Option<&CFAllocator>,
custom_block_source: *const CMBlockBufferCustomBlockSource,
offset_to_data: usize,
data_length: usize,
flags: CMBlockBufferFlags,
block_buffer_out: NonNull<*mut CMBlockBuffer>,
) -> OSStatus;
}
unsafe {
CMBlockBufferCreateContiguous(
structure_allocator,
source_buffer,
block_allocator,
custom_block_source,
offset_to_data,
data_length,
flags,
block_buffer_out,
)
}
}
}
unsafe impl ConcreteType for CMBlockBuffer {
#[doc(alias = "CMBlockBufferGetTypeID")]
#[inline]
fn type_id() -> CFTypeID {
extern "C-unwind" {
fn CMBlockBufferGetTypeID() -> CFTypeID;
}
unsafe { CMBlockBufferGetTypeID() }
}
}
impl CMBlockBuffer {
#[doc(alias = "CMBlockBufferAppendMemoryBlock")]
#[inline]
pub unsafe fn append_memory_block(
&self,
memory_block: *mut c_void,
block_length: usize,
block_allocator: Option<&CFAllocator>,
custom_block_source: *const CMBlockBufferCustomBlockSource,
offset_to_data: usize,
data_length: usize,
flags: CMBlockBufferFlags,
) -> OSStatus {
extern "C-unwind" {
fn CMBlockBufferAppendMemoryBlock(
the_buffer: &CMBlockBuffer,
memory_block: *mut c_void,
block_length: usize,
block_allocator: Option<&CFAllocator>,
custom_block_source: *const CMBlockBufferCustomBlockSource,
offset_to_data: usize,
data_length: usize,
flags: CMBlockBufferFlags,
) -> OSStatus;
}
unsafe {
CMBlockBufferAppendMemoryBlock(
self,
memory_block,
block_length,
block_allocator,
custom_block_source,
offset_to_data,
data_length,
flags,
)
}
}
#[doc(alias = "CMBlockBufferAppendBufferReference")]
#[inline]
pub unsafe fn append_buffer_reference(
&self,
target_b_buf: &CMBlockBuffer,
offset_to_data: usize,
data_length: usize,
flags: CMBlockBufferFlags,
) -> OSStatus {
extern "C-unwind" {
fn CMBlockBufferAppendBufferReference(
the_buffer: &CMBlockBuffer,
target_b_buf: &CMBlockBuffer,
offset_to_data: usize,
data_length: usize,
flags: CMBlockBufferFlags,
) -> OSStatus;
}
unsafe {
CMBlockBufferAppendBufferReference(
self,
target_b_buf,
offset_to_data,
data_length,
flags,
)
}
}
#[doc(alias = "CMBlockBufferAssureBlockMemory")]
#[inline]
pub unsafe fn assure_block_memory(&self) -> OSStatus {
extern "C-unwind" {
fn CMBlockBufferAssureBlockMemory(the_buffer: &CMBlockBuffer) -> OSStatus;
}
unsafe { CMBlockBufferAssureBlockMemory(self) }
}
#[doc(alias = "CMBlockBufferAccessDataBytes")]
#[inline]
pub unsafe fn access_data_bytes(
&self,
offset: usize,
length: usize,
temporary_block: NonNull<c_void>,
returned_pointer_out: NonNull<*mut c_char>,
) -> OSStatus {
extern "C-unwind" {
fn CMBlockBufferAccessDataBytes(
the_buffer: &CMBlockBuffer,
offset: usize,
length: usize,
temporary_block: NonNull<c_void>,
returned_pointer_out: NonNull<*mut c_char>,
) -> OSStatus;
}
unsafe {
CMBlockBufferAccessDataBytes(
self,
offset,
length,
temporary_block,
returned_pointer_out,
)
}
}
#[doc(alias = "CMBlockBufferCopyDataBytes")]
#[inline]
pub unsafe fn copy_data_bytes(
&self,
offset_to_data: usize,
data_length: usize,
destination: NonNull<c_void>,
) -> OSStatus {
extern "C-unwind" {
fn CMBlockBufferCopyDataBytes(
the_source_buffer: &CMBlockBuffer,
offset_to_data: usize,
data_length: usize,
destination: NonNull<c_void>,
) -> OSStatus;
}
unsafe { CMBlockBufferCopyDataBytes(self, offset_to_data, data_length, destination) }
}
#[doc(alias = "CMBlockBufferReplaceDataBytes")]
#[inline]
pub unsafe fn replace_data_bytes(
source_bytes: NonNull<c_void>,
destination_buffer: &CMBlockBuffer,
offset_into_destination: usize,
data_length: usize,
) -> OSStatus {
extern "C-unwind" {
fn CMBlockBufferReplaceDataBytes(
source_bytes: NonNull<c_void>,
destination_buffer: &CMBlockBuffer,
offset_into_destination: usize,
data_length: usize,
) -> OSStatus;
}
unsafe {
CMBlockBufferReplaceDataBytes(
source_bytes,
destination_buffer,
offset_into_destination,
data_length,
)
}
}
#[doc(alias = "CMBlockBufferFillDataBytes")]
#[inline]
pub unsafe fn fill_data_bytes(
fill_byte: c_char,
destination_buffer: &CMBlockBuffer,
offset_into_destination: usize,
data_length: usize,
) -> OSStatus {
extern "C-unwind" {
fn CMBlockBufferFillDataBytes(
fill_byte: c_char,
destination_buffer: &CMBlockBuffer,
offset_into_destination: usize,
data_length: usize,
) -> OSStatus;
}
unsafe {
CMBlockBufferFillDataBytes(
fill_byte,
destination_buffer,
offset_into_destination,
data_length,
)
}
}
#[doc(alias = "CMBlockBufferGetDataPointer")]
#[inline]
pub unsafe fn data_pointer(
&self,
offset: usize,
length_at_offset_out: *mut usize,
total_length_out: *mut usize,
data_pointer_out: *mut *mut c_char,
) -> OSStatus {
extern "C-unwind" {
fn CMBlockBufferGetDataPointer(
the_buffer: &CMBlockBuffer,
offset: usize,
length_at_offset_out: *mut usize,
total_length_out: *mut usize,
data_pointer_out: *mut *mut c_char,
) -> OSStatus;
}
unsafe {
CMBlockBufferGetDataPointer(
self,
offset,
length_at_offset_out,
total_length_out,
data_pointer_out,
)
}
}
#[doc(alias = "CMBlockBufferGetDataLength")]
#[inline]
pub unsafe fn data_length(&self) -> usize {
extern "C-unwind" {
fn CMBlockBufferGetDataLength(the_buffer: &CMBlockBuffer) -> usize;
}
unsafe { CMBlockBufferGetDataLength(self) }
}
#[doc(alias = "CMBlockBufferIsRangeContiguous")]
#[inline]
pub unsafe fn is_range_contiguous(&self, offset: usize, length: usize) -> bool {
extern "C-unwind" {
fn CMBlockBufferIsRangeContiguous(
the_buffer: &CMBlockBuffer,
offset: usize,
length: usize,
) -> Boolean;
}
let ret = unsafe { CMBlockBufferIsRangeContiguous(self, offset, length) };
ret != 0
}
#[doc(alias = "CMBlockBufferIsEmpty")]
#[inline]
pub unsafe fn is_empty(&self) -> bool {
extern "C-unwind" {
fn CMBlockBufferIsEmpty(the_buffer: &CMBlockBuffer) -> Boolean;
}
let ret = unsafe { CMBlockBufferIsEmpty(self) };
ret != 0
}
}
extern "C-unwind" {
#[deprecated = "renamed to `CMBlockBuffer::create_empty`"]
pub fn CMBlockBufferCreateEmpty(
structure_allocator: Option<&CFAllocator>,
sub_block_capacity: u32,
flags: CMBlockBufferFlags,
block_buffer_out: NonNull<*mut CMBlockBuffer>,
) -> OSStatus;
}
extern "C-unwind" {
#[deprecated = "renamed to `CMBlockBuffer::create_with_memory_block`"]
pub fn CMBlockBufferCreateWithMemoryBlock(
structure_allocator: Option<&CFAllocator>,
memory_block: *mut c_void,
block_length: usize,
block_allocator: Option<&CFAllocator>,
custom_block_source: *const CMBlockBufferCustomBlockSource,
offset_to_data: usize,
data_length: usize,
flags: CMBlockBufferFlags,
block_buffer_out: NonNull<*mut CMBlockBuffer>,
) -> OSStatus;
}
extern "C-unwind" {
#[deprecated = "renamed to `CMBlockBuffer::create_with_buffer_reference`"]
pub fn CMBlockBufferCreateWithBufferReference(
structure_allocator: Option<&CFAllocator>,
buffer_reference: &CMBlockBuffer,
offset_to_data: usize,
data_length: usize,
flags: CMBlockBufferFlags,
block_buffer_out: NonNull<*mut CMBlockBuffer>,
) -> OSStatus;
}
extern "C-unwind" {
#[deprecated = "renamed to `CMBlockBuffer::create_contiguous`"]
pub fn CMBlockBufferCreateContiguous(
structure_allocator: Option<&CFAllocator>,
source_buffer: &CMBlockBuffer,
block_allocator: Option<&CFAllocator>,
custom_block_source: *const CMBlockBufferCustomBlockSource,
offset_to_data: usize,
data_length: usize,
flags: CMBlockBufferFlags,
block_buffer_out: NonNull<*mut CMBlockBuffer>,
) -> OSStatus;
}
extern "C-unwind" {
#[deprecated = "renamed to `CMBlockBuffer::append_memory_block`"]
pub fn CMBlockBufferAppendMemoryBlock(
the_buffer: &CMBlockBuffer,
memory_block: *mut c_void,
block_length: usize,
block_allocator: Option<&CFAllocator>,
custom_block_source: *const CMBlockBufferCustomBlockSource,
offset_to_data: usize,
data_length: usize,
flags: CMBlockBufferFlags,
) -> OSStatus;
}
extern "C-unwind" {
#[deprecated = "renamed to `CMBlockBuffer::append_buffer_reference`"]
pub fn CMBlockBufferAppendBufferReference(
the_buffer: &CMBlockBuffer,
target_b_buf: &CMBlockBuffer,
offset_to_data: usize,
data_length: usize,
flags: CMBlockBufferFlags,
) -> OSStatus;
}
extern "C-unwind" {
#[deprecated = "renamed to `CMBlockBuffer::assure_block_memory`"]
pub fn CMBlockBufferAssureBlockMemory(the_buffer: &CMBlockBuffer) -> OSStatus;
}
extern "C-unwind" {
#[deprecated = "renamed to `CMBlockBuffer::access_data_bytes`"]
pub fn CMBlockBufferAccessDataBytes(
the_buffer: &CMBlockBuffer,
offset: usize,
length: usize,
temporary_block: NonNull<c_void>,
returned_pointer_out: NonNull<*mut c_char>,
) -> OSStatus;
}
extern "C-unwind" {
#[deprecated = "renamed to `CMBlockBuffer::copy_data_bytes`"]
pub fn CMBlockBufferCopyDataBytes(
the_source_buffer: &CMBlockBuffer,
offset_to_data: usize,
data_length: usize,
destination: NonNull<c_void>,
) -> OSStatus;
}
extern "C-unwind" {
#[deprecated = "renamed to `CMBlockBuffer::replace_data_bytes`"]
pub fn CMBlockBufferReplaceDataBytes(
source_bytes: NonNull<c_void>,
destination_buffer: &CMBlockBuffer,
offset_into_destination: usize,
data_length: usize,
) -> OSStatus;
}
extern "C-unwind" {
#[deprecated = "renamed to `CMBlockBuffer::fill_data_bytes`"]
pub fn CMBlockBufferFillDataBytes(
fill_byte: c_char,
destination_buffer: &CMBlockBuffer,
offset_into_destination: usize,
data_length: usize,
) -> OSStatus;
}
extern "C-unwind" {
#[deprecated = "renamed to `CMBlockBuffer::data_pointer`"]
pub fn CMBlockBufferGetDataPointer(
the_buffer: &CMBlockBuffer,
offset: usize,
length_at_offset_out: *mut usize,
total_length_out: *mut usize,
data_pointer_out: *mut *mut c_char,
) -> OSStatus;
}
extern "C-unwind" {
#[deprecated = "renamed to `CMBlockBuffer::data_length`"]
pub fn CMBlockBufferGetDataLength(the_buffer: &CMBlockBuffer) -> usize;
}
#[deprecated = "renamed to `CMBlockBuffer::is_range_contiguous`"]
#[inline]
pub unsafe extern "C-unwind" fn CMBlockBufferIsRangeContiguous(
the_buffer: &CMBlockBuffer,
offset: usize,
length: usize,
) -> bool {
extern "C-unwind" {
fn CMBlockBufferIsRangeContiguous(
the_buffer: &CMBlockBuffer,
offset: usize,
length: usize,
) -> Boolean;
}
let ret = unsafe { CMBlockBufferIsRangeContiguous(the_buffer, offset, length) };
ret != 0
}
#[deprecated = "renamed to `CMBlockBuffer::is_empty`"]
#[inline]
pub unsafe extern "C-unwind" fn CMBlockBufferIsEmpty(the_buffer: &CMBlockBuffer) -> bool {
extern "C-unwind" {
fn CMBlockBufferIsEmpty(the_buffer: &CMBlockBuffer) -> Boolean;
}
let ret = unsafe { CMBlockBufferIsEmpty(the_buffer) };
ret != 0
}