CNScript

Struct CNScript 

Source
pub struct CNScript { /* private fields */ }
Available on crate feature CNScript only.
Expand description

Database of focus decisions with methods to change them. Knows what has been detected in each frame and which detection is being focused on. All operations are executed in a thread-safe manner, but that also means that a long-running update can stall a lookup. Best practice is to lookup what you need up front (outside your critical code) and pass the immutable results to where it’s needed. That way, you’re not blocked when you access the information, say inside the rendering portion of your code.

See also Apple’s documentation

Implementations§

Source§

impl CNScript

Source

pub unsafe fn loadFromAsset_changes_progress_completionHandler( asset: &AVAsset, changes: Option<&CNScriptChanges>, progress: Option<&NSProgress>, completion_handler: &DynBlock<dyn Fn(*mut CNScript, *mut NSError)>, )

Available on crate features block2 and objc2-av-foundation only.

Load cinematic script asynchronously from a cinematic asset.

  • Parameters:
  • asset: the cinematic asset to be loaded.
  • changes: optional changes since asset was recorded. Can be obtained from a previous editing session. If nil, the asset is loaded as originally recorded.
  • progress: optional progress object to track progress or cancel loading. Represents just the loading of this asset. Create with desired total unit count or use zero to have the unit count filled in automatically. If nil, no progress is reported.
  • completionHandler: called with the loaded cinematic script when done, or with with an error if it fails. If progress is canceled before it completes, the completion handler is called with an error.
Source

pub unsafe fn reloadWithChanges(&self, changes: Option<&CNScriptChanges>)

Reload the cinematic script with optional changes applied, removing any previous changes made. This can be more efficient than loading the asset from scratch.

  • Parameters:
  • changes: optional changes since asset was recorded. Can be obtained from a previous editing session. If nil, the asset is reloaded as originally recorded.
Source

pub unsafe fn changes(&self) -> Retained<CNScriptChanges>

Changes made since cinematic asset was recorded. Can be used to checkpoint and later restore changes made so far.

Source

pub unsafe fn changesTrimmedByTimeRange( &self, time_range: CMTimeRange, ) -> Retained<CNScriptChanges>

Available on crate feature objc2-core-media only.

Changes trimmed and time range shifted to start at zero — for use with a similarly trimmed cinematic asset.

Source

pub unsafe fn timeRange(&self) -> CMTimeRange

Available on crate feature objc2-core-media only.

The time range of the cinematic asset. All frames, decisions, and detections are within this time range.

Source

pub unsafe fn frameAtTime_tolerance( &self, time: CMTime, tolerance: CMTime, ) -> Option<Retained<CNScriptFrame>>

Available on crate feature objc2-core-media only.

The closest frame to the given time within the given tolerance. Returns nil if there are none.

Source

pub unsafe fn framesInTimeRange( &self, time_range: CMTimeRange, ) -> Retained<NSArray<CNScriptFrame>>

Available on crate feature objc2-core-media only.

All frames within the given time range.

Source

pub unsafe fn decisionAtTime_tolerance( &self, time: CMTime, tolerance: CMTime, ) -> Option<Retained<CNDecision>>

Available on crate features CNDecision and objc2-core-media only.

The closest decision to the given time within the given tolerance. Returns nil if there are none.

Source

pub unsafe fn decisionsInTimeRange( &self, time_range: CMTimeRange, ) -> Retained<NSArray<CNDecision>>

Available on crate features CNDecision and objc2-core-media only.

All decisions within the given time range.

Source

pub unsafe fn decisionAfterTime( &self, time: CMTime, ) -> Option<Retained<CNDecision>>

Available on crate features CNDecision and objc2-core-media only.

The decision that occurs after the given time. Pass the time of an existing decision to find the next one.

Source

pub unsafe fn decisionBeforeTime( &self, time: CMTime, ) -> Option<Retained<CNDecision>>

Available on crate features CNDecision and objc2-core-media only.

The decision that occurs before the given time. Pass the time of an existing decisions to find the previous one.

Source

pub unsafe fn primaryDecisionAtTime( &self, time: CMTime, ) -> Option<Retained<CNDecision>>

Available on crate features CNDecision and objc2-core-media only.

The primary decision that is in effect at the specified time, unless if it’s outside the time range of the cinematic script. Also represents the decision that is being transitioned away from if the given time is during a focus transition.

Source

pub unsafe fn secondaryDecisionAtTime( &self, time: CMTime, ) -> Option<Retained<CNDecision>>

Available on crate features CNDecision and objc2-core-media only.

The secondary decision that is being transitioned towards if the given time is during a focus transition.

Source

pub unsafe fn timeRangeOfTransitionAfterDecision( &self, decision: &CNDecision, ) -> CMTimeRange

Available on crate features CNDecision and objc2-core-media only.

The time range during which the focus transition away from the given decision occurs.

Source

pub unsafe fn timeRangeOfTransitionBeforeDecision( &self, decision: &CNDecision, ) -> CMTimeRange

Available on crate features CNDecision and objc2-core-media only.

The time range during which the focus transition towards the given decision occurs.

Source

pub unsafe fn userDecisionsInTimeRange( &self, time_range: CMTimeRange, ) -> Retained<NSArray<CNDecision>>

Available on crate features CNDecision and objc2-core-media only.

All user decisions in the given time range. Includes user decisions made during recording or added to the script.

Source

pub unsafe fn baseDecisionsInTimeRange( &self, time_range: CMTimeRange, ) -> Retained<NSArray<CNDecision>>

Available on crate features CNDecision and objc2-core-media only.

All base decisions made automatically during recording in the given time range. These apply if no user decision overrides them.

Source

pub unsafe fn detectionTrackForID( &self, detection_id: CNDetectionID, ) -> Option<Retained<CNDetectionTrack>>

Available on crate features CNDetection and CNDetectionTrack only.

A detection track representing all detections with the given detectionID over the entire cinematic script.

Source

pub unsafe fn detectionTrackForDecision( &self, decision: &CNDecision, ) -> Option<Retained<CNDetectionTrack>>

Available on crate features CNDecision and CNDetectionTrack only.

A detection track representing all detections that would be chosen by a given decision.

Source

pub unsafe fn fNumber(&self) -> c_float

The f/number to apply to the entire movie, initially set to that of the recorded movie.

Pass this to the rendering session in the rendering frame attributes to match the selected aperture. Change this property when the user selects a different aperture for the edited movie. Changes to this property are reflected in the script changes for later restoration.

Source

pub unsafe fn setFNumber(&self, f_number: c_float)

Setter for fNumber.

Source

pub unsafe fn addUserDecision(&self, decision: &CNDecision) -> bool

Available on crate feature CNDecision only.

Add a new user decision. Replaces an existing user decision if the times are identical.

Adding a decision can fail if the decision focuses on an detection or group that does not exist or if its time is not within the time range of the cinematic script.

  • Returns: whether adding was successful
Source

pub unsafe fn removeUserDecision(&self, decision: &CNDecision) -> bool

Available on crate feature CNDecision only.

Remove an existing user decision.

User decisions added to the script or those made at recording time (by tapping during recording) can be removed. Decisions that are not user decisions cannot be removed.

  • Returns: whether removal was successful
Source

pub unsafe fn removeAllUserDecisions(&self)

Remove all user decisions and revert to base decisions only.

Source

pub unsafe fn addDetectionTrack( &self, detection_track: &CNDetectionTrack, ) -> CNDetectionID

Available on crate features CNDetection and CNDetectionTrack only.

Add user created detection track.

  • Returns: the detectionID assigned to the added track, which can be used for later lookup or decision creation.
Source

pub unsafe fn removeDetectionTrack( &self, detection_track: &CNDetectionTrack, ) -> bool

Available on crate feature CNDetectionTrack only.

Remove user created detection track.

Tracks created at recording time cannot be removed.

  • Returns: whether removal was successful
Source

pub unsafe fn addedDetectionTracks(&self) -> Retained<NSArray<CNDetectionTrack>>

Available on crate feature CNDetectionTrack only.

All detection tracks that have been added since recording.

Source

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

Source

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

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<AnyObject> for CNScript

Source§

fn as_ref(&self) -> &AnyObject

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

impl AsRef<CNScript> for CNScript

Source§

fn as_ref(&self) -> &Self

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

impl AsRef<NSObject> for CNScript

Source§

fn as_ref(&self) -> &NSObject

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

impl Borrow<AnyObject> for CNScript

Source§

fn borrow(&self) -> &AnyObject

Immutably borrows from an owned value. Read more
Source§

impl Borrow<NSObject> for CNScript

Source§

fn borrow(&self) -> &NSObject

Immutably borrows from an owned value. Read more
Source§

impl ClassType for CNScript

Source§

const NAME: &'static str = "CNScript"

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 = <<CNScript 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 CNScript

Source§

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

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

impl Deref for CNScript

Source§

type Target = NSObject

The resulting type after dereferencing.
Source§

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

Dereferences the value.
Source§

impl Hash for CNScript

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 CNScript

Source§

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

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

impl NSObjectProtocol for CNScript

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 CNScript

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 CNScript

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 CNScript

Source§

impl Eq for CNScript

Source§

impl Send for CNScript

Source§

impl Sync for CNScript

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,