pub struct CNScript { /* private fields */ }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
impl CNScript
Sourcepub 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.
pub unsafe fn loadFromAsset_changes_progress_completionHandler( asset: &AVAsset, changes: Option<&CNScriptChanges>, progress: Option<&NSProgress>, completion_handler: &DynBlock<dyn Fn(*mut CNScript, *mut NSError)>, )
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.
Sourcepub unsafe fn reloadWithChanges(&self, changes: Option<&CNScriptChanges>)
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.
Sourcepub unsafe fn changes(&self) -> Retained<CNScriptChanges>
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.
Sourcepub unsafe fn changesTrimmedByTimeRange(
&self,
time_range: CMTimeRange,
) -> Retained<CNScriptChanges>
Available on crate feature objc2-core-media only.
pub unsafe fn changesTrimmedByTimeRange( &self, time_range: CMTimeRange, ) -> Retained<CNScriptChanges>
objc2-core-media only.Changes trimmed and time range shifted to start at zero — for use with a similarly trimmed cinematic asset.
Sourcepub unsafe fn timeRange(&self) -> CMTimeRange
Available on crate feature objc2-core-media only.
pub unsafe fn timeRange(&self) -> CMTimeRange
objc2-core-media only.The time range of the cinematic asset. All frames, decisions, and detections are within this time range.
Sourcepub unsafe fn frameAtTime_tolerance(
&self,
time: CMTime,
tolerance: CMTime,
) -> Option<Retained<CNScriptFrame>>
Available on crate feature objc2-core-media only.
pub unsafe fn frameAtTime_tolerance( &self, time: CMTime, tolerance: CMTime, ) -> Option<Retained<CNScriptFrame>>
objc2-core-media only.The closest frame to the given time within the given tolerance. Returns nil if there are none.
Sourcepub unsafe fn framesInTimeRange(
&self,
time_range: CMTimeRange,
) -> Retained<NSArray<CNScriptFrame>>
Available on crate feature objc2-core-media only.
pub unsafe fn framesInTimeRange( &self, time_range: CMTimeRange, ) -> Retained<NSArray<CNScriptFrame>>
objc2-core-media only.All frames within the given time range.
Sourcepub unsafe fn decisionAtTime_tolerance(
&self,
time: CMTime,
tolerance: CMTime,
) -> Option<Retained<CNDecision>>
Available on crate features CNDecision and objc2-core-media only.
pub unsafe fn decisionAtTime_tolerance( &self, time: CMTime, tolerance: CMTime, ) -> Option<Retained<CNDecision>>
CNDecision and objc2-core-media only.The closest decision to the given time within the given tolerance. Returns nil if there are none.
Sourcepub unsafe fn decisionsInTimeRange(
&self,
time_range: CMTimeRange,
) -> Retained<NSArray<CNDecision>>
Available on crate features CNDecision and objc2-core-media only.
pub unsafe fn decisionsInTimeRange( &self, time_range: CMTimeRange, ) -> Retained<NSArray<CNDecision>>
CNDecision and objc2-core-media only.All decisions within the given time range.
Sourcepub unsafe fn decisionAfterTime(
&self,
time: CMTime,
) -> Option<Retained<CNDecision>>
Available on crate features CNDecision and objc2-core-media only.
pub unsafe fn decisionAfterTime( &self, time: CMTime, ) -> Option<Retained<CNDecision>>
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.
Sourcepub unsafe fn decisionBeforeTime(
&self,
time: CMTime,
) -> Option<Retained<CNDecision>>
Available on crate features CNDecision and objc2-core-media only.
pub unsafe fn decisionBeforeTime( &self, time: CMTime, ) -> Option<Retained<CNDecision>>
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.
Sourcepub unsafe fn primaryDecisionAtTime(
&self,
time: CMTime,
) -> Option<Retained<CNDecision>>
Available on crate features CNDecision and objc2-core-media only.
pub unsafe fn primaryDecisionAtTime( &self, time: CMTime, ) -> Option<Retained<CNDecision>>
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.
Sourcepub unsafe fn secondaryDecisionAtTime(
&self,
time: CMTime,
) -> Option<Retained<CNDecision>>
Available on crate features CNDecision and objc2-core-media only.
pub unsafe fn secondaryDecisionAtTime( &self, time: CMTime, ) -> Option<Retained<CNDecision>>
CNDecision and objc2-core-media only.The secondary decision that is being transitioned towards if the given time is during a focus transition.
Sourcepub unsafe fn timeRangeOfTransitionAfterDecision(
&self,
decision: &CNDecision,
) -> CMTimeRange
Available on crate features CNDecision and objc2-core-media only.
pub unsafe fn timeRangeOfTransitionAfterDecision( &self, decision: &CNDecision, ) -> CMTimeRange
CNDecision and objc2-core-media only.The time range during which the focus transition away from the given decision occurs.
Sourcepub unsafe fn timeRangeOfTransitionBeforeDecision(
&self,
decision: &CNDecision,
) -> CMTimeRange
Available on crate features CNDecision and objc2-core-media only.
pub unsafe fn timeRangeOfTransitionBeforeDecision( &self, decision: &CNDecision, ) -> CMTimeRange
CNDecision and objc2-core-media only.The time range during which the focus transition towards the given decision occurs.
Sourcepub unsafe fn userDecisionsInTimeRange(
&self,
time_range: CMTimeRange,
) -> Retained<NSArray<CNDecision>>
Available on crate features CNDecision and objc2-core-media only.
pub unsafe fn userDecisionsInTimeRange( &self, time_range: CMTimeRange, ) -> Retained<NSArray<CNDecision>>
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.
Sourcepub unsafe fn baseDecisionsInTimeRange(
&self,
time_range: CMTimeRange,
) -> Retained<NSArray<CNDecision>>
Available on crate features CNDecision and objc2-core-media only.
pub unsafe fn baseDecisionsInTimeRange( &self, time_range: CMTimeRange, ) -> Retained<NSArray<CNDecision>>
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.
Sourcepub unsafe fn detectionTrackForID(
&self,
detection_id: CNDetectionID,
) -> Option<Retained<CNDetectionTrack>>
Available on crate features CNDetection and CNDetectionTrack only.
pub unsafe fn detectionTrackForID( &self, detection_id: CNDetectionID, ) -> Option<Retained<CNDetectionTrack>>
CNDetection and CNDetectionTrack only.A detection track representing all detections with the given detectionID over the entire cinematic script.
Sourcepub unsafe fn detectionTrackForDecision(
&self,
decision: &CNDecision,
) -> Option<Retained<CNDetectionTrack>>
Available on crate features CNDecision and CNDetectionTrack only.
pub unsafe fn detectionTrackForDecision( &self, decision: &CNDecision, ) -> Option<Retained<CNDetectionTrack>>
CNDecision and CNDetectionTrack only.A detection track representing all detections that would be chosen by a given decision.
Sourcepub unsafe fn fNumber(&self) -> c_float
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.
Sourcepub unsafe fn setFNumber(&self, f_number: c_float)
pub unsafe fn setFNumber(&self, f_number: c_float)
Setter for fNumber.
Sourcepub unsafe fn addUserDecision(&self, decision: &CNDecision) -> bool
Available on crate feature CNDecision only.
pub unsafe fn addUserDecision(&self, decision: &CNDecision) -> bool
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
Sourcepub unsafe fn removeUserDecision(&self, decision: &CNDecision) -> bool
Available on crate feature CNDecision only.
pub unsafe fn removeUserDecision(&self, decision: &CNDecision) -> bool
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
Sourcepub unsafe fn removeAllUserDecisions(&self)
pub unsafe fn removeAllUserDecisions(&self)
Remove all user decisions and revert to base decisions only.
Sourcepub unsafe fn addDetectionTrack(
&self,
detection_track: &CNDetectionTrack,
) -> CNDetectionID
Available on crate features CNDetection and CNDetectionTrack only.
pub unsafe fn addDetectionTrack( &self, detection_track: &CNDetectionTrack, ) -> CNDetectionID
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.
Sourcepub unsafe fn removeDetectionTrack(
&self,
detection_track: &CNDetectionTrack,
) -> bool
Available on crate feature CNDetectionTrack only.
pub unsafe fn removeDetectionTrack( &self, detection_track: &CNDetectionTrack, ) -> bool
CNDetectionTrack only.Remove user created detection track.
Tracks created at recording time cannot be removed.
- Returns: whether removal was successful
Sourcepub unsafe fn addedDetectionTracks(&self) -> Retained<NSArray<CNDetectionTrack>>
Available on crate feature CNDetectionTrack only.
pub unsafe fn addedDetectionTracks(&self) -> Retained<NSArray<CNDetectionTrack>>
CNDetectionTrack only.All detection tracks that have been added since recording.
pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>
pub unsafe fn new() -> Retained<Self>
Methods from Deref<Target = NSObject>§
Sourcepub fn doesNotRecognizeSelector(&self, sel: Sel) -> !
pub fn doesNotRecognizeSelector(&self, sel: Sel) -> !
Handle messages the object doesn’t recognize.
See Apple’s documentation for details.
Methods from Deref<Target = AnyObject>§
Sourcepub fn class(&self) -> &'static AnyClass
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());Sourcepub unsafe fn get_ivar<T>(&self, name: &str) -> &Twhere
T: Encode,
👎Deprecated: this is difficult to use correctly, use Ivar::load instead.
pub unsafe fn get_ivar<T>(&self, name: &str) -> &Twhere
T: Encode,
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.
Sourcepub fn downcast_ref<T>(&self) -> Option<&T>where
T: DowncastTarget,
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 ClassType for CNScript
impl ClassType for CNScript
Source§const NAME: &'static str = "CNScript"
const NAME: &'static str = "CNScript"
Source§type ThreadKind = <<CNScript as ClassType>::Super as ClassType>::ThreadKind
type ThreadKind = <<CNScript as ClassType>::Super as ClassType>::ThreadKind
Source§impl NSObjectProtocol for CNScript
impl NSObjectProtocol for CNScript
Source§fn isEqual(&self, other: Option<&AnyObject>) -> bool
fn isEqual(&self, other: Option<&AnyObject>) -> bool
Source§fn hash(&self) -> usize
fn hash(&self) -> usize
Source§fn isKindOfClass(&self, cls: &AnyClass) -> bool
fn isKindOfClass(&self, cls: &AnyClass) -> bool
Source§fn is_kind_of<T>(&self) -> bool
fn is_kind_of<T>(&self) -> bool
isKindOfClass directly, or cast your objects with AnyObject::downcast_ref