core_media_sys/
block_buffer.rs

1use 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}