Struct AVSampleBufferRenderSynchronizer

Source
#[repr(C)]
pub struct AVSampleBufferRenderSynchronizer { /* private fields */ }
Available on crate feature AVSampleBufferRenderSynchronizer only.
Expand description

AVSampleBufferRenderSynchronizer can synchronize multiple objects conforming to AVQueuedSampleBufferRendering to a single timebase.

See also Apple’s documentation

Implementations§

Source§

impl AVSampleBufferRenderSynchronizer

Source

pub unsafe fn timebase(&self) -> Retained<CMTimebase>

Available on crate feature objc2-core-media only.

The synchronizer’s rendering timebase, which governs how time stamps are interpreted.

By default, this timebase will be driven by the clock of an added AVSampleBufferAudioRenderer.

If no AVSampleBufferAudioRenderer has been added, the source clock will be the host time clock (mach_absolute_time with the appropriate timescale conversion; this is the same as Core Animation’s CACurrentMediaTime).

The timebase is a read-only timebase. Use the rate property and corresponding methods to adjust the timebase.

Source

pub unsafe fn rate(&self) -> c_float

Playback rate.

Indicates the current rate of rendering. A value of 0.0 means “stopped”; a value of 1.0 means “play at the natural rate of the media”. Must be greater than or equal to 0.0.

Source

pub unsafe fn setRate(&self, rate: c_float)

Setter for rate.

Source

pub unsafe fn currentTime(&self) -> CMTime

Available on crate feature objc2-core-media only.

Returns the current time of the synchronizer.

Returns: A CMTime

Returns the current time of the synchronizer. Not key-value observable; use -addPeriodicTimeObserverForInterval:queue:usingBlock: instead.

Source

pub unsafe fn setRate_time(&self, rate: c_float, time: CMTime)

Available on crate feature objc2-core-media only.

Sets the timebase’s time and rate.

Parameter rate: A new timebase rate to set. Must be greater than or equal to 0.0

Parameter time: A new time to set. Must be greater than or equal to kCMTimeZero, or kCMTimeInvalid

Sets the timebase’s time to time and then sets the rendering rate to rate. A rate value of 0.0 means “stopped”; a rate value of 1.0 means “play at the natural rate of the media”. Use kCMTimeInvalid for time to not modify the timebase’s time. Note that this method updates the rate property synchronously, but the timebase is updated asynchronously.

Source

pub unsafe fn setRate_time_atHostTime( &self, rate: c_float, time: CMTime, host_time: CMTime, )

Available on crate feature objc2-core-media only.

Simultaneously sets the playback rate and the relationship between the current time and host time.

Parameter rate: A new timebase rate to set. Must be greater than or equal to 0.0

Parameter time: A new timebase time to set. Must be greater than or equal to kCMTimeZero, or kCMTimeInvalid

Parameter hostTime: A new hostTime to set. Must be greater than or equal to kCMTimeZero, or kCMTimeInvalid

You can use this function to synchronize playback with an external activity.

The timebase is adjusted so that its time will be (or was) time when host time is (or was) hostTime. In other words: if hostTime is in the past, the timebase’s time will be interpolated as though the timebase has been running at the requested rate since that time. If hostTime is in the future, the timebase will immediately start running at the requested rate from an earlier time so that it will reach the requested time at the requested hostTime. It is a responsibility of the client to ensure that proper time and hostTime is set. This method will not attempt to validate improper time, hostTime values. In addition, it is also the caller’s responsibility to enqueue samples in the connected renderers that match the timeline defined here. Note that any buffers that are in the past of the defined timeline will still be processed by the renderers.

The recommended approach is to use the output presentation time of the first buffer enqueued in the renderers as time and and an associated hostTime in the future. Example use: CMTime startTime = …; __block CMTime nextBufferTime = startTime; [renderer requestMediaDataWhenReadyOnQueue:queue usingBlock:^{ … CMSampleBufferRef sampleBuffer = [self generateSampleBufferFor: nextBufferTime]; [renderer enqueueSampleBuffer:sampleBuffer]; … }]; CMTime inOneSecond = CMTimeAdd(CMClockGetTime(CMClockGetHostTimeClock()), CMTimeMake(1, 1)); [synchronizer setRate:rate time:startTime atHostTime:inOneSecond];

Also note that this method updates the rate property synchronously, but the timebase is updated asynchronously.

Source

pub unsafe fn delaysRateChangeUntilHasSufficientMediaData(&self) -> bool

Indicates whether the playback should be started immediately on rate change request.

If set to YES, playback will be delayed if the value of hasSufficientMediaDataForReliablePlaybackStart of any added renderer is NO. If set to NO, playback will attempt to start immediately regardless of the value of hasSufficientMediaDataForReliablePlaybackStart of added renderers. Default is YES.

Source

pub unsafe fn setDelaysRateChangeUntilHasSufficientMediaData( &self, delays_rate_change_until_has_sufficient_media_data: bool, )

Source§

impl AVSampleBufferRenderSynchronizer

Methods declared on superclass NSObject.

Source

pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>

Source

pub unsafe fn new() -> Retained<Self>

Source§

impl AVSampleBufferRenderSynchronizer

AVSampleBufferRenderSynchronizerRendererManagement.

Source

pub unsafe fn renderers( &self, ) -> Retained<NSArray<ProtocolObject<dyn AVQueuedSampleBufferRendering>>>

Available on crate feature AVQueuedSampleBufferRendering only.

Array of id <AVQueuedSampleBufferRendering

currently attached to the synchronizer.

A list of renderers added to and not removed from the synchronizer. The list also includes renderers that have been scheduled to be removed but have not yet been removed.

This property is not KVO observable.

Source

pub unsafe fn addRenderer( &self, renderer: &ProtocolObject<dyn AVQueuedSampleBufferRendering>, )

Available on crate feature AVQueuedSampleBufferRendering only.

Adds a renderer to the list of renderers under the synchronizer’s control.

Parameter renderer: An object conforming to AVQueuedSampleBufferRendering to be synchronized by this synchronizer.

Adds a renderer to begin operating with the synchronizer’s timebase.

This method can be called while rate is non-0.0.

Source

pub unsafe fn removeRenderer_atTime_completionHandler( &self, renderer: &ProtocolObject<dyn AVQueuedSampleBufferRendering>, time: CMTime, completion_handler: Option<&DynBlock<dyn Fn(Bool)>>, )

Available on crate features AVQueuedSampleBufferRendering and block2 and objc2-core-media only.

Removes a renderer from the list of renderers under the synchronizer’s control.

Parameter renderer: An object conforming to AVQueuedSampleBufferRendering currently synchronized by this synchronizer to no longer be synchronized by the synchronizer.

Parameter time: The time on the timebase’s timeline at which the renderer should be removed.

Parameter completionHandler: Optional. A block called when the renderer is removed from the synchronizer. If provided, this block will always be called with didRemoveRenderer indicating whether the renderer was removed by this scheduled removal.

This method can be called while rate is non-0.0.

time is used to schedule future removals. If the time is in the past, the renderer will be removed immediately. kCMTimeInvalid can also be used to force immediate removal.

This method removes the renderer asynchronously. The method can be called more than once, with a subsequent scheduled removal replacing a previously scheduled removal.

Clients may provide an optional completionHandler block to be notified when the scheduled removal completes. If provided, completionHandler will always be called with the following values for didRemoveRenderer:

  • If the renderer has not been added to this synchronizer, completionHandler will be called and didRemoveRenderer will be NO.
  • If a removal of a particular renderer is scheduled after another removal of that same renderer has already been scheduled but not yet occurred, the previously-scheduled removal’s completionHandler will be called and didRemoveRenderer will be NO. The new scheduled removal’s completionHandler will not be called until it is replaced by another scheduled removal or the renderer is actually removed.
  • When the renderer is removed due to a scheduled removal, the completionHandler provided when that removal was scheduled will be called and didRemoveRenderer will be YES.
Source§

impl AVSampleBufferRenderSynchronizer

AVSampleBufferRenderSynchronizerTimeObservation.

Source

pub unsafe fn addPeriodicTimeObserverForInterval_queue_usingBlock( &self, interval: CMTime, queue: Option<&DispatchQueue>, block: &DynBlock<dyn Fn(CMTime)>, ) -> Retained<AnyObject>

Available on crate features block2 and dispatch2 and objc2-core-media only.

Requests invocation of a block during rendering to report changing time.

Parameter interval: The interval of invocation of the block during normal rendering, according to progress of the current time of the timebase.

Parameter queue: The serial queue onto which block should be enqueued. If you pass NULL, the main queue (obtained using dispatch_get_main_queue()) will be used. Passing a concurrent queue to this method will result in undefined behavior.

Parameter block: The block to be invoked periodically.

Returns: An object conforming to the NSObject protocol. You must retain this returned value as long as you want the time observer to be invoked by the synchronizer. Pass this object to -removeTimeObserver: to cancel time observation.

The block is invoked periodically at the interval specified, interpreted according to the timeline of the timebase. The block is also invoked whenever time jumps and whenever rendering starts or stops.

If the interval corresponds to a very short interval in real time, the synchronizer may invoke the block less frequently than requested. Even so, the synchronizer will invoke the block sufficiently often for the client to update indications of the current time appropriately in its end-user interface.

Each call to -addPeriodicTimeObserverForInterval:queue:usingBlock: should be paired with a corresponding call to -removeTimeObserver:. Releasing the observer object without a call to -removeTimeObserver: will result in undefined behavior.

Source

pub unsafe fn addBoundaryTimeObserverForTimes_queue_usingBlock( &self, times: &NSArray<NSValue>, queue: Option<&DispatchQueue>, block: &DynBlock<dyn Fn()>, ) -> Retained<AnyObject>

Available on crate features block2 and dispatch2 only.

Requests invocation of a block when specified times are traversed during normal rendering.

Parameter times: The times for which the observer requests notification, supplied as an array of NSValues carrying CMTimes.

Parameter queue: The serial queue onto which block should be enqueued. If you pass NULL, the main queue (obtained using dispatch_get_main_queue()) will be used. Passing a concurrent queue to this method will result in undefined behavior.

Parameter block: The block to be invoked when any of the specified times is crossed during normal rendering.

Returns: An object conforming to the NSObject protocol. You must retain this returned value as long as you want the time observer to be invoked by the synchronizer. Pass this object to -removeTimeObserver: to cancel time observation.

Each call to -addPeriodicTimeObserverForInterval:queue:usingBlock: should be paired with a corresponding call to -removeTimeObserver:. Releasing the observer object without a call to -removeTimeObserver: will result in undefined behavior.

Source

pub unsafe fn removeTimeObserver(&self, observer: &AnyObject)

Cancels a previously registered time observer.

Parameter observer: An object returned by a previous call to -addPeriodicTimeObserverForInterval:queue:usingBlock: or -addBoundaryTimeObserverForTimes:queue:usingBlock:.

Upon return, the caller is guaranteed that no new time observer blocks will begin executing. Depending on the calling thread and the queue used to add the time observer, an in-flight block may continue to execute after this method returns. You can guarantee synchronous time observer removal by enqueuing the call to -removeTimeObserver: on that queue. Alternatively, call dispatch_sync(queue, ^{}) after -removeTimeObserver: to wait for any in-flight blocks to finish executing. -removeTimeObserver: should be used to explicitly cancel each time observer added using -addPeriodicTimeObserverForInterval:queue:usingBlock: and -addBoundaryTimeObserverForTimes:queue:usingBlock:.

This method throws an exception for any of the following reasons:

  • observer was added by another AVSampleBufferRenderSynchronizer
  • observer was not returned by either -addPeriodicTimeObserverForInterval:queue:usingBlock: -addBoundaryTimeObserverForTimes:queue:usingBlock:

Methods from Deref<Target = NSObject>§

Source

pub fn doesNotRecognizeSelector(&self, sel: Sel) -> !

Handle messages the object doesn’t recognize.

See Apple’s documentation for details.

Methods from Deref<Target = AnyObject>§

Source

pub fn class(&self) -> &'static AnyClass

Dynamically find the class of this object.

§Panics

May panic if the object is invalid (which may be the case for objects returned from unavailable init/new methods).

§Example

Check that an instance of NSObject has the precise class NSObject.

use objc2::ClassType;
use objc2::runtime::NSObject;

let obj = NSObject::new();
assert_eq!(obj.class(), NSObject::class());
Source

pub unsafe fn get_ivar<T>(&self, name: &str) -> &T
where T: Encode,

👎Deprecated: this is difficult to use correctly, use Ivar::load instead.

Use Ivar::load instead.

§Safety

The object must have an instance variable with the given name, and it must be of type T.

See Ivar::load_ptr for details surrounding this.

Source

pub fn downcast_ref<T>(&self) -> Option<&T>
where T: DowncastTarget,

Attempt to downcast the object to a class of type T.

This is the reference-variant. Use Retained::downcast if you want to convert a retained object to another type.

§Mutable classes

Some classes have immutable and mutable variants, such as NSString and NSMutableString.

When some Objective-C API signature says it gives you an immutable class, it generally expects you to not mutate that, even though it may technically be mutable “under the hood”.

So using this method to convert a NSString to a NSMutableString, while not unsound, is generally frowned upon unless you created the string yourself, or the API explicitly documents the string to be mutable.

See Apple’s documentation on mutability and on isKindOfClass: for more details.

§Generic classes

Objective-C generics are called “lightweight generics”, and that’s because they aren’t exposed in the runtime. This makes it impossible to safely downcast to generic collections, so this is disallowed by this method.

You can, however, safely downcast to generic collections where all the type-parameters are AnyObject.

§Panics

This works internally by calling isKindOfClass:. That means that the object must have the instance method of that name, and an exception will be thrown (if CoreFoundation is linked) or the process will abort if that is not the case. In the vast majority of cases, you don’t need to worry about this, since both root objects NSObject and NSProxy implement this method.

§Examples

Cast an NSString back and forth from NSObject.

use objc2::rc::Retained;
use objc2_foundation::{NSObject, NSString};

let obj: Retained<NSObject> = NSString::new().into_super();
let string = obj.downcast_ref::<NSString>().unwrap();
// Or with `downcast`, if we do not need the object afterwards
let string = obj.downcast::<NSString>().unwrap();

Try (and fail) to cast an NSObject to an NSString.

use objc2_foundation::{NSObject, NSString};

let obj = NSObject::new();
assert!(obj.downcast_ref::<NSString>().is_none());

Try to cast to an array of strings.

use objc2_foundation::{NSArray, NSObject, NSString};

let arr = NSArray::from_retained_slice(&[NSObject::new()]);
// This is invalid and doesn't type check.
let arr = arr.downcast_ref::<NSArray<NSString>>();

This fails to compile, since it would require enumerating over the array to ensure that each element is of the desired type, which is a performance pitfall.

Downcast when processing each element instead.

use objc2_foundation::{NSArray, NSObject, NSString};

let arr = NSArray::from_retained_slice(&[NSObject::new()]);

for elem in arr {
    if let Some(data) = elem.downcast_ref::<NSString>() {
        // handle `data`
    }
}

Trait Implementations§

Source§

impl AsRef<AVSampleBufferRenderSynchronizer> for AVSampleBufferRenderSynchronizer

Source§

fn as_ref(&self) -> &Self

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl AsRef<AnyObject> for AVSampleBufferRenderSynchronizer

Source§

fn as_ref(&self) -> &AnyObject

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl AsRef<NSObject> for AVSampleBufferRenderSynchronizer

Source§

fn as_ref(&self) -> &NSObject

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl Borrow<AnyObject> for AVSampleBufferRenderSynchronizer

Source§

fn borrow(&self) -> &AnyObject

Immutably borrows from an owned value. Read more
Source§

impl Borrow<NSObject> for AVSampleBufferRenderSynchronizer

Source§

fn borrow(&self) -> &NSObject

Immutably borrows from an owned value. Read more
Source§

impl ClassType for AVSampleBufferRenderSynchronizer

Source§

const NAME: &'static str = "AVSampleBufferRenderSynchronizer"

The name of the Objective-C class that this type represents. Read more
Source§

type Super = NSObject

The superclass of this class. Read more
Source§

type ThreadKind = <<AVSampleBufferRenderSynchronizer as ClassType>::Super as ClassType>::ThreadKind

Whether the type can be used from any thread, or from only the main thread. Read more
Source§

fn class() -> &'static AnyClass

Get a reference to the Objective-C class that this type represents. Read more
Source§

fn as_super(&self) -> &Self::Super

Get an immutable reference to the superclass.
Source§

impl Debug for AVSampleBufferRenderSynchronizer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Deref for AVSampleBufferRenderSynchronizer

Source§

type Target = NSObject

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl Hash for AVSampleBufferRenderSynchronizer

Source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Message for AVSampleBufferRenderSynchronizer

Source§

fn retain(&self) -> Retained<Self>
where Self: Sized,

Increment the reference count of the receiver. Read more
Source§

impl NSObjectProtocol for AVSampleBufferRenderSynchronizer

Source§

fn isEqual(&self, other: Option<&AnyObject>) -> bool
where Self: Sized + Message,

Check whether the object is equal to an arbitrary other object. Read more
Source§

fn hash(&self) -> usize
where Self: Sized + Message,

An integer that can be used as a table address in a hash table structure. Read more
Source§

fn isKindOfClass(&self, cls: &AnyClass) -> bool
where Self: Sized + Message,

Check if the object is an instance of the class, or one of its subclasses. Read more
Source§

fn is_kind_of<T>(&self) -> bool
where T: ClassType, Self: Sized + Message,

👎Deprecated: use isKindOfClass directly, or cast your objects with AnyObject::downcast_ref
Check if the object is an instance of the class type, or one of its subclasses. Read more
Source§

fn isMemberOfClass(&self, cls: &AnyClass) -> bool
where Self: Sized + Message,

Check if the object is an instance of a specific class, without checking subclasses. Read more
Source§

fn respondsToSelector(&self, aSelector: Sel) -> bool
where Self: Sized + Message,

Check whether the object implements or inherits a method with the given selector. Read more
Source§

fn conformsToProtocol(&self, aProtocol: &AnyProtocol) -> bool
where Self: Sized + Message,

Check whether the object conforms to a given protocol. Read more
Source§

fn description(&self) -> Retained<NSObject>
where Self: Sized + Message,

A textual representation of the object. Read more
Source§

fn debugDescription(&self) -> Retained<NSObject>
where Self: Sized + Message,

A textual representation of the object to use when debugging. Read more
Source§

fn isProxy(&self) -> bool
where Self: Sized + Message,

Check whether the receiver is a subclass of the NSProxy root class instead of the usual NSObject. Read more
Source§

fn retainCount(&self) -> usize
where Self: Sized + Message,

The reference count of the object. Read more
Source§

impl PartialEq for AVSampleBufferRenderSynchronizer

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl RefEncode for AVSampleBufferRenderSynchronizer

Source§

const ENCODING_REF: Encoding = <NSObject as ::objc2::RefEncode>::ENCODING_REF

The Objective-C type-encoding for a reference of this type. Read more
Source§

impl DowncastTarget for AVSampleBufferRenderSynchronizer

Source§

impl Eq for AVSampleBufferRenderSynchronizer

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<'a, T> AnyThread for T
where T: ClassType<ThreadKind = dyn AnyThread + 'a> + ?Sized,

Source§

fn alloc() -> Allocated<Self>
where Self: Sized + ClassType,

Allocate a new instance of the class. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> AutoreleaseSafe for T
where T: ?Sized,