import type { NobjcObject } from "objc-js";
import type { _NSArray } from "../Foundation/NSArray.js";
import type { _NSDictionary } from "../Foundation/NSDictionary.js";
import type { _NSObject } from "../Foundation/NSObject.js";
import type { _CMIOExtensionDevice } from "./CMIOExtensionDevice.js";
import type { _CMIOExtensionProviderSource } from "./CMIOExtensionProviderSource.js";
export declare class _CMIOExtensionProvider extends _NSObject {
    static alloc(): _CMIOExtensionProvider;
    static new(): _CMIOExtensionProvider;
    init(): _CMIOExtensionProvider;
    /**
     * @method startServiceWithProvider: @abstract Starts the CoreMediaIO Extension machinery.
     */
    static startServiceWithProvider$(provider: _CMIOExtensionProvider): void;
    /**
     * @method stopServiceWithProvider: @abstract Stops the CoreMediaIO Extension machinery. @discussion This should only be called in very rare circumstances. For example, if an extension is present on a system and there is no possible way that it would ever create a device instance. It is suggested that this be called as soon as possible in the provider's lifecycle, and that the provider's ignoreSIGTERM method be called first. After calling this method the extension should exit.
     */
    static stopServiceWithProvider$(provider: _CMIOExtensionProvider): void;
    /**
     * @method providerWithSource:clientQueue: @abstract Returns a provider instance. @param source The provider source. @param clientQueue The client dispatch queue, or nil for the default dispatch queue. @result A CMIOExtensionProvider instance.
     */
    static providerWithSource$clientQueue$(source: _CMIOExtensionProviderSource, clientQueue: _NSObject | null): _CMIOExtensionProvider;
    /**
     * @method ignoreSIGTERM @abstract Directs provider class to ignore the SIGTERM signal. @discussion Call this method if your provider handles SIGTERM signals; NOTE: if so, your handler must call exit.
     */
    static ignoreSIGTERM(): void;
    /**
     * @method initWithSource:clientQueue: @abstract Initialize a provider instance. @param source The provider source. @param clientQueue The client dispatch queue, or nil for the default dispatch queue. @result A CMIOExtensionProvider instance.
     */
    initWithSource$clientQueue$(source: _CMIOExtensionProviderSource, clientQueue: _NSObject | null): _CMIOExtensionProvider;
    /**
     * @method addDevice:error: @abstract Add a device to the provider devices array. @param device The device to be added to the provider devices array. @param outError An error return on failure. @result Return YES on success, NO otherwise.
     */
    addDevice$error$(device: _CMIOExtensionDevice, outError: NobjcObject | null): boolean;
    /**
     * @method removeDevice:error: @abstract Remove a device from the provider devices array. @param device The device to be removed from the provider devices array. @param outError An error return on failure. @result Return YES on success, NO otherwise.
     */
    removeDevice$error$(device: _CMIOExtensionDevice, outError: NobjcObject | null): boolean;
    /**
     * @method notifyPropertiesChanged: @abstract Notify client(s) of device properties changes. @param propertyStates The dictionary of properties having changed.
     */
    notifyPropertiesChanged$(propertyStates: _NSDictionary): void;
    /** @property source @abstract The provider source. */
    source(): _CMIOExtensionProviderSource | null;
    /**
     * @property clientQueue @abstract The dispatch queue on which source methods from the provider/device/stream will be called.
     */
    clientQueue(): _NSObject;
    /**
     * @property connectedClients @abstract The array of connected clients. @discussion This property is key-value observable.
     */
    connectedClients(): _NSArray;
    /**
     * @property devices @abstract The devices array of the provider. @discussion This property is not key-value observable.
     */
    devices(): _NSArray;
}
