pub struct VTFrameProcessor { /* private fields */ }VTFrameProcessor and objc2 only.Expand description
Provides a unified interface you can use to apply video effects to frames.
The VTFrameProcessor gives access to a set of powerful video processing implementation suitable for different use cases.
A configuration object (conforming to the VTFrameProcessorConfiguration protocol) passes initialization and
configuration parameters for the processor. A Parameter object (conforming to the VTFrameProcessorParameters
protocol) provides the parameters for each individual processing operation. A Configuration object and a Parameter
object define each processor implementation. These Configuration and Parameters objects for each implementation are
defined in a processor-specific header file.
Use an instance of this class to apply configured video effects either directly to pixel buffers or as a
part of Metal pipeline. The video effect must be specified as a VTFrameProcessorConfiguration instance at session
startup. Once a session is started, you need to call one of the process methods for each input frame. After all input
frames have been provided, session must be ended for the system to finish all pending processing.
After you call the process function, you must not modify input and output buffers (including attachments) before the function returns or the system receives the callback, in the case of asynchronous processing.
See also Apple’s documentation
Implementations§
Source§impl VTFrameProcessor
impl VTFrameProcessor
Sourcepub unsafe fn init(this: Allocated<Self>) -> Retained<Self>
pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>
Create a new instance of the frame processor.
Sourcepub unsafe fn startSessionWithConfiguration_error(
&self,
configuration: &ProtocolObject<dyn VTFrameProcessorConfiguration>,
) -> Result<(), Retained<NSError>>
Available on crate features VTFrameProcessorConfiguration and objc2-foundation only.
pub unsafe fn startSessionWithConfiguration_error( &self, configuration: &ProtocolObject<dyn VTFrameProcessorConfiguration>, ) -> Result<(), Retained<NSError>>
VTFrameProcessorConfiguration and objc2-foundation only.Starts a new session and configures the processor pipeline for an effect.
- Parameters:
- configuration: The system uses this parameter to create an effect pipeline for processing frames. This object
must conform to the
VTFrameProcessorConfigurationinterface. - error: Contains error information if any. You may specify NULL for this parameter if you do not want the error information.
Sourcepub unsafe fn processWithParameters_error(
&self,
parameters: &ProtocolObject<dyn VTFrameProcessorParameters>,
) -> Result<(), Retained<NSError>>
Available on crate features VTFrameProcessorParameters and objc2-foundation only.
pub unsafe fn processWithParameters_error( &self, parameters: &ProtocolObject<dyn VTFrameProcessorParameters>, ) -> Result<(), Retained<NSError>>
VTFrameProcessorParameters and objc2-foundation only.Synchronously performs the processor effects.
Use the respective VTFrameProcessorParameters to pass frame level settings and frame level input/output parameters
for the effect that you configured this session for by calling startSessionWithConfiguration:error.
- Parameters:
- parameters: A
VTFrameProcessorParametersbased object to specify additional frame based parameters to use during processing. It needs to match the configuration type used during start session. - error: Contains error information if any. You may specify NULL for this parameter if you do not want the error information.
Sourcepub unsafe fn processWithParameters_completionHandler(
&self,
parameters: &ProtocolObject<dyn VTFrameProcessorParameters>,
completion_handler: &DynBlock<dyn Fn(NonNull<ProtocolObject<dyn VTFrameProcessorParameters>>, *mut NSError)>,
)
Available on crate features VTFrameProcessorParameters and block2 and objc2-foundation only.
pub unsafe fn processWithParameters_completionHandler( &self, parameters: &ProtocolObject<dyn VTFrameProcessorParameters>, completion_handler: &DynBlock<dyn Fn(NonNull<ProtocolObject<dyn VTFrameProcessorParameters>>, *mut NSError)>, )
VTFrameProcessorParameters and block2 and objc2-foundation only.Asynchronously performs the processor effects.
- Parameters:
- parameters: A
VTFrameProcessorParametersbased object to specify additional frame based parameters to use during processing. It needs to match the configuration type used during start session. - completionHandler: This completion handler is called when frame processing is completed. The completion handler
receives the same parameters object that you provided to the original call, as well as an
NSErrorwhich contains an error code if processing was not successful.
Sourcepub unsafe fn processWithParameters_frameOutputHandler(
&self,
parameters: &ProtocolObject<dyn VTFrameProcessorParameters>,
frame_output_handler: &DynBlock<dyn Fn(NonNull<ProtocolObject<dyn VTFrameProcessorParameters>>, CMTime, Bool, *mut NSError)>,
)
Available on crate features VTFrameProcessorParameters and block2 and objc2-core-media and objc2-foundation only.
pub unsafe fn processWithParameters_frameOutputHandler( &self, parameters: &ProtocolObject<dyn VTFrameProcessorParameters>, frame_output_handler: &DynBlock<dyn Fn(NonNull<ProtocolObject<dyn VTFrameProcessorParameters>>, CMTime, Bool, *mut NSError)>, )
VTFrameProcessorParameters and block2 and objc2-core-media and objc2-foundation only.Asynchronously performs the processor effects and outputs each frame separately.
Use with frame processor configurations which allow multiple output frames from a single processing call, such as frame rate conversion processor cases when you need access to output frames as they become available, rather than waiting for all output frames to be complete.
This interface is suitable for low-latency scenarios when a call would generate multiple output frames, but waiting for all frames to be generated before beginning to use the frames is not ideal. Because the processor may use the output frames as references for frames still being generated, the output frames are strictly read-only. If you want to modify the frames, you must create a copy first.
- Parameters:
- parameters: A
VTFrameProcessorParametersbased object to specify additional frame based parameters to use during processing. It needs to match the configuration type used during start session. - frameOutputHandler: This frame output handler is called once for each destination frame in the provided parameters
if no errors are encountered. The output handler receives the same parameters object that you provided to the
original call, a flag indicating if this is the final output to be called for this processing request, and the
presentation timestamp associated with the
VTFrameProcessorFramethat it is being called for. TheNSErrorparameter contains an error code if processing was not successful.
Sourcepub unsafe fn processWithCommandBuffer_parameters(
&self,
command_buffer: &ProtocolObject<dyn MTLCommandBuffer>,
parameters: &ProtocolObject<dyn VTFrameProcessorParameters>,
)
Available on crate features VTFrameProcessorParameters and objc2-metal only.
pub unsafe fn processWithCommandBuffer_parameters( &self, command_buffer: &ProtocolObject<dyn MTLCommandBuffer>, parameters: &ProtocolObject<dyn VTFrameProcessorParameters>, )
VTFrameProcessorParameters and objc2-metal only.Performs effects in a Metal command buffer.
This function allows you to add the effect to an existing Metal command buffer. The clients that have an existing Metal pipeline and want to add this effect to it can use this function.
Note: this function waits until all previously inserted tasks in the command buffer finish before running. Tasks inserted after the
processWithCommandBufferreturns are run by the system after the effect is applied. Processing does not happen until the commandBuffer is executed.
- Parameters:
- commandBuffer: An existing Metal command buffer where the frame processing is inserted.
- parameters: A
VTFrameProcessorParametersbased object to specify additional frame based parameters to use during processing. It needs to match the configuration type used during start session.
Sourcepub unsafe fn endSession(&self)
pub unsafe fn endSession(&self)
Performs all necessary tasks to end the session.
After this call completes, you can process no new frames unless you call startSessionWithConfiguration again.
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 AsRef<AnyObject> for VTFrameProcessor
impl AsRef<AnyObject> for VTFrameProcessor
Source§impl AsRef<NSObject> for VTFrameProcessor
impl AsRef<NSObject> for VTFrameProcessor
Source§impl AsRef<VTFrameProcessor> for VTFrameProcessor
impl AsRef<VTFrameProcessor> for VTFrameProcessor
Source§impl Borrow<AnyObject> for VTFrameProcessor
impl Borrow<AnyObject> for VTFrameProcessor
Source§impl Borrow<NSObject> for VTFrameProcessor
impl Borrow<NSObject> for VTFrameProcessor
Source§impl ClassType for VTFrameProcessor
impl ClassType for VTFrameProcessor
Source§const NAME: &'static str = "VTFrameProcessor"
const NAME: &'static str = "VTFrameProcessor"
Source§type ThreadKind = <<VTFrameProcessor as ClassType>::Super as ClassType>::ThreadKind
type ThreadKind = <<VTFrameProcessor as ClassType>::Super as ClassType>::ThreadKind
Source§impl Debug for VTFrameProcessor
impl Debug for VTFrameProcessor
Source§impl Deref for VTFrameProcessor
impl Deref for VTFrameProcessor
Source§impl Hash for VTFrameProcessor
impl Hash for VTFrameProcessor
Source§impl Message for VTFrameProcessor
impl Message for VTFrameProcessor
Source§impl NSObjectProtocol for VTFrameProcessor
impl NSObjectProtocol for VTFrameProcessor
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