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 kCMBufferQueueError_AllocationFailed: OSStatus = -12760;
pub const kCMBufferQueueError_RequiredParameterMissing: OSStatus = -12761;
pub const kCMBufferQueueError_InvalidCMBufferCallbacksStruct: OSStatus = -12762;
pub const kCMBufferQueueError_EnqueueAfterEndOfData: OSStatus = -12763;
pub const kCMBufferQueueError_QueueIsFull: OSStatus = -12764;
pub const kCMBufferQueueError_BadTriggerDuration: OSStatus = -12765;
pub const kCMBufferQueueError_CannotModifyQueueFromTriggerCallback: OSStatus = -12766;
pub const kCMBufferQueueError_InvalidTriggerCondition: OSStatus = -12767;
pub const kCMBufferQueueError_InvalidTriggerToken: OSStatus = -12768;
pub const kCMBufferQueueError_InvalidBuffer: OSStatus = -12769;
#[doc(alias = "CMBufferQueueRef")]
#[repr(C)]
pub struct CMBufferQueue {
inner: [u8; 0],
_p: UnsafeCell<PhantomData<(*const UnsafeCell<()>, PhantomPinned)>>,
}
cf_type!(
unsafe impl CMBufferQueue {}
);
#[cfg(feature = "objc2")]
cf_objc2_type!(
unsafe impl RefEncode<"opaqueCMBufferQueue"> for CMBufferQueue {}
);
#[doc(alias = "CMBufferRef")]
pub type CMBuffer = CFType;
#[cfg(feature = "CMTime")]
pub type CMBufferGetTimeCallback =
Option<unsafe extern "C-unwind" fn(NonNull<CMBuffer>, *mut c_void) -> CMTime>;
#[cfg(all(feature = "CMTime", feature = "block2"))]
pub type CMBufferGetTimeHandler = *mut block2::DynBlock<dyn Fn(NonNull<CMBuffer>) -> CMTime>;
pub type CMBufferGetBooleanCallback =
Option<unsafe extern "C-unwind" fn(NonNull<CMBuffer>, *mut c_void) -> Boolean>;
#[cfg(feature = "block2")]
pub type CMBufferGetBooleanHandler = *mut block2::DynBlock<dyn Fn(NonNull<CMBuffer>) -> Boolean>;
pub type CMBufferCompareCallback = Option<
unsafe extern "C-unwind" fn(
NonNull<CMBuffer>,
NonNull<CMBuffer>,
*mut c_void,
) -> CFComparisonResult,
>;
#[cfg(feature = "block2")]
pub type CMBufferCompareHandler =
*mut block2::DynBlock<dyn Fn(NonNull<CMBuffer>, NonNull<CMBuffer>) -> CFComparisonResult>;
pub type CMBufferGetSizeCallback =
Option<unsafe extern "C-unwind" fn(NonNull<CMBuffer>, *mut c_void) -> usize>;
#[cfg(feature = "block2")]
pub type CMBufferGetSizeHandler = *mut block2::DynBlock<dyn Fn(NonNull<CMBuffer>) -> usize>;
#[cfg(feature = "CMTime")]
#[repr(C, packed(4))]
#[allow(unpredictable_function_pointer_comparisons)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct CMBufferCallbacks {
pub version: u32,
pub refcon: *mut c_void,
pub getDecodeTimeStamp: CMBufferGetTimeCallback,
pub getPresentationTimeStamp: CMBufferGetTimeCallback,
pub getDuration: CMBufferGetTimeCallback,
pub isDataReady: CMBufferGetBooleanCallback,
pub compare: CMBufferCompareCallback,
pub dataBecameReadyNotification: *const CFString,
pub getSize: CMBufferGetSizeCallback,
}
#[cfg(all(feature = "CMTime", feature = "objc2"))]
unsafe impl Encode for CMBufferCallbacks {
const ENCODING: Encoding = Encoding::Struct(
"?",
&[
<u32>::ENCODING,
<*mut c_void>::ENCODING,
<CMBufferGetTimeCallback>::ENCODING,
<CMBufferGetTimeCallback>::ENCODING,
<CMBufferGetTimeCallback>::ENCODING,
<CMBufferGetBooleanCallback>::ENCODING,
<CMBufferCompareCallback>::ENCODING,
<*const CFString>::ENCODING,
<CMBufferGetSizeCallback>::ENCODING,
],
);
}
#[cfg(all(feature = "CMTime", feature = "objc2"))]
unsafe impl RefEncode for CMBufferCallbacks {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[cfg(all(feature = "CMTime", feature = "block2"))]
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct CMBufferHandlers {
pub version: usize,
pub getDecodeTimeStamp: CMBufferGetTimeHandler,
pub getPresentationTimeStamp: CMBufferGetTimeHandler,
pub getDuration: CMBufferGetTimeHandler,
pub isDataReady: CMBufferGetBooleanHandler,
pub compare: CMBufferCompareHandler,
pub dataBecameReadyNotification: *const CFString,
pub getSize: CMBufferGetSizeHandler,
}
#[cfg(all(feature = "CMTime", feature = "block2", feature = "objc2"))]
unsafe impl Encode for CMBufferHandlers {
const ENCODING: Encoding = Encoding::Struct(
"?",
&[
<usize>::ENCODING,
<CMBufferGetTimeHandler>::ENCODING,
<CMBufferGetTimeHandler>::ENCODING,
<CMBufferGetTimeHandler>::ENCODING,
<CMBufferGetBooleanHandler>::ENCODING,
<CMBufferCompareHandler>::ENCODING,
<*const CFString>::ENCODING,
<CMBufferGetSizeHandler>::ENCODING,
],
);
}
#[cfg(all(feature = "CMTime", feature = "block2", feature = "objc2"))]
unsafe impl RefEncode for CMBufferHandlers {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
impl CMBufferQueue {
#[doc(alias = "CMBufferQueueGetCallbacksForUnsortedSampleBuffers")]
#[cfg(feature = "CMTime")]
#[inline]
pub unsafe fn callbacks_for_unsorted_sample_buffers() -> NonNull<CMBufferCallbacks> {
extern "C-unwind" {
fn CMBufferQueueGetCallbacksForUnsortedSampleBuffers(
) -> Option<NonNull<CMBufferCallbacks>>;
}
let ret = unsafe { CMBufferQueueGetCallbacksForUnsortedSampleBuffers() };
ret.expect("function was marked as returning non-null, but actually returned NULL")
}
#[doc(alias = "CMBufferQueueGetCallbacksForSampleBuffersSortedByOutputPTS")]
#[cfg(feature = "CMTime")]
#[inline]
pub unsafe fn callbacks_for_sample_buffers_sorted_by_output_pts() -> NonNull<CMBufferCallbacks>
{
extern "C-unwind" {
fn CMBufferQueueGetCallbacksForSampleBuffersSortedByOutputPTS(
) -> Option<NonNull<CMBufferCallbacks>>;
}
let ret = unsafe { CMBufferQueueGetCallbacksForSampleBuffersSortedByOutputPTS() };
ret.expect("function was marked as returning non-null, but actually returned NULL")
}
#[doc(alias = "CMBufferQueueCreate")]
#[cfg(all(feature = "CMBase", feature = "CMTime"))]
#[inline]
pub unsafe fn create(
allocator: Option<&CFAllocator>,
capacity: CMItemCount,
callbacks: NonNull<CMBufferCallbacks>,
queue_out: NonNull<*mut CMBufferQueue>,
) -> OSStatus {
extern "C-unwind" {
fn CMBufferQueueCreate(
allocator: Option<&CFAllocator>,
capacity: CMItemCount,
callbacks: NonNull<CMBufferCallbacks>,
queue_out: NonNull<*mut CMBufferQueue>,
) -> OSStatus;
}
unsafe { CMBufferQueueCreate(allocator, capacity, callbacks, queue_out) }
}
#[doc(alias = "CMBufferQueueCreateWithHandlers")]
#[cfg(all(feature = "CMBase", feature = "CMTime", feature = "block2"))]
#[inline]
pub unsafe fn create_with_handlers(
allocator: Option<&CFAllocator>,
capacity: CMItemCount,
handlers: NonNull<CMBufferHandlers>,
queue_out: NonNull<*mut CMBufferQueue>,
) -> OSStatus {
extern "C-unwind" {
fn CMBufferQueueCreateWithHandlers(
allocator: Option<&CFAllocator>,
capacity: CMItemCount,
handlers: NonNull<CMBufferHandlers>,
queue_out: NonNull<*mut CMBufferQueue>,
) -> OSStatus;
}
unsafe { CMBufferQueueCreateWithHandlers(allocator, capacity, handlers, queue_out) }
}
}
unsafe impl ConcreteType for CMBufferQueue {
#[doc(alias = "CMBufferQueueGetTypeID")]
#[inline]
fn type_id() -> CFTypeID {
extern "C-unwind" {
fn CMBufferQueueGetTypeID() -> CFTypeID;
}
unsafe { CMBufferQueueGetTypeID() }
}
}
impl CMBufferQueue {
#[doc(alias = "CMBufferQueueEnqueue")]
#[inline]
pub unsafe fn enqueue(&self, buf: &CMBuffer) -> OSStatus {
extern "C-unwind" {
fn CMBufferQueueEnqueue(queue: &CMBufferQueue, buf: &CMBuffer) -> OSStatus;
}
unsafe { CMBufferQueueEnqueue(self, buf) }
}
#[doc(alias = "CMBufferQueueDequeueAndRetain")]
#[inline]
pub unsafe fn dequeue_and_retain(&self) -> Option<CFRetained<CMBuffer>> {
extern "C-unwind" {
fn CMBufferQueueDequeueAndRetain(queue: &CMBufferQueue) -> Option<NonNull<CMBuffer>>;
}
let ret = unsafe { CMBufferQueueDequeueAndRetain(self) };
ret.map(|ret| unsafe { CFRetained::from_raw(ret) })
}
#[doc(alias = "CMBufferQueueDequeueIfDataReadyAndRetain")]
#[inline]
pub unsafe fn dequeue_if_data_ready_and_retain(&self) -> Option<CFRetained<CMBuffer>> {
extern "C-unwind" {
fn CMBufferQueueDequeueIfDataReadyAndRetain(
queue: &CMBufferQueue,
) -> Option<NonNull<CMBuffer>>;
}
let ret = unsafe { CMBufferQueueDequeueIfDataReadyAndRetain(self) };
ret.map(|ret| unsafe { CFRetained::from_raw(ret) })
}
#[doc(alias = "CMBufferQueueGetHead")]
#[deprecated]
#[inline]
pub unsafe fn get_head(&self) -> Option<CFRetained<CMBuffer>> {
extern "C-unwind" {
fn CMBufferQueueGetHead(queue: &CMBufferQueue) -> Option<NonNull<CMBuffer>>;
}
let ret = unsafe { CMBufferQueueGetHead(self) };
ret.map(|ret| unsafe { CFRetained::retain(ret) })
}
#[doc(alias = "CMBufferQueueCopyHead")]
#[inline]
pub unsafe fn head(&self) -> Option<CFRetained<CMBuffer>> {
extern "C-unwind" {
fn CMBufferQueueCopyHead(queue: &CMBufferQueue) -> Option<NonNull<CMBuffer>>;
}
let ret = unsafe { CMBufferQueueCopyHead(self) };
ret.map(|ret| unsafe { CFRetained::from_raw(ret) })
}
#[doc(alias = "CMBufferQueueIsEmpty")]
#[inline]
pub unsafe fn is_empty(&self) -> bool {
extern "C-unwind" {
fn CMBufferQueueIsEmpty(queue: &CMBufferQueue) -> Boolean;
}
let ret = unsafe { CMBufferQueueIsEmpty(self) };
ret != 0
}
#[doc(alias = "CMBufferQueueMarkEndOfData")]
#[inline]
pub unsafe fn mark_end_of_data(&self) -> OSStatus {
extern "C-unwind" {
fn CMBufferQueueMarkEndOfData(queue: &CMBufferQueue) -> OSStatus;
}
unsafe { CMBufferQueueMarkEndOfData(self) }
}
#[doc(alias = "CMBufferQueueContainsEndOfData")]
#[inline]
pub unsafe fn contains_end_of_data(&self) -> bool {
extern "C-unwind" {
fn CMBufferQueueContainsEndOfData(queue: &CMBufferQueue) -> Boolean;
}
let ret = unsafe { CMBufferQueueContainsEndOfData(self) };
ret != 0
}
#[doc(alias = "CMBufferQueueIsAtEndOfData")]
#[inline]
pub unsafe fn is_at_end_of_data(&self) -> bool {
extern "C-unwind" {
fn CMBufferQueueIsAtEndOfData(queue: &CMBufferQueue) -> Boolean;
}
let ret = unsafe { CMBufferQueueIsAtEndOfData(self) };
ret != 0
}
#[doc(alias = "CMBufferQueueReset")]
#[inline]
pub unsafe fn reset(&self) -> OSStatus {
extern "C-unwind" {
fn CMBufferQueueReset(queue: &CMBufferQueue) -> OSStatus;
}
unsafe { CMBufferQueueReset(self) }
}
#[doc(alias = "CMBufferQueueResetWithCallback")]
#[inline]
pub unsafe fn reset_with_callback(
&self,
callback: unsafe extern "C-unwind" fn(NonNull<CMBuffer>, *mut c_void),
refcon: *mut c_void,
) -> OSStatus {
extern "C-unwind" {
fn CMBufferQueueResetWithCallback(
queue: &CMBufferQueue,
callback: unsafe extern "C-unwind" fn(NonNull<CMBuffer>, *mut c_void),
refcon: *mut c_void,
) -> OSStatus;
}
unsafe { CMBufferQueueResetWithCallback(self, callback, refcon) }
}
#[doc(alias = "CMBufferQueueGetBufferCount")]
#[cfg(feature = "CMBase")]
#[inline]
pub unsafe fn buffer_count(&self) -> CMItemCount {
extern "C-unwind" {
fn CMBufferQueueGetBufferCount(queue: &CMBufferQueue) -> CMItemCount;
}
unsafe { CMBufferQueueGetBufferCount(self) }
}
#[doc(alias = "CMBufferQueueGetDuration")]
#[cfg(feature = "CMTime")]
#[inline]
pub unsafe fn duration(&self) -> CMTime {
extern "C-unwind" {
fn CMBufferQueueGetDuration(queue: &CMBufferQueue) -> CMTime;
}
unsafe { CMBufferQueueGetDuration(self) }
}
#[doc(alias = "CMBufferQueueGetMinDecodeTimeStamp")]
#[cfg(feature = "CMTime")]
#[inline]
pub unsafe fn min_decode_time_stamp(&self) -> CMTime {
extern "C-unwind" {
fn CMBufferQueueGetMinDecodeTimeStamp(queue: &CMBufferQueue) -> CMTime;
}
unsafe { CMBufferQueueGetMinDecodeTimeStamp(self) }
}
#[doc(alias = "CMBufferQueueGetFirstDecodeTimeStamp")]
#[cfg(feature = "CMTime")]
#[inline]
pub unsafe fn first_decode_time_stamp(&self) -> CMTime {
extern "C-unwind" {
fn CMBufferQueueGetFirstDecodeTimeStamp(queue: &CMBufferQueue) -> CMTime;
}
unsafe { CMBufferQueueGetFirstDecodeTimeStamp(self) }
}
#[doc(alias = "CMBufferQueueGetMinPresentationTimeStamp")]
#[cfg(feature = "CMTime")]
#[inline]
pub unsafe fn min_presentation_time_stamp(&self) -> CMTime {
extern "C-unwind" {
fn CMBufferQueueGetMinPresentationTimeStamp(queue: &CMBufferQueue) -> CMTime;
}
unsafe { CMBufferQueueGetMinPresentationTimeStamp(self) }
}
#[doc(alias = "CMBufferQueueGetFirstPresentationTimeStamp")]
#[cfg(feature = "CMTime")]
#[inline]
pub unsafe fn first_presentation_time_stamp(&self) -> CMTime {
extern "C-unwind" {
fn CMBufferQueueGetFirstPresentationTimeStamp(queue: &CMBufferQueue) -> CMTime;
}
unsafe { CMBufferQueueGetFirstPresentationTimeStamp(self) }
}
#[doc(alias = "CMBufferQueueGetMaxPresentationTimeStamp")]
#[cfg(feature = "CMTime")]
#[inline]
pub unsafe fn max_presentation_time_stamp(&self) -> CMTime {
extern "C-unwind" {
fn CMBufferQueueGetMaxPresentationTimeStamp(queue: &CMBufferQueue) -> CMTime;
}
unsafe { CMBufferQueueGetMaxPresentationTimeStamp(self) }
}
#[doc(alias = "CMBufferQueueGetEndPresentationTimeStamp")]
#[cfg(feature = "CMTime")]
#[inline]
pub unsafe fn end_presentation_time_stamp(&self) -> CMTime {
extern "C-unwind" {
fn CMBufferQueueGetEndPresentationTimeStamp(queue: &CMBufferQueue) -> CMTime;
}
unsafe { CMBufferQueueGetEndPresentationTimeStamp(self) }
}
#[doc(alias = "CMBufferQueueGetTotalSize")]
#[inline]
pub unsafe fn total_size(&self) -> usize {
extern "C-unwind" {
fn CMBufferQueueGetTotalSize(queue: &CMBufferQueue) -> usize;
}
unsafe { CMBufferQueueGetTotalSize(self) }
}
}
#[repr(C)]
#[derive(Debug)]
pub struct opaqueCMBufferQueueTriggerToken {
inner: [u8; 0],
_p: UnsafeCell<PhantomData<(*const UnsafeCell<()>, PhantomPinned)>>,
}
#[cfg(feature = "objc2")]
unsafe impl RefEncode for opaqueCMBufferQueueTriggerToken {
const ENCODING_REF: Encoding =
Encoding::Pointer(&Encoding::Struct("opaqueCMBufferQueueTriggerToken", &[]));
}
pub type CMBufferQueueTriggerToken = *mut opaqueCMBufferQueueTriggerToken;
pub type CMBufferQueueTriggerCallback =
Option<unsafe extern "C-unwind" fn(*mut c_void, CMBufferQueueTriggerToken)>;
#[cfg(feature = "block2")]
pub type CMBufferQueueTriggerHandler = *mut block2::DynBlock<dyn Fn(CMBufferQueueTriggerToken)>;
pub type CMBufferQueueTriggerCondition = i32;
pub const kCMBufferQueueTrigger_WhenDurationBecomesLessThan: CMBufferQueueTriggerCondition = 1;
pub const kCMBufferQueueTrigger_WhenDurationBecomesLessThanOrEqualTo:
CMBufferQueueTriggerCondition = 2;
pub const kCMBufferQueueTrigger_WhenDurationBecomesGreaterThan: CMBufferQueueTriggerCondition = 3;
pub const kCMBufferQueueTrigger_WhenDurationBecomesGreaterThanOrEqualTo:
CMBufferQueueTriggerCondition = 4;
pub const kCMBufferQueueTrigger_WhenMinPresentationTimeStampChanges: CMBufferQueueTriggerCondition =
5;
pub const kCMBufferQueueTrigger_WhenMaxPresentationTimeStampChanges: CMBufferQueueTriggerCondition =
6;
pub const kCMBufferQueueTrigger_WhenDataBecomesReady: CMBufferQueueTriggerCondition = 7;
pub const kCMBufferQueueTrigger_WhenEndOfDataReached: CMBufferQueueTriggerCondition = 8;
pub const kCMBufferQueueTrigger_WhenReset: CMBufferQueueTriggerCondition = 9;
pub const kCMBufferQueueTrigger_WhenBufferCountBecomesLessThan: CMBufferQueueTriggerCondition = 10;
pub const kCMBufferQueueTrigger_WhenBufferCountBecomesGreaterThan: CMBufferQueueTriggerCondition =
11;
pub const kCMBufferQueueTrigger_WhenDurationBecomesGreaterThanOrEqualToAndBufferCountBecomesGreaterThan: CMBufferQueueTriggerCondition = 12;
impl CMBufferQueue {
#[doc(alias = "CMBufferQueueInstallTrigger")]
#[cfg(feature = "CMTime")]
#[inline]
pub unsafe fn install_trigger(
&self,
callback: CMBufferQueueTriggerCallback,
refcon: *mut c_void,
condition: CMBufferQueueTriggerCondition,
time: CMTime,
trigger_token_out: *mut CMBufferQueueTriggerToken,
) -> OSStatus {
extern "C-unwind" {
fn CMBufferQueueInstallTrigger(
queue: &CMBufferQueue,
callback: CMBufferQueueTriggerCallback,
refcon: *mut c_void,
condition: CMBufferQueueTriggerCondition,
time: CMTime,
trigger_token_out: *mut CMBufferQueueTriggerToken,
) -> OSStatus;
}
unsafe {
CMBufferQueueInstallTrigger(self, callback, refcon, condition, time, trigger_token_out)
}
}
#[doc(alias = "CMBufferQueueInstallTriggerWithIntegerThreshold")]
#[cfg(feature = "CMBase")]
#[inline]
pub unsafe fn install_trigger_with_integer_threshold(
&self,
callback: CMBufferQueueTriggerCallback,
refcon: *mut c_void,
condition: CMBufferQueueTriggerCondition,
threshold: CMItemCount,
trigger_token_out: *mut CMBufferQueueTriggerToken,
) -> OSStatus {
extern "C-unwind" {
fn CMBufferQueueInstallTriggerWithIntegerThreshold(
queue: &CMBufferQueue,
callback: CMBufferQueueTriggerCallback,
refcon: *mut c_void,
condition: CMBufferQueueTriggerCondition,
threshold: CMItemCount,
trigger_token_out: *mut CMBufferQueueTriggerToken,
) -> OSStatus;
}
unsafe {
CMBufferQueueInstallTriggerWithIntegerThreshold(
self,
callback,
refcon,
condition,
threshold,
trigger_token_out,
)
}
}
#[doc(alias = "CMBufferQueueInstallTriggerHandler")]
#[cfg(all(feature = "CMTime", feature = "block2"))]
#[inline]
pub unsafe fn install_trigger_handler(
&self,
condition: CMBufferQueueTriggerCondition,
time: CMTime,
trigger_token_out: *mut CMBufferQueueTriggerToken,
handler: CMBufferQueueTriggerHandler,
) -> OSStatus {
extern "C-unwind" {
fn CMBufferQueueInstallTriggerHandler(
queue: &CMBufferQueue,
condition: CMBufferQueueTriggerCondition,
time: CMTime,
trigger_token_out: *mut CMBufferQueueTriggerToken,
handler: CMBufferQueueTriggerHandler,
) -> OSStatus;
}
unsafe {
CMBufferQueueInstallTriggerHandler(self, condition, time, trigger_token_out, handler)
}
}
#[doc(alias = "CMBufferQueueInstallTriggerHandlerWithIntegerThreshold")]
#[cfg(all(feature = "CMBase", feature = "block2"))]
#[inline]
pub unsafe fn install_trigger_handler_with_integer_threshold(
&self,
condition: CMBufferQueueTriggerCondition,
threshold: CMItemCount,
trigger_token_out: *mut CMBufferQueueTriggerToken,
handler: CMBufferQueueTriggerHandler,
) -> OSStatus {
extern "C-unwind" {
fn CMBufferQueueInstallTriggerHandlerWithIntegerThreshold(
queue: &CMBufferQueue,
condition: CMBufferQueueTriggerCondition,
threshold: CMItemCount,
trigger_token_out: *mut CMBufferQueueTriggerToken,
handler: CMBufferQueueTriggerHandler,
) -> OSStatus;
}
unsafe {
CMBufferQueueInstallTriggerHandlerWithIntegerThreshold(
self,
condition,
threshold,
trigger_token_out,
handler,
)
}
}
#[doc(alias = "CMBufferQueueRemoveTrigger")]
#[inline]
pub unsafe fn remove_trigger(&self, trigger_token: CMBufferQueueTriggerToken) -> OSStatus {
extern "C-unwind" {
fn CMBufferQueueRemoveTrigger(
queue: &CMBufferQueue,
trigger_token: CMBufferQueueTriggerToken,
) -> OSStatus;
}
unsafe { CMBufferQueueRemoveTrigger(self, trigger_token) }
}
#[doc(alias = "CMBufferQueueTestTrigger")]
#[inline]
pub unsafe fn test_trigger(&self, trigger_token: CMBufferQueueTriggerToken) -> bool {
extern "C-unwind" {
fn CMBufferQueueTestTrigger(
queue: &CMBufferQueue,
trigger_token: CMBufferQueueTriggerToken,
) -> Boolean;
}
let ret = unsafe { CMBufferQueueTestTrigger(self, trigger_token) };
ret != 0
}
#[doc(alias = "CMBufferQueueCallForEachBuffer")]
#[inline]
pub unsafe fn call_for_each_buffer(
&self,
callback: unsafe extern "C-unwind" fn(NonNull<CMBuffer>, *mut c_void) -> OSStatus,
refcon: *mut c_void,
) -> OSStatus {
extern "C-unwind" {
fn CMBufferQueueCallForEachBuffer(
queue: &CMBufferQueue,
callback: unsafe extern "C-unwind" fn(NonNull<CMBuffer>, *mut c_void) -> OSStatus,
refcon: *mut c_void,
) -> OSStatus;
}
unsafe { CMBufferQueueCallForEachBuffer(self, callback, refcon) }
}
}
pub type CMBufferValidationCallback = Option<
unsafe extern "C-unwind" fn(NonNull<CMBufferQueue>, NonNull<CMBuffer>, *mut c_void) -> OSStatus,
>;
#[cfg(feature = "block2")]
pub type CMBufferValidationHandler =
*mut block2::DynBlock<dyn Fn(NonNull<CMBufferQueue>, NonNull<CMBuffer>) -> OSStatus>;
impl CMBufferQueue {
#[doc(alias = "CMBufferQueueSetValidationCallback")]
#[inline]
pub unsafe fn set_validation_callback(
&self,
callback: CMBufferValidationCallback,
refcon: *mut c_void,
) -> OSStatus {
extern "C-unwind" {
fn CMBufferQueueSetValidationCallback(
queue: &CMBufferQueue,
callback: CMBufferValidationCallback,
refcon: *mut c_void,
) -> OSStatus;
}
unsafe { CMBufferQueueSetValidationCallback(self, callback, refcon) }
}
#[doc(alias = "CMBufferQueueSetValidationHandler")]
#[cfg(feature = "block2")]
#[inline]
pub unsafe fn set_validation_handler(&self, handler: CMBufferValidationHandler) -> OSStatus {
extern "C-unwind" {
fn CMBufferQueueSetValidationHandler(
queue: &CMBufferQueue,
handler: CMBufferValidationHandler,
) -> OSStatus;
}
unsafe { CMBufferQueueSetValidationHandler(self, handler) }
}
}
#[cfg(feature = "CMTime")]
#[deprecated = "renamed to `CMBufferQueue::callbacks_for_unsorted_sample_buffers`"]
#[inline]
pub unsafe extern "C-unwind" fn CMBufferQueueGetCallbacksForUnsortedSampleBuffers(
) -> NonNull<CMBufferCallbacks> {
extern "C-unwind" {
fn CMBufferQueueGetCallbacksForUnsortedSampleBuffers() -> Option<NonNull<CMBufferCallbacks>>;
}
let ret = unsafe { CMBufferQueueGetCallbacksForUnsortedSampleBuffers() };
ret.expect("function was marked as returning non-null, but actually returned NULL")
}
#[cfg(feature = "CMTime")]
#[deprecated = "renamed to `CMBufferQueue::callbacks_for_sample_buffers_sorted_by_output_pts`"]
#[inline]
pub unsafe extern "C-unwind" fn CMBufferQueueGetCallbacksForSampleBuffersSortedByOutputPTS(
) -> NonNull<CMBufferCallbacks> {
extern "C-unwind" {
fn CMBufferQueueGetCallbacksForSampleBuffersSortedByOutputPTS(
) -> Option<NonNull<CMBufferCallbacks>>;
}
let ret = unsafe { CMBufferQueueGetCallbacksForSampleBuffersSortedByOutputPTS() };
ret.expect("function was marked as returning non-null, but actually returned NULL")
}
extern "C-unwind" {
#[cfg(all(feature = "CMBase", feature = "CMTime"))]
#[deprecated = "renamed to `CMBufferQueue::create`"]
pub fn CMBufferQueueCreate(
allocator: Option<&CFAllocator>,
capacity: CMItemCount,
callbacks: NonNull<CMBufferCallbacks>,
queue_out: NonNull<*mut CMBufferQueue>,
) -> OSStatus;
}
extern "C-unwind" {
#[cfg(all(feature = "CMBase", feature = "CMTime", feature = "block2"))]
#[deprecated = "renamed to `CMBufferQueue::create_with_handlers`"]
pub fn CMBufferQueueCreateWithHandlers(
allocator: Option<&CFAllocator>,
capacity: CMItemCount,
handlers: NonNull<CMBufferHandlers>,
queue_out: NonNull<*mut CMBufferQueue>,
) -> OSStatus;
}
extern "C-unwind" {
#[deprecated = "renamed to `CMBufferQueue::enqueue`"]
pub fn CMBufferQueueEnqueue(queue: &CMBufferQueue, buf: &CMBuffer) -> OSStatus;
}
#[deprecated = "renamed to `CMBufferQueue::dequeue_and_retain`"]
#[inline]
pub unsafe extern "C-unwind" fn CMBufferQueueDequeueAndRetain(
queue: &CMBufferQueue,
) -> Option<CFRetained<CMBuffer>> {
extern "C-unwind" {
fn CMBufferQueueDequeueAndRetain(queue: &CMBufferQueue) -> Option<NonNull<CMBuffer>>;
}
let ret = unsafe { CMBufferQueueDequeueAndRetain(queue) };
ret.map(|ret| unsafe { CFRetained::from_raw(ret) })
}
#[deprecated = "renamed to `CMBufferQueue::dequeue_if_data_ready_and_retain`"]
#[inline]
pub unsafe extern "C-unwind" fn CMBufferQueueDequeueIfDataReadyAndRetain(
queue: &CMBufferQueue,
) -> Option<CFRetained<CMBuffer>> {
extern "C-unwind" {
fn CMBufferQueueDequeueIfDataReadyAndRetain(
queue: &CMBufferQueue,
) -> Option<NonNull<CMBuffer>>;
}
let ret = unsafe { CMBufferQueueDequeueIfDataReadyAndRetain(queue) };
ret.map(|ret| unsafe { CFRetained::from_raw(ret) })
}
#[deprecated = "renamed to `CMBufferQueue::get_head`"]
#[inline]
pub unsafe extern "C-unwind" fn CMBufferQueueGetHead(
queue: &CMBufferQueue,
) -> Option<CFRetained<CMBuffer>> {
extern "C-unwind" {
fn CMBufferQueueGetHead(queue: &CMBufferQueue) -> Option<NonNull<CMBuffer>>;
}
let ret = unsafe { CMBufferQueueGetHead(queue) };
ret.map(|ret| unsafe { CFRetained::retain(ret) })
}
#[deprecated = "renamed to `CMBufferQueue::head`"]
#[inline]
pub unsafe extern "C-unwind" fn CMBufferQueueCopyHead(
queue: &CMBufferQueue,
) -> Option<CFRetained<CMBuffer>> {
extern "C-unwind" {
fn CMBufferQueueCopyHead(queue: &CMBufferQueue) -> Option<NonNull<CMBuffer>>;
}
let ret = unsafe { CMBufferQueueCopyHead(queue) };
ret.map(|ret| unsafe { CFRetained::from_raw(ret) })
}
#[deprecated = "renamed to `CMBufferQueue::is_empty`"]
#[inline]
pub unsafe extern "C-unwind" fn CMBufferQueueIsEmpty(queue: &CMBufferQueue) -> bool {
extern "C-unwind" {
fn CMBufferQueueIsEmpty(queue: &CMBufferQueue) -> Boolean;
}
let ret = unsafe { CMBufferQueueIsEmpty(queue) };
ret != 0
}
extern "C-unwind" {
#[deprecated = "renamed to `CMBufferQueue::mark_end_of_data`"]
pub fn CMBufferQueueMarkEndOfData(queue: &CMBufferQueue) -> OSStatus;
}
#[deprecated = "renamed to `CMBufferQueue::contains_end_of_data`"]
#[inline]
pub unsafe extern "C-unwind" fn CMBufferQueueContainsEndOfData(queue: &CMBufferQueue) -> bool {
extern "C-unwind" {
fn CMBufferQueueContainsEndOfData(queue: &CMBufferQueue) -> Boolean;
}
let ret = unsafe { CMBufferQueueContainsEndOfData(queue) };
ret != 0
}
#[deprecated = "renamed to `CMBufferQueue::is_at_end_of_data`"]
#[inline]
pub unsafe extern "C-unwind" fn CMBufferQueueIsAtEndOfData(queue: &CMBufferQueue) -> bool {
extern "C-unwind" {
fn CMBufferQueueIsAtEndOfData(queue: &CMBufferQueue) -> Boolean;
}
let ret = unsafe { CMBufferQueueIsAtEndOfData(queue) };
ret != 0
}
extern "C-unwind" {
#[deprecated = "renamed to `CMBufferQueue::reset`"]
pub fn CMBufferQueueReset(queue: &CMBufferQueue) -> OSStatus;
}
extern "C-unwind" {
#[deprecated = "renamed to `CMBufferQueue::reset_with_callback`"]
pub fn CMBufferQueueResetWithCallback(
queue: &CMBufferQueue,
callback: unsafe extern "C-unwind" fn(NonNull<CMBuffer>, *mut c_void),
refcon: *mut c_void,
) -> OSStatus;
}
extern "C-unwind" {
#[cfg(feature = "CMBase")]
#[deprecated = "renamed to `CMBufferQueue::buffer_count`"]
pub fn CMBufferQueueGetBufferCount(queue: &CMBufferQueue) -> CMItemCount;
}
extern "C-unwind" {
#[cfg(feature = "CMTime")]
#[deprecated = "renamed to `CMBufferQueue::duration`"]
pub fn CMBufferQueueGetDuration(queue: &CMBufferQueue) -> CMTime;
}
extern "C-unwind" {
#[cfg(feature = "CMTime")]
#[deprecated = "renamed to `CMBufferQueue::min_decode_time_stamp`"]
pub fn CMBufferQueueGetMinDecodeTimeStamp(queue: &CMBufferQueue) -> CMTime;
}
extern "C-unwind" {
#[cfg(feature = "CMTime")]
#[deprecated = "renamed to `CMBufferQueue::first_decode_time_stamp`"]
pub fn CMBufferQueueGetFirstDecodeTimeStamp(queue: &CMBufferQueue) -> CMTime;
}
extern "C-unwind" {
#[cfg(feature = "CMTime")]
#[deprecated = "renamed to `CMBufferQueue::min_presentation_time_stamp`"]
pub fn CMBufferQueueGetMinPresentationTimeStamp(queue: &CMBufferQueue) -> CMTime;
}
extern "C-unwind" {
#[cfg(feature = "CMTime")]
#[deprecated = "renamed to `CMBufferQueue::first_presentation_time_stamp`"]
pub fn CMBufferQueueGetFirstPresentationTimeStamp(queue: &CMBufferQueue) -> CMTime;
}
extern "C-unwind" {
#[cfg(feature = "CMTime")]
#[deprecated = "renamed to `CMBufferQueue::max_presentation_time_stamp`"]
pub fn CMBufferQueueGetMaxPresentationTimeStamp(queue: &CMBufferQueue) -> CMTime;
}
extern "C-unwind" {
#[cfg(feature = "CMTime")]
#[deprecated = "renamed to `CMBufferQueue::end_presentation_time_stamp`"]
pub fn CMBufferQueueGetEndPresentationTimeStamp(queue: &CMBufferQueue) -> CMTime;
}
extern "C-unwind" {
#[deprecated = "renamed to `CMBufferQueue::total_size`"]
pub fn CMBufferQueueGetTotalSize(queue: &CMBufferQueue) -> usize;
}
extern "C-unwind" {
#[cfg(feature = "CMTime")]
#[deprecated = "renamed to `CMBufferQueue::install_trigger`"]
pub fn CMBufferQueueInstallTrigger(
queue: &CMBufferQueue,
callback: CMBufferQueueTriggerCallback,
refcon: *mut c_void,
condition: CMBufferQueueTriggerCondition,
time: CMTime,
trigger_token_out: *mut CMBufferQueueTriggerToken,
) -> OSStatus;
}
extern "C-unwind" {
#[cfg(feature = "CMBase")]
#[deprecated = "renamed to `CMBufferQueue::install_trigger_with_integer_threshold`"]
pub fn CMBufferQueueInstallTriggerWithIntegerThreshold(
queue: &CMBufferQueue,
callback: CMBufferQueueTriggerCallback,
refcon: *mut c_void,
condition: CMBufferQueueTriggerCondition,
threshold: CMItemCount,
trigger_token_out: *mut CMBufferQueueTriggerToken,
) -> OSStatus;
}
extern "C-unwind" {
#[cfg(all(feature = "CMTime", feature = "block2"))]
#[deprecated = "renamed to `CMBufferQueue::install_trigger_handler`"]
pub fn CMBufferQueueInstallTriggerHandler(
queue: &CMBufferQueue,
condition: CMBufferQueueTriggerCondition,
time: CMTime,
trigger_token_out: *mut CMBufferQueueTriggerToken,
handler: CMBufferQueueTriggerHandler,
) -> OSStatus;
}
extern "C-unwind" {
#[cfg(all(feature = "CMBase", feature = "block2"))]
#[deprecated = "renamed to `CMBufferQueue::install_trigger_handler_with_integer_threshold`"]
pub fn CMBufferQueueInstallTriggerHandlerWithIntegerThreshold(
queue: &CMBufferQueue,
condition: CMBufferQueueTriggerCondition,
threshold: CMItemCount,
trigger_token_out: *mut CMBufferQueueTriggerToken,
handler: CMBufferQueueTriggerHandler,
) -> OSStatus;
}
extern "C-unwind" {
#[deprecated = "renamed to `CMBufferQueue::remove_trigger`"]
pub fn CMBufferQueueRemoveTrigger(
queue: &CMBufferQueue,
trigger_token: CMBufferQueueTriggerToken,
) -> OSStatus;
}
#[deprecated = "renamed to `CMBufferQueue::test_trigger`"]
#[inline]
pub unsafe extern "C-unwind" fn CMBufferQueueTestTrigger(
queue: &CMBufferQueue,
trigger_token: CMBufferQueueTriggerToken,
) -> bool {
extern "C-unwind" {
fn CMBufferQueueTestTrigger(
queue: &CMBufferQueue,
trigger_token: CMBufferQueueTriggerToken,
) -> Boolean;
}
let ret = unsafe { CMBufferQueueTestTrigger(queue, trigger_token) };
ret != 0
}
extern "C-unwind" {
#[deprecated = "renamed to `CMBufferQueue::call_for_each_buffer`"]
pub fn CMBufferQueueCallForEachBuffer(
queue: &CMBufferQueue,
callback: unsafe extern "C-unwind" fn(NonNull<CMBuffer>, *mut c_void) -> OSStatus,
refcon: *mut c_void,
) -> OSStatus;
}
extern "C-unwind" {
#[deprecated = "renamed to `CMBufferQueue::set_validation_callback`"]
pub fn CMBufferQueueSetValidationCallback(
queue: &CMBufferQueue,
callback: CMBufferValidationCallback,
refcon: *mut c_void,
) -> OSStatus;
}
extern "C-unwind" {
#[cfg(feature = "block2")]
#[deprecated = "renamed to `CMBufferQueue::set_validation_handler`"]
pub fn CMBufferQueueSetValidationHandler(
queue: &CMBufferQueue,
handler: CMBufferValidationHandler,
) -> OSStatus;
}