core_media_sys/
buffer_queue.rs1use crate::libc::{c_void, size_t};
2use crate::core_foundation_sys::base::{OSStatus, Boolean, CFAllocatorRef, CFTypeID, CFTypeRef, CFComparisonResult};
3use crate::core_foundation_sys::dictionary::CFDictionaryRef;
4use crate::core_foundation_sys::string::CFStringRef;
5
6use crate::base::CMItemCount;
7use crate::sync::CMClockRef;
8use crate::time::CMTime;
9
10
11pub const kCMBufferQueueError_AllocationFailed: OSStatus = -12760;
12pub const kCMBufferQueueError_RequiredParameterMissing: OSStatus = -12761;
13pub const kCMBufferQueueError_InvalidCMBufferCallbacksStruct: OSStatus = -12762;
14pub const kCMBufferQueueError_EnqueueAfterEndOfData: OSStatus = -12763;
15pub const kCMBufferQueueError_QueueIsFull: OSStatus = -12764;
16pub const kCMBufferQueueError_BadTriggerDuration: OSStatus = -12765;
17pub const kCMBufferQueueError_CannotModifyQueueFromTriggerCallback: OSStatus = -12766;
18pub const kCMBufferQueueError_InvalidTriggerCondition: OSStatus = -12767;
19pub const kCMBufferQueueError_InvalidTriggerToken: OSStatus = -12768;
20pub const kCMBufferQueueError_InvalidBuffer: OSStatus = -12769;
21
22
23pub type CMBufferQueueRef = *mut c_void;
24pub type CMBufferRef = CFTypeRef;
25
26pub type CMBufferGetTimeCallback = extern "C" fn (buf: CMBufferRef, refcon: *mut c_void) -> CMTime;
27pub type CMBufferGetBooleanCallback = extern "C" fn (buf: CMBufferRef, refcon: *mut c_void) -> Boolean;
28pub type CMBufferCompareCallback = extern "C" fn (buf1: CMBufferRef,
29 buf2: CMBufferRef,
30 refcon: *mut c_void) -> CFComparisonResult;
31pub type CMBufferGetSizeCallback = extern "C" fn (buf: CMBufferRef, refcon: *mut c_void) -> size_t;
32
33
34#[repr(C)]
35#[derive(Debug, Copy, Clone)]
36pub struct CMBufferCallbacks {
37 pub version: u32,
38 pub refcon: *mut c_void,
39 pub getDecodeTimeStamp: CMBufferGetTimeCallback,
40 pub getPresentationTimeStamp: CMBufferGetTimeCallback,
41 pub getDuration: CMBufferGetTimeCallback,
42 pub isDataReady: CMBufferGetBooleanCallback,
43 pub compare: CMBufferCompareCallback,
44 pub dataBecameReadyNotification: CFStringRef,
45 pub getSize: CMBufferGetSizeCallback
46}
47
48
49pub type CMBufferQueueTriggerToken = *mut c_void;
50pub type CMBufferQueueTriggerCallback = extern "C" fn (triggerRefcon: *mut c_void,
51 triggerToken: CMBufferQueueTriggerToken);
52pub type CMBufferQueueTriggerCondition = i32;
53pub const kCMBufferQueueTrigger_WhenDurationBecomesLessThan: CMBufferQueueTriggerCondition = 1;
54pub const kCMBufferQueueTrigger_WhenDurationBecomesLessThanOrEqualTo: CMBufferQueueTriggerCondition = 2;
55pub const kCMBufferQueueTrigger_WhenDurationBecomesGreaterThan: CMBufferQueueTriggerCondition = 3;
56pub const kCMBufferQueueTrigger_WhenDurationBecomesGreaterThanOrEqualTo: CMBufferQueueTriggerCondition = 4;
57pub const kCMBufferQueueTrigger_WhenMinPresentationTimeStampChanges: CMBufferQueueTriggerCondition = 5;
58pub const kCMBufferQueueTrigger_WhenMaxPresentationTimeStampChanges: CMBufferQueueTriggerCondition = 6;
59pub const kCMBufferQueueTrigger_WhenDataBecomesReady: CMBufferQueueTriggerCondition = 7;
60pub const kCMBufferQueueTrigger_WhenEndOfDataReached: CMBufferQueueTriggerCondition = 8;
61pub const kCMBufferQueueTrigger_WhenReset: CMBufferQueueTriggerCondition = 9;
62pub const kCMBufferQueueTrigger_WhenBufferCountBecomesLessThan: CMBufferQueueTriggerCondition = 10;
63pub const kCMBufferQueueTrigger_WhenBufferCountBecomesGreaterThan: CMBufferQueueTriggerCondition = 11;
64pub const kCMBufferQueueTrigger_WhenDurationBecomesGreaterThanOrEqualToAndBufferCountBecomesGreaterThan: CMBufferQueueTriggerCondition = 12;
65
66pub type CMBufferValidationCallback = extern "C" fn (queue: CMBufferQueueRef,
67 buf: CMBufferRef,
68 validationRefCon: *mut c_void) -> OSStatus;
69
70
71extern "C" {
72 pub fn CMBufferQueueGetCallbacksForUnsortedSampleBuffers() -> *const CMBufferCallbacks;
73 pub fn CMBufferQueueGetCallbacksForSampleBuffersSortedByOutputPTS() -> *const CMBufferCallbacks;
74 pub fn CMBufferQueueCreate(allocator: CFAllocatorRef,
75 capacity: CMItemCount,
76 callbacks: *const CMBufferCallbacks,
77 queueOut: *mut CMBufferQueueRef) -> OSStatus;
78 pub fn CMBufferQueueGetTypeID() -> CFTypeID;
79 pub fn CMBufferQueueEnqueue(queue: CMBufferQueueRef,
80 buf: CMBufferRef) -> OSStatus;
81 pub fn CMBufferQueueDequeueAndRetain(queue: CMBufferQueueRef) -> CMBufferRef;
82 pub fn CMBufferQueueDequeueIfDataReadyAndRetain(queue: CMBufferQueueRef) -> CMBufferRef;
83 pub fn CMBufferQueueGetHead(queue: CMBufferQueueRef) -> CMBufferRef;
84 pub fn CMBufferQueueIsEmpty(queue: CMBufferQueueRef) -> Boolean;
85 pub fn CMBufferQueueMarkEndOfData(queue: CMBufferQueueRef) -> OSStatus;
86 pub fn CMBufferQueueContainsEndOfData(queue: CMBufferQueueRef) -> Boolean;
87 pub fn CMBufferQueueIsAtEndOfData(queue: CMBufferQueueRef) -> Boolean;
88 pub fn CMBufferQueueReset(queue: CMBufferQueueRef) -> OSStatus;
89 pub fn CMBufferQueueResetWithCallback(queue: CMBufferQueueRef,
90 callback: extern "C" fn (buffer: CMBufferRef, refcon: *mut c_void),
91 refcon: *mut c_void) -> OSStatus;
92 pub fn CMBufferQueueGetBufferCount(queue: CMBufferQueueRef) -> CMItemCount;
93 pub fn CMBufferQueueGetDuration(queue: CMBufferQueueRef) -> CMTime;
94 pub fn CMBufferQueueGetMinDecodeTimeStamp(queue: CMBufferQueueRef) -> CMTime;
95 pub fn CMBufferQueueGetFirstDecodeTimeStamp(queue: CMBufferQueueRef) -> CMTime;
96 pub fn CMBufferQueueGetMinPresentationTimeStamp(queue: CMBufferQueueRef) -> CMTime;
97 pub fn CMBufferQueueGetFirstPresentationTimeStamp(queue: CMBufferQueueRef) -> CMTime;
98 pub fn CMBufferQueueGetMaxPresentationTimeStamp(queue: CMBufferQueueRef) -> CMTime;
99 pub fn CMBufferQueueGetEndPresentationTimeStamp(queue: CMBufferQueueRef) -> CMTime;
100 pub fn CMBufferQueueGetTotalSize(queue: CMBufferQueueRef) -> size_t;
101
102
103 pub fn CMBufferQueueInstallTrigger(queue: CMBufferQueueRef,
104 triggerCallback: CMBufferQueueTriggerCallback,
105 triggerRefcon: *mut c_void,
106 triggerCondition: CMBufferQueueTriggerCondition,
107 triggerTime: CMTime,
108 triggerTokenOut: *mut CMBufferQueueTriggerToken) -> OSStatus;
109 pub fn CMBufferQueueInstallTriggerWithIntegerThreshold(queue: CMBufferQueueRef,
110 triggerCallback: CMBufferQueueTriggerCallback,
111 triggerRefcon: *mut c_void,
112 triggerCondition: CMBufferQueueTriggerCondition,
113 triggerThreshold: CMItemCount,
114 triggerTokenOut: *mut CMBufferQueueTriggerToken) -> OSStatus;
115 pub fn CMBufferQueueRemoveTrigger(queue: CMBufferQueueRef,
116 triggerToken: CMBufferQueueTriggerToken) -> OSStatus;
117 pub fn CMBufferQueueTestTrigger(queue: CMBufferQueueRef,
118 triggerToken: CMBufferQueueTriggerToken) -> Boolean;
119 pub fn CMBufferQueueCallForEachBuffer(queue: CMBufferQueueRef,
120 callback: extern "C" fn (buffer: CMBufferRef,
121 refcon: *mut c_void) -> OSStatus,
122 refcon: *mut c_void) -> OSStatus;
123
124
125 pub fn CMBufferQueueSetValidationCallback(queue: CMBufferQueueRef,
126 validationCallback: CMBufferValidationCallback,
127 validationRefCon: *mut c_void) -> OSStatus;
128}