import type { NobjcObject } from "objc-js";
import type { _NSDictionary } from "../Foundation/NSDictionary.js";
import type { _AVCapturePhoto } from "./AVCapturePhoto.js";
import type { _AVDepthData } from "./AVDepthData.js";
import type { _AVPortraitEffectsMatte } from "./AVPortraitEffectsMatte.js";
import type { _AVSemanticSegmentationMatte } from "./AVSemanticSegmentationMatte.js";
import type { AVSemanticSegmentationMatteType } from "./AVSemanticSegmentationMatteType.js";
export interface _AVCapturePhotoFileDataRepresentationCustomizer {
    /**
     * @method replacementMetadataForPhoto: @abstract A callback in which you may provide replacement metadata, or direct the AVCapturePhoto to strip existing metadata from the flattened file data representation. @param photo The calling instance of AVCapturePhoto. @return A dictionary of keys and values from <ImageIO/CGImageProperties.h>. To preserve existing metadata, return photo.metadata. To strip existing metadata, return nil. To replace metadata, pass a replacement dictionary. @discussion This callback is optional. If your delegate does not implement this callback, the existing metadata in the in-memory AVCapturePhoto container will be written to the file data representation.
     */
    replacementMetadataForPhoto$?(photo: _AVCapturePhoto): _NSDictionary | null;
    /**
     * @method replacementEmbeddedThumbnailPixelBufferWithPhotoFormat:forPhoto: @abstract A callback in which you may provide a replacement embedded thumbnail image with compression settings, or strip the existing embedded thumbnail image from the flattened file data representation. @param replacementEmbeddedThumbnailPhotoFormatOut On output, a pointer to a dictionary of keys and values from <AVFoundation/AVVideoSettings.h> If you pass a non-nil dictionary, AVVideoCodecKey is required, with AVVideoWidthKey and AVVideoHeightKey being optional. To preserve the existing embedded thumbnail photo to the flattened data, set *replacementEmbeddedThumbnailPhotoFormatOut to photo.embeddedThumbnailPhotoFormat and return nil. To strip the existing embedded thumbnail, set *replacementEmbeddedThumbnailPhotoFormatOut to nil and return nil. To replace the existing embedded thumbnail photo, pass a replacement photo format dictionary and return a non-nil replacement pixel buffer. @param photo The calling instance of AVCapturePhoto. @return A pixel buffer containing a source image to be encoded to the file as the replacement thumbnail image. To preserve the existing embedded thumbnail photo to the flattened data, set *replacementEmbeddedThumbnailPhotoFormatOut to photo.embeddedThumbnailPhotoFormat and return nil. To strip the existing embedded thumbnail, set *replacementEmbeddedThumbnailPhotoFormatOut to nil and return nil. To replace the existing embedded thumbnail photo, pass a replacement photo format dictionary and return a non-nil replacement pixel buffer. @discussion This callback is optional. If your delegate does not implement this callback, the existing embedded thumbnail photo in the in-memory AVCapturePhoto container will be written to the file data representation.
     */
    replacementEmbeddedThumbnailPixelBufferWithPhotoFormat$forPhoto$?(replacementEmbeddedThumbnailPhotoFormatOut: NobjcObject | null, photo: _AVCapturePhoto): NobjcObject | null;
    /**
     * @method replacementDepthDataForPhoto: @abstract A callback in which you may provide replacement depth data, or strip the existing depth data from the flattened file data representation. @param photo The calling instance of AVCapturePhoto. @return An instance of AVDepthData. To preserve the existing depth data, return photo.depthData. To strip the existing one, return nil. To replace, provide a replacement AVDepthData instance. @discussion This callback is optional. If your delegate does not implement this callback, the existing depth data in the in-memory AVCapturePhoto container will be written to the file data representation.
     */
    replacementDepthDataForPhoto$?(photo: _AVCapturePhoto): _AVDepthData | null;
    /**
     * @method replacementPortraitEffectsMatteForPhoto: @abstract A callback in which you may provide a replacement portrait effects matte, or strip the existing portrait effects matte from the flattened file data representation. @param photo The calling instance of AVCapturePhoto. @return An instance of AVPortraitEffectsMatte. To preserve the existing portrait effects matte, return photo.portraitEffectsMatte. To strip the existing one, return nil. To replace, provide a replacement AVPortraitEffectsMatte instance. @discussion This callback is optional. If your delegate does not implement this callback, the existing portrait effects matte in the in-memory AVCapturePhoto container will be written to the file data representation.
     */
    replacementPortraitEffectsMatteForPhoto$?(photo: _AVCapturePhoto): _AVPortraitEffectsMatte | null;
    /**
     * @method replacementSemanticSegmentationMatteOfType:forPhoto: @abstract A callback in which you may provide a replacement semantic segmentation matte of the indicated type, or strip the existing one from the flattened file data representation. @param semanticSegmentationMatteType The type of semantic segmentation matte to be replaced or stripped. @param photo The calling instance of AVCapturePhoto. @return An instance of AVSemanticSegmentationMatte. To preserve the existing matte, return [photo semanticSegmentationMatteForType:semanticSegmentationMatteType]. To strip the existing one, return nil. To replace, provide a replacement AVPortraitEffectsMatte instance. @discussion This callback is optional. If your delegate does not implement this callback, the existing semantic segmentation matte of the specified type in the in-memory AVCapturePhoto container will be written to the file data representation.
     */
    replacementSemanticSegmentationMatteOfType$forPhoto$?(semanticSegmentationMatteType: AVSemanticSegmentationMatteType, photo: _AVCapturePhoto): _AVSemanticSegmentationMatte | null;
    /**
     * @method replacementAppleProRAWCompressionSettingsForPhoto:defaultSettings:maximumBitDepth: @abstract A callback in which you may provide replacement compression settings for the DNG flattened file data representation of Apple ProRAW. This callback will only be invoked for Apple ProRAW captures written to DNG. @param photo The calling instance of AVCapturePhoto. @param defaultSettings The default settings that will be used if not overridden. @param maximumBitDepth The maximum bit depth that can be specified with AVVideoAppleProRAWBitDepthKey in the returned settings dictionary. @return An NSDictionary containing compression settings to be used when writing the DNG file representation. Currently accepted keys are: AVVideoQualityKey (NSNumber in range 0 to 1.0, inclusive) AVVideoAppleProRAWBitDepthKey (NSNumber in range 8 to maximumBitDepth, inclusive) Setting AVVideoQualityKey to 1.0 will use lossless compression. Any value between 0 and 1.0 will use lossy compression with that quality. Setting AVVideoAppleProRAWBitDepthKey to a value less than what is given in defaultSettings may result in quantization losses. Any keys not specified in the returned dictionary will use the values from defaultSettings. Return defaultSettings if no changes to the compression settings are desired. @discussion This callback is optional. If your delegate does not implement this callback, the default compression settings for the file type will be used.
     */
    replacementAppleProRAWCompressionSettingsForPhoto$defaultSettings$maximumBitDepth$?(photo: _AVCapturePhoto, defaultSettings: _NSDictionary, maximumBitDepth: number): _NSDictionary;
}
