use core::cell::UnsafeCell;
use core::ffi::*;
use core::marker::{PhantomData, PhantomPinned};
use core::ptr::NonNull;
use objc2::__framework_prelude::*;
#[cfg(feature = "objc2-core-foundation")]
use objc2_core_foundation::*;
use crate::*;
pub const kAudioComponentConfigurationInfo_ValidationResult: &CStr =
unsafe { CStr::from_bytes_with_nul_unchecked(b"ValidationResult\0") };
pub const kAudioComponentValidationParameter_TimeOut: &CStr =
unsafe { CStr::from_bytes_with_nul_unchecked(b"TimeOut\0") };
pub const kAudioComponentValidationParameter_ForceValidation: &CStr =
unsafe { CStr::from_bytes_with_nul_unchecked(b"ForceValidation\0") };
pub const kAudioComponentValidationParameter_LoadOutOfProcess: &CStr =
unsafe { CStr::from_bytes_with_nul_unchecked(b"LoadOutOfProcess\0") };
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct AudioComponentFlags(pub u32);
bitflags::bitflags! {
impl AudioComponentFlags: u32 {
#[doc(alias = "kAudioComponentFlag_Unsearchable")]
const Unsearchable = 1;
#[doc(alias = "kAudioComponentFlag_SandboxSafe")]
const SandboxSafe = 2;
#[doc(alias = "kAudioComponentFlag_IsV3AudioUnit")]
const IsV3AudioUnit = 4;
#[doc(alias = "kAudioComponentFlag_RequiresAsyncInstantiation")]
const RequiresAsyncInstantiation = 8;
#[doc(alias = "kAudioComponentFlag_CanLoadInProcess")]
const CanLoadInProcess = 0x10;
}
}
unsafe impl Encode for AudioComponentFlags {
const ENCODING: Encoding = u32::ENCODING;
}
unsafe impl RefEncode for AudioComponentFlags {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct AudioComponentInstantiationOptions(pub u32);
bitflags::bitflags! {
impl AudioComponentInstantiationOptions: u32 {
#[doc(alias = "kAudioComponentInstantiation_LoadOutOfProcess")]
const LoadOutOfProcess = 1;
#[doc(alias = "kAudioComponentInstantiation_LoadInProcess")]
const LoadInProcess = 2;
#[doc(alias = "kAudioComponentInstantiation_LoadedRemotely")]
const LoadedRemotely = 1<<31;
}
}
unsafe impl Encode for AudioComponentInstantiationOptions {
const ENCODING: Encoding = u32::ENCODING;
}
unsafe impl RefEncode for AudioComponentInstantiationOptions {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct AudioComponentDescription {
pub componentType: OSType,
pub componentSubType: OSType,
pub componentManufacturer: OSType,
pub componentFlags: u32,
pub componentFlagsMask: u32,
}
unsafe impl Encode for AudioComponentDescription {
const ENCODING: Encoding = Encoding::Struct(
"AudioComponentDescription",
&[
<OSType>::ENCODING,
<OSType>::ENCODING,
<OSType>::ENCODING,
<u32>::ENCODING,
<u32>::ENCODING,
],
);
}
unsafe impl RefEncode for AudioComponentDescription {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[repr(C)]
#[derive(Debug)]
pub struct OpaqueAudioComponent {
inner: [u8; 0],
_p: UnsafeCell<PhantomData<(*const UnsafeCell<()>, PhantomPinned)>>,
}
unsafe impl RefEncode for OpaqueAudioComponent {
const ENCODING_REF: Encoding =
Encoding::Pointer(&Encoding::Struct("OpaqueAudioComponent", &[]));
}
pub type AudioComponent = *mut OpaqueAudioComponent;
#[repr(C)]
#[derive(Debug)]
pub struct OpaqueAudioComponentInstance {
inner: [u8; 0],
_p: UnsafeCell<PhantomData<(*const UnsafeCell<()>, PhantomPinned)>>,
}
unsafe impl RefEncode for OpaqueAudioComponentInstance {
const ENCODING_REF: Encoding =
Encoding::Pointer(&Encoding::Struct("OpaqueAudioComponentInstance", &[]));
}
pub type AudioComponentInstance = *mut OpaqueAudioComponentInstance;
pub type AudioComponentMethod =
Option<unsafe extern "C-unwind" fn(NonNull<c_void>, ...) -> OSStatus>;
#[repr(C)]
#[allow(unpredictable_function_pointer_comparisons)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct AudioComponentPlugInInterface {
pub Open: unsafe extern "C-unwind" fn(NonNull<c_void>, AudioComponentInstance) -> OSStatus,
pub Close: unsafe extern "C-unwind" fn(NonNull<c_void>) -> OSStatus,
pub Lookup: unsafe extern "C-unwind" fn(i16) -> AudioComponentMethod,
pub reserved: *mut c_void,
}
unsafe impl Encode for AudioComponentPlugInInterface {
const ENCODING: Encoding = Encoding::Struct("AudioComponentPlugInInterface", &[
<unsafe extern "C-unwind" fn(NonNull<c_void>,AudioComponentInstance,) -> OSStatus>::ENCODING,
<unsafe extern "C-unwind" fn(NonNull<c_void>,) -> OSStatus>::ENCODING,
<unsafe extern "C-unwind" fn(i16,) -> AudioComponentMethod>::ENCODING,
<*mut c_void>::ENCODING,
]);
}
unsafe impl RefEncode for AudioComponentPlugInInterface {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
pub type AudioComponentFactoryFunction = Option<
unsafe extern "C-unwind" fn(
NonNull<AudioComponentDescription>,
) -> *mut AudioComponentPlugInInterface,
>;
extern "C-unwind" {
pub fn AudioComponentFindNext(
in_component: AudioComponent,
in_desc: NonNull<AudioComponentDescription>,
) -> AudioComponent;
}
extern "C-unwind" {
pub fn AudioComponentCount(in_desc: NonNull<AudioComponentDescription>) -> u32;
}
extern "C-unwind" {
#[cfg(feature = "objc2-core-foundation")]
pub fn AudioComponentCopyName(
in_component: AudioComponent,
out_name: NonNull<*const CFString>,
) -> OSStatus;
}
extern "C-unwind" {
pub fn AudioComponentGetDescription(
in_component: AudioComponent,
out_desc: NonNull<AudioComponentDescription>,
) -> OSStatus;
}
extern "C-unwind" {
pub fn AudioComponentGetVersion(
in_component: AudioComponent,
out_version: NonNull<u32>,
) -> OSStatus;
}
extern "C-unwind" {
pub fn AudioComponentInstanceNew(
in_component: AudioComponent,
out_instance: NonNull<AudioComponentInstance>,
) -> OSStatus;
}
extern "C-unwind" {
#[cfg(feature = "block2")]
pub fn AudioComponentInstantiate(
in_component: AudioComponent,
in_options: AudioComponentInstantiationOptions,
in_completion_handler: &block2::DynBlock<dyn Fn(AudioComponentInstance, OSStatus)>,
);
}
extern "C-unwind" {
pub fn AudioComponentInstanceDispose(in_instance: AudioComponentInstance) -> OSStatus;
}
extern "C-unwind" {
pub fn AudioComponentInstanceGetComponent(
in_instance: AudioComponentInstance,
) -> AudioComponent;
}
#[inline]
pub unsafe extern "C-unwind" fn AudioComponentInstanceCanDo(
in_instance: AudioComponentInstance,
in_selector_id: i16,
) -> bool {
extern "C-unwind" {
fn AudioComponentInstanceCanDo(
in_instance: AudioComponentInstance,
in_selector_id: i16,
) -> Boolean;
}
let ret = unsafe { AudioComponentInstanceCanDo(in_instance, in_selector_id) };
ret != 0
}
extern "C-unwind" {
#[cfg(feature = "objc2-core-foundation")]
pub fn AudioComponentRegister(
in_desc: NonNull<AudioComponentDescription>,
in_name: &CFString,
in_version: u32,
in_factory: AudioComponentFactoryFunction,
) -> AudioComponent;
}
extern "C-unwind" {
#[cfg(feature = "objc2-core-foundation")]
pub fn AudioComponentCopyConfigurationInfo(
in_component: AudioComponent,
out_configuration_info: NonNull<*const CFDictionary>,
) -> OSStatus;
}
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct AudioComponentValidationResult(pub u32);
impl AudioComponentValidationResult {
#[doc(alias = "kAudioComponentValidationResult_Unknown")]
pub const Unknown: Self = Self(0);
#[doc(alias = "kAudioComponentValidationResult_Passed")]
pub const Passed: Self = Self(1);
#[doc(alias = "kAudioComponentValidationResult_Failed")]
pub const Failed: Self = Self(2);
#[doc(alias = "kAudioComponentValidationResult_TimedOut")]
pub const TimedOut: Self = Self(3);
#[doc(alias = "kAudioComponentValidationResult_UnauthorizedError_Open")]
pub const UnauthorizedError_Open: Self = Self(4);
#[doc(alias = "kAudioComponentValidationResult_UnauthorizedError_Init")]
pub const UnauthorizedError_Init: Self = Self(5);
}
unsafe impl Encode for AudioComponentValidationResult {
const ENCODING: Encoding = u32::ENCODING;
}
unsafe impl RefEncode for AudioComponentValidationResult {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
extern "C-unwind" {
#[cfg(feature = "objc2-core-foundation")]
pub fn AudioComponentValidate(
in_component: AudioComponent,
in_validation_parameters: Option<&CFDictionary>,
out_validation_result: NonNull<AudioComponentValidationResult>,
) -> OSStatus;
}
extern "C-unwind" {
#[cfg(all(feature = "block2", feature = "objc2-core-foundation"))]
pub fn AudioComponentValidateWithResults(
in_component: AudioComponent,
in_validation_parameters: Option<&CFDictionary>,
in_completion_handler: &block2::DynBlock<
dyn Fn(AudioComponentValidationResult, NonNull<CFDictionary>),
>,
) -> OSStatus;
}