objc2-cinematic 0.3.2

Bindings to the Cinematic framework
Documentation
//! This file has been automatically generated by `objc2`'s `header-translator`.
//! DO NOT EDIT
use core::ffi::*;
use core::ptr::NonNull;
use objc2::__framework_prelude::*;
#[cfg(feature = "objc2-av-foundation")]
use objc2_av_foundation::*;
#[cfg(feature = "objc2-core-foundation")]
use objc2_core_foundation::*;
#[cfg(feature = "objc2-core-media")]
use objc2_core_media::*;
use objc2_foundation::*;

use crate::*;

extern_class!(
    /// Information associated with an AVAsset for a cinematic video.
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/cinematic/cnassetinfo?language=objc)
    #[unsafe(super(NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct CNAssetInfo;
);

extern_conformance!(
    unsafe impl NSObjectProtocol for CNAssetInfo {}
);

impl CNAssetInfo {
    extern_methods!(
        #[cfg(all(feature = "block2", feature = "objc2-av-foundation"))]
        /// Check if asset is cinematic asynchronously.
        #[unsafe(method(checkIfCinematic:completionHandler:))]
        #[unsafe(method_family = none)]
        pub unsafe fn checkIfCinematic_completionHandler(
            asset: &AVAsset,
            completion_handler: &block2::DynBlock<dyn Fn(Bool)>,
        );

        #[cfg(all(feature = "block2", feature = "objc2-av-foundation"))]
        /// Load cinematic asset information asynchronously.
        #[unsafe(method(loadFromAsset:completionHandler:))]
        #[unsafe(method_family = none)]
        pub unsafe fn loadFromAsset_completionHandler(
            asset: &AVAsset,
            completion_handler: &block2::DynBlock<dyn Fn(*mut CNAssetInfo, *mut NSError)>,
        );

        #[cfg(feature = "objc2-av-foundation")]
        #[unsafe(method(asset))]
        #[unsafe(method_family = none)]
        pub unsafe fn asset(&self) -> Retained<AVAsset>;

        #[cfg(feature = "objc2-av-foundation")]
        #[unsafe(method(allCinematicTracks))]
        #[unsafe(method_family = none)]
        pub unsafe fn allCinematicTracks(&self) -> Retained<NSArray<AVAssetTrack>>;

        #[cfg(feature = "objc2-av-foundation")]
        #[unsafe(method(cinematicVideoTrack))]
        #[unsafe(method_family = none)]
        pub unsafe fn cinematicVideoTrack(&self) -> Retained<AVAssetTrack>;

        #[cfg(feature = "objc2-av-foundation")]
        #[unsafe(method(cinematicDisparityTrack))]
        #[unsafe(method_family = none)]
        pub unsafe fn cinematicDisparityTrack(&self) -> Retained<AVAssetTrack>;

        #[cfg(feature = "objc2-av-foundation")]
        #[unsafe(method(cinematicMetadataTrack))]
        #[unsafe(method_family = none)]
        pub unsafe fn cinematicMetadataTrack(&self) -> Retained<AVAssetTrack>;

        #[cfg(feature = "objc2-core-media")]
        /// Time range over which all cinematic tracks are valid.
        #[unsafe(method(timeRange))]
        #[unsafe(method_family = none)]
        pub unsafe fn timeRange(&self) -> CMTimeRange;

        #[cfg(feature = "objc2-core-foundation")]
        /// Natural size at which cinematic video would be rendered
        #[unsafe(method(naturalSize))]
        #[unsafe(method_family = none)]
        pub unsafe fn naturalSize(&self) -> CGSize;

        #[cfg(feature = "objc2-core-foundation")]
        /// Natural size at which cinematic video would be displayed.
        /// Same as naturalSize with preferredTransform applied.
        #[unsafe(method(preferredSize))]
        #[unsafe(method_family = none)]
        pub unsafe fn preferredSize(&self) -> CGSize;

        #[cfg(feature = "objc2-core-foundation")]
        /// The preferred transform of the rendered image for display purposes.
        /// Always the identity transform or a multiple of a 90º rotation with no scaling.
        #[unsafe(method(preferredTransform))]
        #[unsafe(method_family = none)]
        pub unsafe fn preferredTransform(&self) -> CGAffineTransform;

        #[unsafe(method(init))]
        #[unsafe(method_family = init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;

        #[unsafe(method(new))]
        #[unsafe(method_family = new)]
        pub unsafe fn new() -> Retained<Self>;
    );
}

/// AbstractTracks.
///
/// Use of these properties where appropriate is preferred to help maintain future compatibility
impl CNAssetInfo {
    extern_methods!(
        #[cfg(feature = "objc2-av-foundation")]
        /// Track to be used for frame timing
        #[unsafe(method(frameTimingTrack))]
        #[unsafe(method_family = none)]
        pub unsafe fn frameTimingTrack(&self) -> Retained<AVAssetTrack>;

        #[cfg(feature = "objc2-av-foundation")]
        /// Tracks required to construct AVAssetReaderVideoCompositionOutput.
        #[unsafe(method(videoCompositionTracks))]
        #[unsafe(method_family = none)]
        pub unsafe fn videoCompositionTracks(&self) -> Retained<NSArray<AVAssetTrack>>;

        /// Source video track IDs required to implement AVVideoCompositionInstruction protocol
        #[unsafe(method(videoCompositionTrackIDs))]
        #[unsafe(method_family = none)]
        pub unsafe fn videoCompositionTrackIDs(&self) -> Retained<NSArray<NSNumber>>;

        /// Source metadata track IDs required to implement AVVideoCompositionInstruction protocol
        #[unsafe(method(sampleDataTrackIDs))]
        #[unsafe(method_family = none)]
        pub unsafe fn sampleDataTrackIDs(&self) -> Retained<NSArray<NSNumber>>;
    );
}

extern_class!(
    /// Information about composition tracks added to an AVComposition for a cinematic asset.
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/cinematic/cncompositioninfo?language=objc)
    #[unsafe(super(CNAssetInfo, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct CNCompositionInfo;
);

extern_conformance!(
    unsafe impl NSObjectProtocol for CNCompositionInfo {}
);

impl CNCompositionInfo {
    extern_methods!(
        #[cfg(feature = "objc2-core-media")]
        /// Inserts a timeRange of a cinematic source asset into the corresponding tracks of a composition
        /// - Parameters:
        /// - timeRange: time range of the cinematic asset to be inserted
        /// - assetInfo: identifies the tracks of the cinematic asset to be inserted
        /// - atTime: the time at which the inserted tracks are to be presented by the composition; `kCMTimeInvalid` may be used to append at the end.
        /// - error: AVError if it fails, as with `-[AVMutableCompositionTrack insertTimeRange:ofTrack:atTime:error:]`
        /// - Returns: whether the insertion was successful
        #[unsafe(method(insertTimeRange:ofCinematicAssetInfo:atTime:error:_))]
        #[unsafe(method_family = none)]
        pub unsafe fn insertTimeRange_ofCinematicAssetInfo_atTime_error(
            &self,
            time_range: CMTimeRange,
            asset_info: &CNAssetInfo,
            start_time: CMTime,
        ) -> Result<(), Retained<NSError>>;
    );
}

/// Methods declared on superclass `CNAssetInfo`.
impl CNCompositionInfo {
    extern_methods!(
        #[unsafe(method(init))]
        #[unsafe(method_family = init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;

        #[unsafe(method(new))]
        #[unsafe(method_family = new)]
        pub unsafe fn new() -> Retained<Self>;
    );
}

mod private_AVMutableCompositionCNComposition {
    pub trait Sealed {}
}

/// Category "CNComposition" on [`AVMutableComposition`].
#[doc(alias = "CNComposition")]
pub unsafe trait AVMutableCompositionCNComposition:
    ClassType + Sized + private_AVMutableCompositionCNComposition::Sealed
{
    extern_methods!(
        #[cfg(feature = "objc2-core-media")]
        /// Adds a group of empty tracks associated with a cinematic asset to a mutable composition.
        /// - Returns: Information about the composition tracks added to the mutable composition.
        /// Be sure to call insertTimeRange on the result to specify at least one time range of cinematic asset you'd like in the composition.
        #[unsafe(method(addTracksForCinematicAssetInfo:preferredStartingTrackID:))]
        #[unsafe(method_family = none)]
        unsafe fn addTracksForCinematicAssetInfo_preferredStartingTrackID(
            &self,
            asset_info: &CNAssetInfo,
            preferred_starting_track_id: CMPersistentTrackID,
        ) -> Retained<CNCompositionInfo>;
    );
}

#[cfg(feature = "objc2-av-foundation")]
impl private_AVMutableCompositionCNComposition::Sealed for AVMutableComposition {}
#[cfg(feature = "objc2-av-foundation")]
unsafe impl AVMutableCompositionCNComposition for AVMutableComposition {}