import type { NobjcObject } from "objc-js";
import type { _NSError } from "../Foundation/NSError.js";
import type { _NSObject } from "../Foundation/NSObject.js";
import type { _VTFrameProcessorConfiguration } from "./VTFrameProcessorConfiguration.js";
import type { _VTFrameProcessorParameters } from "./VTFrameProcessorParameters.js";
import type { _MTLCommandBuffer } from "../Metal/MTLCommandBuffer.js";
import type { CMTime } from "../structs/CMTime.js";
export declare class _VTFrameProcessor extends _NSObject {
    static alloc(): _VTFrameProcessor;
    static new(): _VTFrameProcessor;
    /** Create a new instance of the frame processor. */
    init(): _VTFrameProcessor;
    /**
     * 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 ``VTFrameProcessorConfiguration`` interface. - error: Contains error information if any. You may specify NULL for this parameter if you do not want the error information.
     */
    startSessionWithConfiguration$error$(configuration: _VTFrameProcessorConfiguration, error: NobjcObject | null): boolean;
    /**
     * 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 `VTFrameProcessorParameters` based 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.
     */
    processWithParameters$error$(parameters: _VTFrameProcessorParameters, error: NobjcObject | null): boolean;
    /**
     * Asynchronously performs the processor effects. - Parameters: - parameters: A `VTFrameProcessorParameters` based 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 `NSError` which contains an error code if processing was not successful.
     */
    processWithParameters$completionHandler$(parameters: _VTFrameProcessorParameters, completionHandler: ((arg0: _VTFrameProcessorParameters, arg1: _NSError) => void) | null): void;
    /**
     * 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 `VTFrameProcessorParameters` based 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 `VTFrameProcessorFrame` that it is being called for. The `NSError` parameter contains an error code if processing was not successful.
     */
    processWithParameters$frameOutputHandler$(parameters: _VTFrameProcessorParameters, frameOutputHandler: ((arg0: _VTFrameProcessorParameters, arg1: CMTime, arg2: boolean, arg3: _NSError) => void) | null): void;
    /**
     * 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 `processWithCommandBuffer` returns 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 `VTFrameProcessorParameters` based object to specify additional frame based parameters to use during processing. It needs to match the configuration type used during start session.
     */
    processWithCommandBuffer$parameters$(commandBuffer: _MTLCommandBuffer, parameters: _VTFrameProcessorParameters): void;
    /**
     * Performs all necessary tasks to end the session. After this call completes, you can process no new frames unless you call ``startSessionWithConfiguration`` again.
     */
    endSession(): void;
}
