use crate::{arc, av, define_cls, define_obj_type, ns, objc};
#[cfg(feature = "cm")]
use crate::cm;
define_obj_type!(
#[doc(alias = "AVAssetReaderOutput")]
pub ReaderOutput(ns::Id)
);
define_obj_type!(
#[doc(alias = "AVAssetReaderTrackOutput")]
pub ReaderTrackOutput(ReaderOutput)
);
define_obj_type!(
#[doc(alias = "AVAssetReaderAudioMixOutput")]
pub ReaderAudioMixOutput(ReaderOutput)
);
define_obj_type!(
#[doc(alias = "AVAssetReaderVideoCompositionOutput")]
pub ReaderVideoCompositionOutput(ReaderOutput)
);
define_obj_type!(
#[doc(alias = "AVAssetReaderSampleReferenceOutput")]
pub ReaderSampleReferenceOutput(ReaderOutput)
);
define_obj_type!(
#[doc(alias = "AVAssetReaderOutputMetadataAdaptor")]
pub ReaderOutputMetadataAdaptor(ns::Id)
);
define_obj_type!(
#[doc(alias = "AVAssetReaderOutputCaptionAdaptor")]
pub ReaderOutputCaptionAdaptor(ns::Id)
);
impl ReaderOutput {
#[objc::msg_send(mediaType)]
pub fn media_type(&self) -> arc::R<av::MediaType>;
#[objc::msg_send(alwaysCopiesSampleData)]
pub fn always_copies_sample_data(&self) -> bool;
#[objc::msg_send(setAlwaysCopiesSampleData:)]
pub fn set_always_copies_sample_data(&mut self, value: bool);
#[objc::msg_send(supportsRandomAccess)]
pub fn supports_random_access(&self) -> bool;
#[cfg(feature = "cm")]
#[objc::msg_send(copyNextSampleBuffer)]
pub unsafe fn next_sample_buf_throws(&mut self) -> Option<arc::Retained<cm::SampleBuf>>;
#[cfg(feature = "cm")]
#[inline]
pub fn next_sample_buf<'ear>(&mut self) -> ns::ExResult<'ear, Option<arc::R<cm::SampleBuf>>> {
ns::try_catch(|| unsafe { self.next_sample_buf_throws() })
}
}
impl arc::A<ReaderTrackOutput> {
#[objc::msg_send(initWithTrack:outputSettings:)]
pub fn init_with_track_throws(
self,
track: &av::asset::Track,
output_settings: Option<&ns::Dictionary<ns::String, ns::Id>>,
) -> arc::R<ReaderTrackOutput>;
}
impl ReaderTrackOutput {
define_cls!(AV_ASSET_READER_TRACK_OUTPUT);
pub fn with_track_throws(
track: &av::asset::Track,
output_settings: Option<&ns::Dictionary<ns::String, ns::Id>>,
) -> arc::R<Self> {
Self::alloc().init_with_track_throws(track, output_settings)
}
pub fn with_track<'ear>(
track: &av::asset::Track,
output_settings: Option<&ns::Dictionary<ns::String, ns::Id>>,
) -> ns::ExResult<'ear, arc::R<Self>> {
ns::try_catch(|| Self::with_track_throws(track, output_settings))
}
#[objc::msg_send(resetForReadingTimeRanges:)]
pub fn reset_for_reading_time_ranges(&mut self, ranges: &ns::Array<ns::Value>);
}
unsafe extern "C" {
static AV_ASSET_READER_TRACK_OUTPUT: &'static objc::Class<ReaderTrackOutput>;
}