import type { _NSObject } from "../Foundation/NSObject.js";
import type { _AVPictureInPictureControllerContentSource } from "./AVPictureInPictureControllerContentSource.js";
import type { _AVPictureInPictureControllerDelegate } from "./AVPictureInPictureControllerDelegate.js";
import type { _AVPlayerLayer } from "../AVFoundation/AVPlayerLayer.js";
import type { _NSImage } from "../AppKit/NSImage.js";
export declare class _AVPictureInPictureController extends _NSObject {
    static alloc(): _AVPictureInPictureController;
    static new(): _AVPictureInPictureController;
    init(): _AVPictureInPictureController;
    /**
     * @method isPictureInPictureSupported @abstract Whether or not Picture in Picture is supported on the current device. @discussion When NO, all initializers will return nil.
     */
    static isPictureInPictureSupported(): boolean;
    /**
     * @property pictureInPictureButtonStartImage @abstract System default Picture in Picture start template image for use in client's Picture in Picture button.
     */
    static pictureInPictureButtonStartImage(): _NSImage;
    /**
     * @property pictureInPictureButtonStopImage @abstract System default Picture in Picture stop template image for use in client's Picture in Picture button.
     */
    static pictureInPictureButtonStopImage(): _NSImage;
    /**
     * @method initWithContentSource: @param contentSource The content source to be shown in Picture in Picture. @abstract Use this initializer for content that may be a sample buffer display layer or a player layer.
     */
    initWithContentSource$(contentSource: _AVPictureInPictureControllerContentSource): _AVPictureInPictureController;
    /**
     * @method initWithPlayerLayer: @param playerLayer The player layer from which to source the media content for the Picture in Picture controller. @abstract Initialize the picture in picture controller with a player layer.
     */
    initWithPlayerLayer$(playerLayer: _AVPlayerLayer): _AVPictureInPictureController | null;
    /**
     * @method startPictureInPicture @abstract Start Picture in Picture for the provided AVPlayerLayer if possible. @discussion Receiver will call -pictureInPictureControllerWillStartPictureInPicture: if Picture in Picture is currently possible and -pictureInPictureControllerDidStartPictureInPicture: after a successful start. If starting Picture in Picture fails, -pictureInPictureControllerFailedToStartPictureInPicture:withError: is called on the delegate instead. Client can stop Picture in Picture by calling -stopPictureInPicture. In addition the user can stop Picture in Picture through user interaction. It is also possible that Picture in Picture is stopped by the Picture in Picture controller at any time. In all these cases receiver calls -pictureInPictureControllerWillStopPictureInPicture: on the delegate and -pictureInPictureControllerDidStopPictureInPicture:after the stop animation completed.
     */
    startPictureInPicture(): void;
    /**
     * @method stopPictureInPicture @abstract Stop the local Picture in Picture if currently active. On tvOS, this can also stop Picture in Picture sessions for other applications. @discussion See startPictureInPicture for details.
     */
    stopPictureInPicture(): void;
    /**
     * @method invalidatePlaybackState @abstract Informs Picture in Picture controller that it should request an updated playback state from its sampleBufferPlaybackDelegate. @discussion This should always be called whenever playback is paused or unpaused, or the underlying content duration changes.
     */
    invalidatePlaybackState(): void;
    /**
     * @property contentSource @abstract The receiver's content source. Can be changed while Picture in Picture is active, but the new content source must be ready for display (in the case of AVPlayerLayer, that means AVPlayerLayer.isReadyForDisplay must return YES), otherwise Picture in Picture will stop.
     */
    contentSource(): _AVPictureInPictureControllerContentSource;
    setContentSource$(value: _AVPictureInPictureControllerContentSource): void;
    /** @property playerLayer @abstract The receiver's player layer. */
    playerLayer(): _AVPlayerLayer;
    /** @property delegate @abstract The receiver's delegate. */
    delegate(): _AVPictureInPictureControllerDelegate | null;
    setDelegate$(value: _AVPictureInPictureControllerDelegate | null): void;
    /**
     * @property pictureInPicturePossible @abstract Whether or not Picture in Picture is currently possible.
     */
    pictureInPicturePossible(): boolean;
    /**
     * @property pictureInPictureActive @abstract Whether or not Picture in Picture is currently active.
     */
    pictureInPictureActive(): boolean;
    /**
     * @property pictureInPictureSuspended @abstract Whether or not Picture in Picture is currently suspended.
     */
    pictureInPictureSuspended(): boolean;
    /**
     * @property canStopPictureInPicture @abstract Whether or not any Picture in Picture is active, and can be stopped. @discussion When true, stopPictureInPicture will stop the active Picture in Picture session. Apps should re-inspect the system-provided picture in picture start button image when this property changes. Observable.
     */
    canStopPictureInPicture(): boolean;
    /**
     * @property requiresLinearPlayback @abstract Disables certain user operations (fast forward, forward skip, and scrubbing). @discussion This can be used to temporarily enforce playback of mandatory content (such as legalese or advertisements).
     */
    requiresLinearPlayback(): boolean;
    setRequiresLinearPlayback$(value: boolean): void;
    /**
     * @property canStartPictureInPictureAutomaticallyFromInline @abstract Indicates whether Picture in Picture should be allowed to start automatically when transitioning to background when the receiver’s content is embedded inline. Default is NO. @discussion This property must only be set to YES for content intended to be the user's primary focus.
     */
    canStartPictureInPictureAutomaticallyFromInline(): boolean;
    setCanStartPictureInPictureAutomaticallyFromInline$(value: boolean): void;
}
