core_media_sys/
block_buffer.rs1use crate::libc::{c_char, c_void, size_t};
2use crate::core_foundation_sys::base::{OSStatus, Boolean, CFAllocatorRef, CFTypeID, CFTypeRef};
3use crate::core_foundation_sys::dictionary::CFDictionaryRef;
4use crate::core_foundation_sys::string::CFStringRef;
5
6use crate::sync::CMClockRef;
7
8pub const kCMBlockBufferNoErr: OSStatus = 0;
9pub const kCMBlockBufferStructureAllocationFailedErr: OSStatus = -12700;
10pub const kCMBlockBufferBlockAllocationFailedErr: OSStatus = -12701;
11pub const kCMBlockBufferBadCustomBlockSourceErr: OSStatus = -12702;
12pub const kCMBlockBufferBadOffsetParameterErr: OSStatus = -12703;
13pub const kCMBlockBufferBadLengthParameterErr: OSStatus = -12704;
14pub const kCMBlockBufferBadPointerParameterErr: OSStatus = -12705;
15pub const kCMBlockBufferEmptyBBufErr: OSStatus = -12706;
16pub const kCMBlockBufferUnallocatedBlockErr: OSStatus = -12707;
17pub const kCMBlockBufferInsufficientSpaceErr: OSStatus = -12708;
18
19
20pub type CMBlockBufferFlags = u32;
21
22pub const kCMBlockBufferAssureMemoryNowFlag: CMBlockBufferFlags = 1<<0;
23pub const kCMBlockBufferAlwaysCopyDataFlag: CMBlockBufferFlags = 1<<1;
24pub const kCMBlockBufferDontOptimizeDepthFlag: CMBlockBufferFlags = 1<<2;
25pub const kCMBlockBufferPermitEmptyReferenceFlag: CMBlockBufferFlags = 1<<3;
26
27pub type CMBlockBufferRef = CFTypeRef;
28
29#[repr(C)]
30#[allow(missing_copy_implementations)]
31#[derive(Debug, Copy, Clone)]
32pub struct CMBlockBufferCustomBlockSource {
33 pub version: u32,
34 pub AllocateBlock: extern "C" fn(refCon: *mut c_void, sizeInBytes: size_t) -> *mut c_void,
35 pub FreeBlock: extern "C" fn(refCon: *mut c_void, doomedMemoryBlock: *mut c_void, sizeInBytes: size_t),
36 pub refCon: *mut c_void,
37}
38
39pub const kCMBlockBufferCustomBlockSourceVersion: u32 = 0;
40
41
42extern "C" {
43 pub fn CMBlockBufferCreateEmpty(structureAllocator: CFAllocatorRef,
44 subBlockCapacity: u32,
45 flags: CMBlockBufferFlags,
46 newBBufOut: *mut CMBlockBufferRef) -> OSStatus;
47 pub fn CMBlockBufferCreateWithMemoryBlock(structureAllocator: CFAllocatorRef,
48 memoryBlock: *mut c_void,
49 blockLength: size_t,
50 blockAllocator: CFAllocatorRef,
51 customBlockSource: *const CMBlockBufferCustomBlockSource,
52 offsetToData: size_t,
53 dataLength: size_t,
54 flags: CMBlockBufferFlags,
55 newBBufOut: *mut CMBlockBufferRef)
56 -> OSStatus;
57 pub fn CMBlockBufferCreateWithBufferReference(structureAllocator: CFAllocatorRef,
58 targetBuffer: CMBlockBufferRef,
59 offsetToData: size_t,
60 dataLength: size_t,
61 flags: CMBlockBufferFlags,
62 newBBufOut: *mut CMBlockBufferRef) -> OSStatus;
63 pub fn CMBlockBufferCreateContiguous(structureAllocator: CFAllocatorRef,
64 sourceBuffer: CMBlockBufferRef,
65 blockAllocator: CFAllocatorRef,
66 customBlockSource: *const CMBlockBufferCustomBlockSource,
67 offsetToData: size_t,
68 dataLength: size_t,
69 flags: CMBlockBufferFlags,
70 newBBufOut: *mut CMBlockBufferRef) -> OSStatus;
71 pub fn CMBlockBufferGetTypeID() -> CFTypeID;
72 pub fn CMBlockBufferAppendMemoryBlock(theBuffer: CMBlockBufferRef,
73 memoryBlock: *mut c_void,
74 blockLength: size_t,
75 blockAllocator: CFAllocatorRef,
76 customBlockSource: *const CMBlockBufferCustomBlockSource,
77 offsetToData: size_t,
78 dataLength: size_t,
79 flags: CMBlockBufferFlags) -> OSStatus;
80 pub fn CMBlockBufferAppendBufferReference(theBuffer: CMBlockBufferRef,
81 targetBBuf: CMBlockBufferRef,
82 offsetToData: size_t,
83 dataLength: size_t,
84 flags: CMBlockBufferFlags) -> OSStatus;
85 pub fn CMBlockBufferAssureBlockMemory(theBuffer: CMBlockBufferRef) -> OSStatus;
86 pub fn CMBlockBufferAccessDataBytes(theBuffer: CMBlockBufferRef,
87 offset: size_t,
88 length: size_t,
89 temporaryBlock: *mut c_void,
90 returnedPointer: *mut c_char) -> OSStatus;
91 pub fn CMBlockBufferCopyDataBytes(theSourceBuffer: CMBlockBufferRef,
92 offsetToData: size_t,
93 dataLength: size_t,
94 destination: *mut c_void) -> OSStatus;
95 pub fn CMBlockBufferReplaceDataBytes(sourceBytes: *const c_void,
96 destinationBuffer: CMBlockBufferRef,
97 offsetIntoDestination: size_t,
98 dataLength: size_t) -> OSStatus;
99 pub fn CMBlockBufferFillDataBytes(fillByte: c_char,
100 destinationBuffer: CMBlockBufferRef,
101 offsetIntoDestination: size_t,
102 dataLength: size_t) -> OSStatus;
103 pub fn CMBlockBufferGetDataPointer(theBuffer: CMBlockBufferRef,
104 offset: size_t,
105 lengthAtOffset: *mut size_t,
106 totalLength: *mut size_t,
107 dataPointer: *mut c_char) -> OSStatus;
108 pub fn CMBlockBufferGetDataLength(theBuffer: CMBlockBufferRef) -> size_t;
109 pub fn CMBlockBufferIsRangeContiguous(theBuffer: CMBlockBufferRef,
110 offset: size_t,
111 length: size_t) -> Boolean;
112 pub fn CMBlockBufferIsEmpty(theBuffer: CMBlockBufferRef) -> Boolean;
113}