-
Notifications
You must be signed in to change notification settings - Fork 576
AVFoundation tvOS xcode27.0 rc
Alex Soto edited this page Sep 9, 2026
·
1 revision
#AVFoundation.framework
diff -ruN /Applications/Xcode_27.0.0-beta6.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVCaptureAncillaryDataEncoder.h /Applications/Xcode_27.0.0-rc.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVCaptureAncillaryDataEncoder.h
--- /Applications/Xcode_27.0.0-beta6.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVCaptureAncillaryDataEncoder.h 1969-12-31 19:00:00
+++ /Applications/Xcode_27.0.0-rc.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVCaptureAncillaryDataEncoder.h 2026-08-14 23:35:12
@@ -0,0 +1,116 @@
+#if !__has_include(<AVFCapture/AVCaptureAncillaryDataEncoder.h>)
+/*
+ File: AVCaptureAncillaryDataEncoder.h
+
+ Framework: AVFoundation
+
+ Copyright 2025 Apple Inc. All rights reserved.
+*/
+
+#import <AVFoundation/AVBase.h>
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// # AVCaptureAncillaryDataUserKey string constants
+///
+/// Clients may use an AVCaptureAncillaryDataUserKey to inspect the ``AVCaptureAncillaryDataEncoder/currentUserDefinedAncillaryData``.
+typedef NSString * AVCaptureAncillaryDataUserKey NS_TYPED_ENUM API_AVAILABLE(macos(27.0), ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(visionos) API_UNAVAILABLE(watchos);
+
+/// An AVCaptureAncillaryDataEncoder key corresponding with the optional RDD18 user defined metadata Instance UID
+///
+/// Clients may set the Instance UID with ``AVCaptureAncillaryDataEncoder/setUserInstanceUID:userUdamVersion:``
+AVF_EXPORT AVCaptureAncillaryDataUserKey const AVCaptureAncillaryDataUserKeyRDD18InstanceUID API_AVAILABLE(macos(27.0), ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(visionos) API_UNAVAILABLE(watchos);
+
+/// An AVCaptureAncillaryDataEncoder key corresponding with the optional RDD18 user defined metadata UDAM Set Version
+///
+/// Clients may set the UDAM Set Version with ``AVCaptureAncillaryDataEncoder/setUserInstanceUID:userUdamVersion:``
+AVF_EXPORT AVCaptureAncillaryDataUserKey const AVCaptureAncillaryDataUserKeyRDD18UDAMSetVersion API_AVAILABLE(macos(27.0), ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(visionos) API_UNAVAILABLE(watchos);
+
+/// An AVCaptureAncillaryDataEncoder key corresponding with RDD18 user defined metadata
+///
+/// Clients may inspect the user metadata with ``AVCaptureAncillaryDataEncoder\currentUserDefinedAncillaryData`` and set it with ``AVCaptureAncillaryDataEncoder\setRDD18AncillaryData:forTag:error:`` ``AVCaptureAncillaryDataEncoder\setRDD18AncillaryDataString:forTag:error:`` or remove it with ``AVCaptureAncillaryDataEncoder\removeRDD18AncillaryDataForTag:``
+AVF_EXPORT AVCaptureAncillaryDataUserKey const AVCaptureAncillaryDataUserKeyRDD18UserItems API_AVAILABLE(macos(27.0), ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(visionos) API_UNAVAILABLE(watchos);
+
+/// ``AVCaptureAncillaryDataEncoder`` is a class off of ``AVCaptureBroadcastVideoOutput`` that provides an interface for encoding capture time ancillary to accompany the broadcating video.
+///
+/// ## Topics
+/// ### Creating an Ancillary Data Encoder
+/// - Done automatically with ``AVCaptureBroadcastVideoOutput``
+///
+/// ### Managing the user definded data
+/// - ``setUserInstanceUID:userUdamVersion:``
+/// - ``setRDD18AncillaryData:forTag:error:``
+/// - ``setRDD18AncillaryDataString:forTag:error:``
+/// - ``removeRDD18AncillaryDataForTag:``
+
+///
+/// ### inspecting the user defined data
+/// - ``currentUserDefinedAncillaryData``
+///
+/// ## See Also
+/// - ``AVCaptureBroadcastVideoOutput``
+
+API_AVAILABLE(macos(27.0), ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(visionos) API_UNAVAILABLE(watchos)
+@interface AVCaptureAncillaryDataEncoder: NSObject
+
+AV_INIT_UNAVAILABLE
+
+/// Indicates whether ancillary data should be encoded and transmitted.
+///
+/// This property controls whether ancillary data is encoded and sent along with video buffers in AVCaptureBroadcastVideoOutput.
+/// Default value is `true`.
+@property (nonatomic, getter=isEnabled) BOOL enabled;
+
+/// This is a representation of the user defined anacillary data.
+///
+/// Using SMPTE 291 and SMPTE RDD 18 standards for user-defined data, this property specifies the user-defined ancillary data to be sent with every frame in ``AVCaptureBroadcastVideoOutput``. The dictionary will contain a NSUUID the ``AVCaptureAncillaryDataUserKeyRDD18InstanceUID`` key, a uint16_t for the ``AVCaptureAncillaryDataUserKeyRDD18UDAMSetVersion`` key and a dictionary for the ``AVCaptureAncillaryDataUserKeyRDD18UserItems``. The ``AVCaptureAncillaryDataUserKeyRDD18UserItems`` will contain keys of the user tag and with the corresponding values.
+///
+/// To update the data please see the following methods:
+/// - ``setUserInstanceUID:userUdamVersion:`` will update the ``AVCaptureAncillaryDataUserKeyRDD18InstanceUID`` and ``AVCaptureAncillaryDataUserKeyRDD18UDAMSetVersion`` keys
+/// - ``setRDD18AncillaryData:forTag:error:`` will update the ``AVCaptureAncillaryDataUserKeyRDD18UserItems`` key
+/// - ``setRDD18AncillaryDataString:forTag:error:`` will update the ``AVCaptureAncillaryDataUserKeyRDD18UserItems`` key
+@property (nonatomic, readonly) NSDictionary<AVCaptureAncillaryDataUserKey, id> *currentUserDefinedAncillaryData;
+
+/// Allows users to track how much data in bytes can be added to the userDefinedAncillaryData.
+///
+/// Using SMPTE 291 and SMPTE RDD 18 standards for ancillary data, this property specifies max size in bytes for the user defined portion of that data
+@property (nonatomic, readonly) int16_t userDefinedAncillaryDataSizeRemaining;
+
+/// Set the UID and Version number for the user data.
+///
+/// Allows the user to set the instance and version of the ancillary data.
+///
+/// - Parameter uuid: The UUID for the SMPTE RDD 18 ancillary data instance
+/// - Parameter version: The SMPTE RDD 18 User Defined Acquisition Metadata (UDAM) Set Version
+- (void)setUserInstanceUID:(NSUUID *)uuid forUserUDAMVersion:(NSNumber *)version;
+
+/// Allows the user to add their own data to be encoded and transmitted using SMPTE RDD 18 standards.
+///
+/// - Parameters:
+/// - data: The data to be encoded and transmitted
+/// - tag: The SMPTE RDD 18 tag with value between 0xE011 and 0xFFFF or valid tags definded in SMPTE RDD 18:2021
+/// - error: Error if the data cannot be added
+- (BOOL)setRDD18AncillaryData:(NSData *)data forTag:(uint16_t)tag error:(NSError **)error;
+
+/// Allows the user to add their own string to be encoded as data and transmitted using SMPTE RDD 18 standards.
+///
+/// - Parameters:
+/// - string: The string to be encoded as data and transmitted
+/// - tag: The SMPTE RDD 18 tag with value between 0xE011 and 0xFFFF or valid tags definded in SMPTE RDD 18:2021
+/// - error: Error if the data cannot be added
+- (BOOL)setRDD18AncillaryDataString:(NSString *)string forTag:(uint16_t)tag error:(NSError **)error;
+
+/// Allows the user to remove the ancillary data associated with the tag.
+///
+/// - Parameters:
+/// - tag: The SMPTE RDD 18 tag with, value between 0xE011 and 0xFFFF or valid tags definded in SMPTE RDD 18:2021, for the data to be removed
+- (void)removeRDD18AncillaryDataForTag:(uint16_t)tag;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#else
+#import <AVFCapture/AVCaptureAncillaryDataEncoder.h>
+#endif
diff -ruN /Applications/Xcode_27.0.0-beta6.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVCaptureBroadcastVideoOutput.h /Applications/Xcode_27.0.0-rc.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVCaptureBroadcastVideoOutput.h
--- /Applications/Xcode_27.0.0-beta6.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVCaptureBroadcastVideoOutput.h 2026-08-18 02:07:10
+++ /Applications/Xcode_27.0.0-rc.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVCaptureBroadcastVideoOutput.h 2026-08-08 18:01:17
@@ -11,6 +11,7 @@
#import <AVFoundation/AVCaptureTimecodeGenerator.h>
#import <AVFoundation/AVBase.h>
#import <Foundation/Foundation.h>
+#import <AVFoundation/AVCaptureAncillaryDataEncoder.h>
NS_ASSUME_NONNULL_BEGIN
@@ -140,6 +141,10 @@
/// - ``maxBufferedFrameCount``
- (void)resetFrameBuffer;
+/// The AVCaptureAncillaryDataEncoder that sends per-frame lens/camera/user-defined acquisition data along with the video buffer.
+///
+/// This property provides access to the ancillary data encoder to set user-defined data or disable ancillary data encoding entirely.
+@property (nonatomic, readonly) AVCaptureAncillaryDataEncoder *ancillaryDataEncoder;
/// The strategy used to replace dropped video frames.
///
diff -ruN /Applications/Xcode_27.0.0-beta6.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVCaptureDevice.h /Applications/Xcode_27.0.0-rc.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVCaptureDevice.h
--- /Applications/Xcode_27.0.0-beta6.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVCaptureDevice.h 2026-08-08 20:44:39
+++ /Applications/Xcode_27.0.0-rc.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVCaptureDevice.h 2026-08-08 17:56:18
@@ -51,7 +51,55 @@
AVF_EXPORT NSNotificationName const AVCaptureDeviceSubjectAreaDidChangeNotification NS_SWIFT_NAME(AVCaptureDevice.subjectAreaDidChangeNotification) API_AVAILABLE(ios(5.0), macCatalyst(14.0), tvos(17.0)) API_UNAVAILABLE(macos, visionos) API_UNAVAILABLE(watchos);
+/// A special value that may be passed as the lensAperture parameter of a device's `setExposureModeCustom...` methods to lock at the current position.
+///
+/// This value may be passed to ``AVCaptureDevice/setExposureModeCustomWithLensAperture:duration:ISO:completionHandler:`` to lock it to its current value. Note that the device may be adjusting the aperture at the time of the call, in which case ``AVCaptureDevice/lensAperture`` may be locked to different value than the value obtained by querying the property.
+AVF_EXPORT const float AVCaptureLensApertureCurrent NS_SWIFT_NAME(AVCaptureDevice.currentLensAperture) API_AVAILABLE(ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(macos, visionos) API_UNAVAILABLE(watchos);
+/// A special value that may be passed as the duration parameter of a device's `setExposureModeCustom...` methods to lock at the current duration.
+///
+/// This value may be passed to ``AVCaptureDevice/setExposureModeCustomWithDuration:ISO:completionHandler:`` or ``AVCaptureDevice/setExposureModeCustomWithLensAperture:duration:ISO:completionHandler:`` to lock it to its current value. Note that the device may be adjusting exposure duration at the time of the call, in which case ``AVCaptureDevice/exposureDuration`` may be locked to different value than the value obtained by querying the property.
+AVF_EXPORT const CMTime AVCaptureExposureDurationCurrent API_AVAILABLE(ios(8.0), macCatalyst(14.0), tvos(17.0)) API_UNAVAILABLE(macos, visionos) API_UNAVAILABLE(watchos);
+
+/// A special value that may be passed as the ISO parameter of a device's `setExposureModeCustom...` methods to lock at the current gain value.
+///
+/// This value may be passed to ``AVCaptureDevice/setExposureModeCustomWithDuration:ISO:completionHandler:`` or ``AVCaptureDevice/setExposureModeCustomWithLensAperture:duration:ISO:completionHandler:`` to lock it to its current value. Note that the device may be adjusting ISO at the time of the call, in which case ``AVCaptureDevice/ISO`` may be locked to different value than the value obtained by querying the property.
+AVF_EXPORT const float AVCaptureISOCurrent API_AVAILABLE(ios(8.0), macCatalyst(14.0), tvos(17.0)) API_UNAVAILABLE(macos, visionos) API_UNAVAILABLE(watchos);
+
+/// A special value that may be passed as the lensAperture parameter of a device's `setExposureModeCustom...` methods to allow the system's auto-exposure system to manage the aperture.
+///
+/// This value may be passed to ``AVCaptureDevice/setExposureModeCustomWithLensAperture:duration:ISO:completionHandler:`` to enable "priority" modes, where some parameters are locked to specified values (given "priority"), whereas the ones specified as "auto" will be continually adjusted by the system to maintain image brightness.
+AVF_EXPORT const float AVCaptureLensApertureAuto NS_SWIFT_NAME(AVCaptureDevice.autoLensAperture) API_AVAILABLE(ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(macos, visionos) API_UNAVAILABLE(watchos);
+
+/// A special value that may be passed as the duration parameter of a device's `setExposureModeCustom...` methods to allow the system's auto-exposure system to manage the exposure duration.
+///
+/// This value may be passed to ``AVCaptureDevice/setExposureModeCustomWithDuration:ISO:completionHandler:`` or ``AVCaptureDevice/setExposureModeCustomWithLensAperture:duration:ISO:completionHandler:`` to enable "priority" modes, where some parameters are locked to specified values (given "priority"), whereas the ones specified as "auto" will be continually adjusted by the system to maintain image brightness.
+AVF_EXPORT const CMTime AVCaptureExposureDurationAuto NS_SWIFT_NAME(AVCaptureDevice.autoExposureDuration) API_AVAILABLE(ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(macos, visionos) API_UNAVAILABLE(watchos);
+
+/// A special value that may be passed as the ISO parameter of a device's `setExposureModeCustom...` methods to allow the system's auto-exposure system to manage the gain value.
+///
+/// This value may be passed to ``AVCaptureDevice/setExposureModeCustomWithDuration:ISO:completionHandler:`` or ``AVCaptureDevice/setExposureModeCustomWithLensAperture:duration:ISO:completionHandler:`` to enable "priority" modes, where some parameters are locked to specified values (given "priority"), whereas the ones specified as "auto" will be continually adjusted by the system to maintain image brightness.
+AVF_EXPORT const float AVCaptureISOAuto NS_SWIFT_NAME(AVCaptureDevice.autoISO) API_AVAILABLE(ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(macos, visionos) API_UNAVAILABLE(watchos);
+
+
+/// Values that can be used to configure the auto exposure system via ``AVCaptureDevice/enabledExposureSignals`` and associated methods.
+typedef NSString *AVCaptureDeviceExposureSignal NS_TYPED_ENUM API_AVAILABLE(ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(macos, visionos) API_UNAVAILABLE( watchos);
+
+/// When enabled, auto exposure may close the aperture or decrease the exposure duration to reduce motion blur when there is a lot of motion in the scene.
+AVF_EXPORT AVCaptureDeviceExposureSignal const AVCaptureDeviceExposureSignalSubjectMotion API_AVAILABLE(ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(macos, visionos) API_UNAVAILABLE( watchos);
+
+/// When enabled, auto exposure may close the aperture to increase depth of field when multiple faces are in the scene.
+AVF_EXPORT AVCaptureDeviceExposureSignal const AVCaptureDeviceExposureSignalGroupPhoto API_AVAILABLE(ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(macos, visionos) API_UNAVAILABLE( watchos);
+
+/// When enabled, auto exposure may close the aperture to improve sharpness of textual scenes.
+AVF_EXPORT AVCaptureDeviceExposureSignal const AVCaptureDeviceExposureSignalDocument API_AVAILABLE(ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(macos, visionos) API_UNAVAILABLE( watchos);
+
+/// When enabled, auto exposure may open the aperture to remove diffraction artifacts from point light sources.
+AVF_EXPORT AVCaptureDeviceExposureSignal const AVCaptureDeviceExposureSignalStarburst API_AVAILABLE(ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(macos, visionos) API_UNAVAILABLE( watchos);
+
+/// When enabled, auto exposure may adjust the aperture to help exposure duration avoid synchronization with artificial lighting frequencies.
+AVF_EXPORT AVCaptureDeviceExposureSignal const AVCaptureDeviceExposureSignalFlicker API_AVAILABLE(ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(macos, visionos) API_UNAVAILABLE( watchos);
+
/// Constants indicating video orientation, for use with AVCaptureDeviceRotationCoordinator.
typedef NS_ENUM(NSInteger, AVCaptureVideoOrientation) {
/// Indicates that video should be oriented vertically, port on the bottom.
@@ -803,7 +851,20 @@
*/
@property(nonatomic, readonly) NSArray<NSNumber *> *virtualDeviceSwitchOverVideoZoomFactors API_AVAILABLE(ios(13.0), macCatalyst(14.0), tvos(17.0)) API_UNAVAILABLE(macos, visionos) API_UNAVAILABLE(watchos);
+/// Whether locking to a particular primary constituent device is supported.
+///
+/// This property returns `true` if ``setPrimaryConstituentDeviceSwitchingBehaviorLockedWithDevice:`` is supported.
+@property(nonatomic, readonly, getter=isPrimaryConstituentDeviceSwitchingBehaviorLockedWithDeviceSupported) BOOL primaryConstituentDeviceSwitchingBehaviorLockedWithDeviceSupported API_AVAILABLE(macos(27.0), ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(visionos) API_UNAVAILABLE(watchos);
+/// Sets the switching behavior of the primary constituent device to locked with the specified device.
+///
+/// - Parameter device: The constituent device to lock.
+///
+/// Before locking a virtual camera's primary constituent device, check that ``primaryConstituentDeviceSwitchingBehaviorLockedWithDeviceSupported`` is `true`. If locking is not supported, attempting to lock throws an `NSInvalidArgumentException`. Call ``lockForConfiguration:`` to acquire exclusive access to the device’s configuration properties. Once a constituent device is locked, it becomes the ``activePrimaryConstituentDevice``, and ``primaryConstituentDeviceSwitchingBehavior`` is updated to ``AVCapturePrimaryConstituentDeviceSwitchingBehaviorLocked``. The virtual camera’s properties remain unchanged. Their effective values can be obtained from the ``activePrimaryConstituentDevice``. To unlock the primary constituent device, set ``primaryConstituentDeviceSwitchingBehavior`` to ``AVCapturePrimaryConstituentDeviceSwitchingBehaviorAuto``. This may trigger an immediate update of ``activePrimaryConstituentDevice``. Locking a different primary constituent device without first unlocking the current one is allowed.
+///
+/// If the current ``videoZoomFactor`` is within the constituent device's supported range, it will remain unchanged. If it falls outside the range, the zoom factor will automatically be clamped to the nearest supported value. If a zoom ramp is in progress, the ramp target and current position will similarly be updated to stay within the supported range. If both the target and position are thus clamped to the same value, this will cancel the ramp at that value, otherwise the ramp will continue within the remaining available range at its current velocity.
+- (void)setPrimaryConstituentDeviceSwitchingBehaviorLockedWithDevice:(AVCaptureDevice *)device API_AVAILABLE(macos(27.0), ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(visionos) API_UNAVAILABLE(watchos);
+
/*!
@method setPrimaryConstituentDeviceSwitchingBehavior:restrictedSwitchingBehaviorConditions:
@abstract
@@ -1298,6 +1359,7 @@
/// - Parameter handler: A block to be called when ``lensPosition`` has been set to the value specified and ``focusMode`` is set to ``AVCaptureFocusModeLocked``. If ``setFocusModeLockedWithLensPosition:completionHandler:`` is called multiple times, the completion handlers will be called in FIFO order. The block receives a timestamp which matches that of the first buffer to which all settings have been applied. Note that the timestamp is synchronized to the device clock, and thus must be converted to the ``AVCaptureSession/synchronizationClock`` prior to comparison with the timestamps of buffers delivered via an ``AVCaptureVideoDataOutput``. The client may pass nil for the handler parameter if knowledge of the operation's completion is not required.
///
/// This is the only way of setting ``lensPosition``. This method throws an NSRangeException if ``lensPosition`` is set to an unsupported level. This method throws an NSGenericException if called without first obtaining exclusive access to the receiver using ``lockForConfiguration:``. Before setting custom lens position value, check ``lockingFocusWithCustomLensPositionSupported`` first.
+/// For a virtual camera, locking to a custom lens position value is not supported if spatial video capture is enabled. When switching a virtual camera's ``activePrimaryConstituentDevice`` using ``setPrimaryConstituentDeviceSwitchingBehaviorLockedWithDevice:`` while focus mode is locked, the custom lens position is preserved across the constituent devices. However, the same lens position does not correspond to the same focus distance. If consistent focus behavior is required on a virtual camera (e.g. stereo depth data delivery is enabled), do not lock to a custom lens position.
- (void)setFocusModeLockedWithLensPosition:(float)lensPosition completionHandler:(nullable void (^)(CMTime syncTime))handler API_AVAILABLE(ios(8.0), macCatalyst(14.0), tvos(17.0)) API_UNAVAILABLE(macos, visionos);
/*!
@@ -1459,15 +1521,19 @@
*/
@property(nonatomic, getter=isFaceDrivenAutoExposureEnabled) BOOL faceDrivenAutoExposureEnabled API_AVAILABLE(ios(15.4), macCatalyst(15.4), tvos(17.0)) API_UNAVAILABLE(macos, visionos) API_UNAVAILABLE(watchos);
-/*!
- @constant activeMaxExposureDuration
- @abstract
- The maximum exposure (integration) time that may be used by the auto exposure algorithm.
+/** The maximum exposure (integration) time that may be used by the auto exposure algorithm.
- @discussion
- When an AVCaptureDevice's exposureMode is set to AVCaptureExposureModeAutoExpose or AVCaptureExposureModeContinuousAutoExposure, the auto exposure algorithm picks a default max exposure duration that is tuned for the current configuration, balancing low light image quality with motion preservation. By querying or key-value observing this property, you may find out the current max exposure duration in use. You may also override the default value by setting this property to a value between activeFormat.maxExposureDuration and activeFormat.minExposureDuration. An NSRangeException is thrown if you pass an out-of-bounds exposure duration. Setting the property to the special value of kCMTimeInvalid resets the auto exposure max duration to the device's default for your current configuration. When the device's activeFormat or the AVCaptureSession's sessionPreset changes, this property resets to the default max exposure duration for the new format or session preset.
+ When ``automaticallyAdjustsExposureDuration`` is true, the auto exposure algorithm picks an exposure duration that is tuned for the current scene, balancing low light image quality with motion preservation, up to the maximum specified by this property.
+ When custom exposure durations are specified via ``setExposureModeCustomWithLensAperture:duration:ISO:completionHandler:``, if the duration exceeds `activeMaxExposureDuration`, the behavior depends on whether any of the other custom parameters are set to Auto:
+ - If either aperture or ISO are set to Auto, then the applied exposure duration will be capped to `activeMaxExposureDuration` for streaming frames, but the full exposure duration may be applied during still capture.
+ - If no parameters are set to Auto, then activeMaxExposureDuration is ignored, the custom exposure duration is applied as specified.
+
+ By querying or key-value observing this property, you may find out the current max exposure duration. You may also override the default value by setting this property. Setting the property to the special value of kCMTimeInvalid resets the auto exposure max duration to the device's default for your current configuration. When the device's activeFormat or the AVCaptureSession's sessionPreset changes, this property resets to the default max exposure duration for the new format or session preset.
- On some devices, the auto exposure algorithm picks a different max exposure duration for a given format depending whether you used the -[AVCaptureSession setSessionPreset:] API or the -[AVCaptureDevice setActiveFormat:] API to set the format. To ensure uniform default handling of max exposure duration, you can set your AVCaptureDeviceInput's unifiedAutoExposureDefaultsEnabled property to YES.
+ On some devices, the auto exposure algorithm picks a different max exposure duration for a given format depending whether you set the ``AVCaptureSession/sessionPreset`` property or the ``AVCaptureDevice/activeFormat`` property to set the format. To ensure ``activeMaxExposureDuration`` stays consistent between preset or format changes, you can set your AVCaptureDeviceInput's ``AVCaptureDeviceInput/unifiedAutoExposureDefaultsEnabled`` property to true.
+
+ - Throws: `NSRangeException` if the assigned value is not between activeFormat's ``AVCaptureDeviceFormat/minExposureDuration`` and ``AVCaptureDeviceFormat/maxExposureDuration``
+ - Throws: `NSGenericException` if called without first obtaining exclusive access to the receiver using ``lockForConfiguration:``.
*/
@property(nonatomic) CMTime activeMaxExposureDuration API_AVAILABLE(ios(12.0), macCatalyst(14.0), tvos(17.0)) API_UNAVAILABLE(macos, visionos) API_UNAVAILABLE(watchos);
@@ -1481,64 +1547,109 @@
*/
@property(nonatomic, readonly, getter=isAdjustingExposure) BOOL adjustingExposure;
-/*!
- @property lensAperture
- @abstract
- The size of the lens diaphragm.
-
- @discussion
- The value of this property is a float indicating the size (f number) of the lens diaphragm. This property does not change.
- */
+/// The current 𝑓 number (𝑓-stop) of the lens diaphragm.
+///
+/// The aperture's 𝑓 number is the ratio of the focal length to the diameter of the aperture opening. Higher values correspond to closing the aperture, which increases depth of field, but darkens the image unless exposure duration or ISO are increased as well. This property is key-value observable. It can be read at any time, regardless of exposure mode, but can only be set by ``setExposureModeCustomWithLensAperture:duration:ISO:completionHandler:``. This value reports the physical aperture position and may not exactly match the target value passed to the setter.
@property(nonatomic, readonly) float lensAperture API_AVAILABLE(ios(8.0), macCatalyst(14.0), tvos(17.0)) API_UNAVAILABLE(macos, visionos);
-/*!
- @property exposureDuration
- @abstract
- The length of time over which exposure takes place.
-
- @discussion
- Only exposure duration values between activeFormat.minExposureDuration and activeFormat.maxExposureDuration are supported. This property is key-value observable. It can be read at any time, regardless of exposure mode, but can only be set via setExposureModeCustomWithDuration:ISO:completionHandler:.
- */
+/// The length of time over which exposure takes place.
+///
+/// Lower values increases the sharpness of objects in motion, but darkens the image unless the aperture is opened or ISO is increased. Exposure duration may be less than the frame duration, providing an anagolue to the shutter angle of film video cameras. This property is key-value observable. It can be read at any time, regardless of exposure mode, but can only be set by either ``AVCaptureDevice/setExposureModeCustomWithDuration:ISO:completionHandler:`` or ``AVCaptureDevice/setExposureModeCustomWithLensAperture:duration:ISO:completionHandler:``.
@property(nonatomic, readonly) CMTime exposureDuration API_AVAILABLE(ios(8.0), macCatalyst(14.0), tvos(17.0)) API_UNAVAILABLE(macos, visionos);
-/*!
- @property ISO
- @abstract
- The current exposure ISO value.
-
- @discussion
- This property controls the sensor's sensitivity to light by means of a gain value applied to the signal. Only ISO values between activeFormat.minISO and activeFormat.maxISO are supported. Higher values will result in noisier images. This property is key-value observable. It can be read at any time, regardless of exposure mode, but can only be set via setExposureModeCustomWithDuration:ISO:completionHandler:.
- */
+/// The current exposure ISO value.
+///
+/// This property indicates the sensor's sensitivity to light by means of a gain value applied to the signal. Higher values correspond to brighter but noisier images. This property is key-value observable. It can be read at any time, regardless of exposure mode, but can only be set by either ``AVCaptureDevice/setExposureModeCustomWithDuration:ISO:completionHandler:`` or ``AVCaptureDevice/setExposureModeCustomWithLensAperture:duration:ISO:completionHandler:``.
@property(nonatomic, readonly) float ISO API_AVAILABLE(ios(8.0), macCatalyst(14.0), tvos(17.0)) API_UNAVAILABLE(macos, visionos);
-/*!
- @constant AVCaptureExposureDurationCurrent
- A special value that may be passed as the duration parameter of setExposureModeCustomWithDuration:ISO:completionHandler: to indicate that the caller does not wish to specify a value for the exposureDuration property, and that it should instead be set to its current value. Note that the device may be adjusting exposureDuration at the time of the call, in which case the value to which exposureDuration is set may differ from the value obtained by querying the exposureDuration property.
- */
-AVF_EXPORT const CMTime AVCaptureExposureDurationCurrent API_AVAILABLE(ios(8.0), macCatalyst(14.0), tvos(17.0)) API_UNAVAILABLE(macos, visionos) API_UNAVAILABLE(watchos);
+/// Specifies a rate limit for aperture motion, whenever auto-exposure is active.
+///
+/// This rate limit is enforced whenever the auto-exposure system has control of one or more exposure parameters, to ensure smooth transitions between target values with coordinated management of the automatically adjusted parameters to maintain image brightness.
+/// However, if a full set of explicit (not "auto") positions are passed to `setExposureModeCustomWithLensAperture:duration:ISO:completionHandler:`, any change to aperture is immediately applied without rate limit.
+/// In this case, the client has full control of the exposure parameters, and can implement arbitrary exposure transitions by repeated calls to the setter.
+///
+/// This value limits the maximum frame-to-frame change of aperture size, as the ratio of aperture area between consecutive frames.
+/// For example, a value of 1.1 limits the aperture to accepting 10% additional light on each consecutive frame (or reducing by 10% when closing). A value of 1.0 does not allow any aperture motion.
+/// A special value of 0 (the default) allows the system to adjust the aperture speed automatically, such as faster motion in preview and slower when recording. When assigned to a value other than 0, the value must be greater than or equal to 1.0.
+///
+/// - Throws: `NSGenericException` if assigned without first obtaining exclusive access to the receiver using ``lockForConfiguration:``.
+@property(nonatomic) float autoExposureLensApertureRateLimit API_AVAILABLE(ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(macos, visionos) API_UNAVAILABLE(watchos);
-/*!
- @constant AVCaptureISOCurrent
- A special value that may be passed as the ISO parameter of setExposureModeCustomWithDuration:ISO:completionHandler: to indicate that the caller does not wish to specify a value for the ISO property, and that it should instead be set to its current value. Note that the device may be adjusting ISO at the time of the call, in which case the value to which ISO is set may differ from the value obtained by querying the ISO property.
- */
-AVF_EXPORT const float AVCaptureISOCurrent API_AVAILABLE(ios(8.0), macCatalyst(14.0), tvos(17.0)) API_UNAVAILABLE(macos, visionos) API_UNAVAILABLE(watchos);
-/*!
- @method setExposureModeCustomWithDuration:ISO:completionHandler:
- @abstract
- Sets exposureMode to AVCaptureExposureModeCustom and locks exposureDuration and ISO at explicit values.
+/** Sets a custom exposure mode with the specified lens exposure duration and ISO values.
- @param duration
- The exposure duration, as described in the documentation for the exposureDuration property. A value of AVCaptureExposureDurationCurrent can be used to indicate that the caller does not wish to specify a value for exposureDuration. Note that changes to this property may result in changes to activeVideoMinFrameDuration and/or activeVideoMaxFrameDuration.
- @param ISO
- The exposure ISO value, as described in the documentation for the ISO property. A value of AVCaptureISOCurrent can be used to indicate that the caller does not wish to specify a value for ISO.
- @param handler
- A block to be called when both exposureDuration and ISO have been set to the values specified and exposureMode is set to AVCaptureExposureModeCustom. If setExposureModeCustomWithDuration:ISO:completionHandler: is called multiple times, the completion handlers will be called in FIFO order. The block receives a timestamp which matches that of the first buffer to which all settings have been applied. Note that the timestamp is synchronized to the device clock, and thus must be converted to the `AVCaptureSession/synchronizationClock` prior to comparison with the timestamps of buffers delivered via an AVCaptureVideoDataOutput. The client may pass nil for the handler parameter if knowledge of the operation's completion is not required.
+ - Parameter duration: The exposure duration, as described in the documentation for the ``exposureDuration`` property. You may specify one of the special Current or Auto constants listed in the discussion section below, or values between the ``AVCaptureDeviceFormat/minExposureDuration`` and ``AVCaptureDeviceFormat/maxExposureDuration`` of the ``activeFormat``.
- @discussion
- This is the only way of setting exposureDuration and ISO. This method throws an NSRangeException if either exposureDuration or ISO is set to an unsupported level. This method throws an NSGenericException if called without first obtaining exclusive access to the receiver using lockForConfiguration:. When using AVCapturePhotoOutput to capture photos, note that the photoQualityPrioritization property of AVCapturePhotoSettings defaults to AVCapturePhotoQualityPrioritizationBalanced, which allows photo capture to temporarily override the capture device's ISO and exposureDuration values if the scene is dark enough to warrant some form of multi-image fusion to improve quality. To ensure that the receiver's ISO and exposureDuration values are honored while in AVCaptureExposureModeCustom or AVCaptureExposureModeLocked, you must set your AVCapturePhotoSettings.photoQualityPrioritization property to AVCapturePhotoQualityPrioritizationSpeed. The same rule applies if you use the deprecated AVCapturePhotoSettings.autoStillImageStabilizationEnabled property or AVCaptureStillImageOutput.automaticallyEnablesStillImageStabilizationWhenAvailable property. You must set them to NO to preserve your custom or locked exposure settings.
+ - Parameter ISO: The exposure ISO value, as described in the documentation for the ``ISO`` property. You may specify one of the special Current or Auto constants listed in the discussion section below, or values between the ``AVCaptureDeviceFormat/minISO`` and ``AVCaptureDeviceFormat/maxISO`` of the ``activeFormat``.
+
+ - Parameter handler: A block to be called when all parameters have been set to the values specified and ``exposureMode`` is set to ``AVCaptureExposureMode/AVCaptureExposureModeCustom``. If the `setExposureModeCustom...` methods are called multiple times, their completion handlers are always called in FIFO order. The block receives a timestamp which matches that of the first buffer to which all settings have been applied. Note that the timestamp is synchronized to the device clock, and thus must be converted to the ``AVCaptureSession/synchronizationClock`` prior to comparison with the timestamps of buffers delivered via an ``AVCaptureVideoDataOutput``. The client may pass nil for the handler parameter if knowledge of the operation's completion is not required.
+
+ Besides a numeric value, each of the exposure parameters can be set to either of these special constants:
+
+ > Lock To Current Value:
+ > A value of ``AVFCapture/AVCaptureExposureDurationCurrent`` can be passed for `duration`, or ``AVFCapture/AVCaptureISOCurrent`` for `ISO`, to indicate the caller does not wish to modify the current value. When auto-exposure is active, it is preferable to use these constants rather than querying the property getter, as auto-exposure system may be asynchronously changing the value as the command is processed.
+
+ > Priority Modes:
+ > A value of ``AVFCapture/AVCaptureExposureDurationAuto`` can be passed for `duration`, or ``AVFCapture/AVCaptureISOAuto`` for `ISO`, to indicate the auto-exposure system should continue to manage that parameter to produce balanced image brightness. This allows you to lock one of the exposure parameters (the "priority") while the system will automatically adjust the other.
+ >
+ > Not all priority mode combinations may be supported. Use ``AVCaptureDeviceFormat/supportsExposureModeCustomWithLensAperture:duration:ISO:`` to validate whether a given configuration will be accepted.
+
+ The applied exposure duration of streaming frames are limited to ``activeMaxExposureDuration`` when ISO is set to "Auto", but the full exposure duration may be applied during still capture. Auto parameter(s) will attempt to simulate how a still capture will appear, while maintaining the current frame rate for responsive preview. If none of the parameters are "Auto", changes to the exposure duration may result in changes to ``activeVideoMaxFrameDuration``.
+
+ If you wish to use the custom locked values for ``AVCapturePhotoOutput`` captures, you must set the ``AVCapturePhotoSettings/photoQualityPrioritization`` property to ``AVCapturePhotoQualityPrioritization/AVCapturePhotoQualityPrioritizationSpeed``. The default value of ``AVCapturePhotoQualityPrioritization/AVCapturePhotoQualityPrioritizationBalanced`` allows photo capture to temporarily override the capture device's ISO and exposureDuration values if the scene is dark enough to warrant some form of multi-image fusion to improve quality.
+
+ Note selecting speed prioritization disables image stabilization. If you then re-enable image stabilization via the deprecated ``AVCapturePhotoSettings/autoStillImageStabilizationEnabled`` property or ``AVCaptureStillImageOutput/automaticallyEnablesStillImageStabilizationWhenAvailable`` property, this counteracts speed prioritization and can result in image capture adopting different exposure settings.
+
+ Calling this method equivalent to passing ``AVFCapture/AVCaptureLensApertureCurrent`` to ``setExposureModeCustomWithLensAperture:duration:ISO:completionHandler:``.
+
+ - Throws: `NSRangeException` if any parameter is set to an unsupported level.
+ - Throws: `NSInvalidArgumentException` if the custom mode is not supported. (See ``AVCaptureDeviceFormat/supportsExposureModeCustomWithLensAperture:duration:ISO:``)
+ - Throws: `NSGenericException` if called without first obtaining exclusive access to the receiver using ``lockForConfiguration:``.
*/
- (void)setExposureModeCustomWithDuration:(CMTime)duration ISO:(float)ISO completionHandler:(nullable void (^)(CMTime syncTime))handler API_AVAILABLE(ios(8.0), macCatalyst(14.0), tvos(17.0)) API_UNAVAILABLE(macos, visionos);
+/** Sets a custom exposure mode with the specified lens aperture, exposure duration, and ISO values.
+
+ - Parameter lensAperture: The lens aperture, as described in the documentation for the ``lensAperture`` property. You may specify one of the special ``AVFCapture/AVCaptureLensApertureCurrent`` or ``AVFCapture/AVCaptureLensApertureAuto`` constants listed in the discussion section below, or values between the ``AVCaptureDeviceFormat/minLensAperture`` and ``AVCaptureDeviceFormat/maxLensAperture`` of the ``activeFormat``.
+
+ - Parameter duration: The exposure duration, as described in the documentation for the ``exposureDuration`` property. You may specify one of the special ``AVFCapture/AVCaptureExposureDurationCurrent`` or ``AVFCapture/AVCaptureExposureDurationAuto`` constants listed in the discussion section below, or values between the ``AVCaptureDeviceFormat/minExposureDuration`` and ``AVCaptureDeviceFormat/maxExposureDuration`` of the ``activeFormat``.
+
+ - Parameter ISO: The exposure ISO value, as described in the documentation for the ``ISO`` property. You may specify one of the special ``AVFCapture/AVCaptureISOCurrent`` or ``AVFCapture/AVCaptureISOAuto`` constants listed in the discussion section below, or values between the ``AVCaptureDeviceFormat/minISO`` and ``AVCaptureDeviceFormat/maxISO`` of the ``activeFormat``.
+
+ - Parameter handler: A block to be called when all parameters have been set to the values specified and ``exposureMode`` is set to ``AVCaptureExposureMode/AVCaptureExposureModeCustom``. If the `setExposureModeCustom...` methods are called multiple times, their completion handlers are always called in FIFO order. The block receives a timestamp which matches that of the first buffer to which all settings have been applied. Note that the timestamp is synchronized to the device clock, and thus must be converted to the ``AVCaptureSession/synchronizationClock`` prior to comparison with the timestamps of buffers delivered via an ``AVCaptureVideoDataOutput``. The client may pass nil for the handler parameter if knowledge of the operation's completion is not required.
+
+ Besides a numeric value, each of the exposure parameters can be set to either of these special constants:
+
+ > Lock To Current Value:
+ > A value of ``AVFCapture/AVCaptureLensApertureCurrent`` can be passed for `lensAperture`, or ``AVFCapture/AVCaptureExposureDurationCurrent`` for `duration`, or ``AVFCapture/AVCaptureISOCurrent`` for `ISO`, to indicate you wish to lock that parameter at the current value. When auto-exposure is active, it is preferable to use these constants rather than querying the property getter, as auto-exposure system may be asynchronously changing the value as the command is processed.
+ >
+ > Passing ``AVFCapture/AVCaptureLensApertureCurrent`` is equivalent to calling ``setExposureModeCustomWithDuration:ISO:completionHandler:``.
+
+ > Priority Modes:
+ > A value of ``AVFCapture/AVCaptureLensApertureAuto`` can be passed for `lensAperture`, or ``AVFCapture/AVCaptureExposureDurationAuto`` for `duration`, or ``AVFCapture/AVCaptureISOAuto`` for `ISO`, to indicate the auto-exposure system should continue to manage that parameter to produce balanced image brightness. This allows you to lock one of the exposure parameters (the "priority") while the system will automatically adjust the other.
+ >
+ > Not all priority mode combinations may be supported. Use ``AVCaptureDeviceFormat/supportsExposureModeCustomWithLensAperture:duration:ISO:`` to validate whether a given configuration will be accepted.
+
+ The applied exposure duration of streaming frames are limited to ``activeMaxExposureDuration`` when either lensAperture or ISO is set to "Auto", but the full exposure duration may be applied during still capture. Auto parameter(s) will attempt to simulate how a still capture will appear, while maintaining the current frame rate for responsive preview. If none of the parameters are "Auto", changes to the exposure duration may result in changes to ``activeVideoMaxFrameDuration``.
+
+ If you wish to use the custom locked values for ``AVCapturePhotoOutput`` captures, you must set the ``AVCapturePhotoSettings/photoQualityPrioritization`` property to ``AVCapturePhotoQualityPrioritization/AVCapturePhotoQualityPrioritizationSpeed``. The default value of ``AVCapturePhotoQualityPrioritization/AVCapturePhotoQualityPrioritizationBalanced`` allows photo capture to temporarily override the capture device's ISO and exposureDuration values if the scene is dark enough to warrant some form of multi-image fusion to improve quality.
+
+ Note selecting speed prioritization disables image stabilization. If you then re-enable image stabilization via the deprecated ``AVCapturePhotoSettings/autoStillImageStabilizationEnabled`` property or ``AVCaptureStillImageOutput/automaticallyEnablesStillImageStabilizationWhenAvailable`` property, this counteracts speed prioritization and can result in image capture adopting different exposure settings.
+
+ - Throws: `NSRangeException` if any parameter is set to an unsupported level.
+ - Throws: `NSInvalidArgumentException` if the custom mode is not supported. (See ``AVCaptureDeviceFormat/supportsExposureModeCustomWithLensAperture:duration:ISO:``)
+ - Throws: `NSGenericException` if called without first obtaining exclusive access to the receiver using ``lockForConfiguration:``.
+ */
+- (void)setExposureModeCustomWithLensAperture:(float)lensAperture duration:(CMTime)duration ISO:(float)ISO completionHandler:(nullable void (^)(CMTime syncTime))handler NS_SWIFT_NAME(setExposureModeCustom(lensAperture:duration:iso:completionHandler:)) API_AVAILABLE(ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(macos, visionos);
+
+/// This property reports true whenever lensAperture is unlocked, either by setting exposureMode to one of the automatic modes, or by passing `AVCaptureLensApertureAuto` to the aperture parameter of ``AVCaptureDevice/setExposureModeCustomWithLensAperture:duration:ISO:completionHandler:``.
+@property(nonatomic, readonly) BOOL automaticallyAdjustsLensAperture API_AVAILABLE(ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(macos, visionos);
+
+/// This property reports true whenever exposureDuration is unlocked, either by setting exposureMode to one of the automatic modes, or by passing `AVCaptureExposureDurationAuto` to the duration parameter of ``AVCaptureDevice/setExposureModeCustomWithDuration:ISO:completionHandler:`` or ``AVCaptureDevice/setExposureModeCustomWithLensAperture:duration:ISO:completionHandler:``.
+@property(nonatomic, readonly) BOOL automaticallyAdjustsExposureDuration API_AVAILABLE(ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(macos, visionos);
+
+/// This property reports true whenever ISO is unlocked, either by setting exposureMode to one of the automatic modes, or by passing `AVCaptureISOAuto` to the ISO parameter of ``AVCaptureDevice/setExposureModeCustomWithDuration:ISO:completionHandler:`` or ``AVCaptureDevice/setExposureModeCustomWithLensAperture:duration:ISO:completionHandler:``.
+@property(nonatomic, readonly) BOOL automaticallyAdjustsISO API_AVAILABLE(ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(macos, visionos);
+
/*!
@property exposureTargetOffset
@abstract
@@ -1549,14 +1660,11 @@
*/
@property(nonatomic, readonly) float exposureTargetOffset API_AVAILABLE(ios(8.0), macCatalyst(14.0), tvos(17.0)) API_UNAVAILABLE(macos, visionos);
-/*!
- @property exposureTargetBias
- @abstract
- Bias applied to the target exposure value, in EV units.
-
- @discussion
- When exposureMode is AVCaptureExposureModeContinuousAutoExposure or AVCaptureExposureModeLocked, the bias will affect both metering (exposureTargetOffset), and the actual exposure level (exposureDuration and ISO). When the exposure mode is AVCaptureExposureModeCustom, it will only affect metering. This property is key-value observable. It can be read at any time, but can only be set via setExposureTargetBias:completionHandler:.
- */
+/// Bias applied to the target exposure value, in EV units.
+///
+/// When exposureMode is AVCaptureExposureModeContinuousAutoExposure or AVCaptureExposureModeLocked, the bias will affect both metering (`exposureTargetOffset`), and the actual exposure level (`lensAperture`, `exposureDuration` and `ISO`).
+/// When the exposure mode is AVCaptureExposureModeCustom and none of the custom parameters are "Auto", bias is disabled and will only affect metering. In custom modes with "Auto" parameters, those parameters will be adjusted to apply the requested bias.
+/// This property is key-value observable. It can be read at any time, but can only be set via setExposureTargetBias:completionHandler:.
@property(nonatomic, readonly) float exposureTargetBias API_AVAILABLE(ios(8.0), macCatalyst(14.0), tvos(17.0)) API_UNAVAILABLE(macos, visionos);
/*!
@@ -1600,6 +1708,26 @@
*/
- (void)setExposureTargetBias:(float)bias completionHandler:(nullable void (^)(CMTime syncTime))handler API_AVAILABLE(ios(8.0), macCatalyst(14.0), tvos(17.0)) API_UNAVAILABLE(macos, visionos);
+/// Reports which characteristics the auto exposure system associates with the current scene. Auto exposure may adjust properties such as lens aperture size based on these factors. This property is key-value observable.
+@property(nonatomic, readonly, nonnull) NSSet<AVCaptureDeviceExposureSignal> *activeExposureSignals API_AVAILABLE(ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(macos, visionos) API_UNAVAILABLE( watchos);
+
+/// Can be assigned to control which characteristics AE should use in its decision making, must be a subset of supportedExposureSignals.
+///
+/// When `automaticallyEnablesExposureSignals` is true, the system may automatically change the enabled signals based on other enabled device properties. When `automaticallyEnablesExposureSignals` is false, you may assign a custom set of exposure signals to this property. This property is key-value observable.
+///
+/// - Throws: `NSInvalidArgumentException` if assigned while `automaticallyEnablesExposureSignals` is true
+/// - Throws: `NSGenericException` if assigned without first obtaining exclusive access to the receiver using ``lockForConfiguration:``.
+@property(nonatomic, nonnull) NSSet<AVCaptureDeviceExposureSignal> *enabledExposureSignals API_AVAILABLE(ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(macos, visionos) API_UNAVAILABLE( watchos);
+
+/// Indicates what values can be included in `enabledExposureSignals`. This property is key-value observable.
+@property(nonatomic, readonly, nonnull) NSSet<AVCaptureDeviceExposureSignal> *supportedExposureSignals API_AVAILABLE(ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(macos, visionos) API_UNAVAILABLE( watchos);
+
+/// When true (the default), capture sessions may automatically modify `enabledExposureSignals` based on changes to other device or session properties.
+///
+/// The `enabledExposureSignals` property can only be assigned when `automaticallyEnablesExposureSignals` is false, otherwise assignments to `enabledExposureSignals` will throw an exception.
+///
+/// - Throws: `NSGenericException` if assigned without first obtaining exclusive access to the receiver using ``lockForConfiguration:``.
+@property(nonatomic) BOOL automaticallyEnablesExposureSignals API_AVAILABLE(ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(macos, visionos) API_UNAVAILABLE( watchos);
@end
@@ -2835,6 +2963,39 @@
@property(nonatomic, readonly) float nominalFocalLengthIn35mmFilm API_AVAILABLE(ios(26.0)) API_UNAVAILABLE(macos, macCatalyst, tvos, visionos) API_UNAVAILABLE(watchos);
@end
+API_AVAILABLE(macos(27.0), ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(visionos) API_UNAVAILABLE(watchos)
+@interface AVCaptureDevice (AVCaptureDeviceContinuousAutoFocusTracking)
+
+/// Indicates whether the device should use continuous autofocus tracking.
+///
+/// The default value for this property is `false`. On a device with an active format where ``isContinuousAutoFocusTrackingSupported`` returns `true` and ``continuousAutoFocusTrackingEnabled`` is set to `true`, continuous autofocus tracking will be engaged when the device's focus mode is set to ``AVCaptureFocusModeContinuousAutoFocus``. When engaged, the subject at the current ``focusPointOfInterest`` will be tracked as it moves within the scene and will be kept in focus automatically. The device's ``isContinuousAutoFocusTrackingSubjectAcquired`` property will return `true` while any tracked subject remains in the scene. However, the device's ``focusPointOfInterest`` and ``focusRectOfInterest`` are not updated while continuous autofocus tracking is active. Continuous autofocus tracking can be made inactive by setting ``continuousAutoFocusTrackingEnabled`` to `false` and then setting the device's focus mode to ``AVCaptureFocusModeContinuousAutoFocus`` or by setting the focus mode to a value other than ``AVCaptureFocusModeContinuousAutoFocus``. When made inactive, ``isContinuousAutoFocusTrackingSubjectAcquired`` changes to `false`, as no subject is being tracked. For virtual cameras, continuous autofocus tracking only works on the ``activePrimaryConstituentDevice``.
+///
+/// To receive continuous autofocus tracking updates, it is required to connect this device to an ``AVCaptureMetadataOutput`` that is configured to deliver ``AVMetadataObjectTypeFocusTrackedObject``. If ``AVMetadataObjectTypeFocusTrackedObject`` is not subscribed, no updates will be provided for continuous autofocus tracking and the device's ``isContinuousAutoFocusTrackingSubjectAcquired`` property remains to be `false`.
+///
+/// - Throws: `NSInvalidArgumentException` if this property is set to `true` when the active format's ``isContinuousAutoFocusTrackingSupported`` returns `false`.
+/// - Throws: `NSInvalidArgumentException` if this property is set to `true` when the device is configured for cinematic video capture.
+/// - Throws: `NSGenericException` if the device is not locked for configuration using ``lockForConfiguration:``.
+@property(nonatomic, getter=isContinuousAutoFocusTrackingEnabled) BOOL continuousAutoFocusTrackingEnabled API_AVAILABLE(macos(27.0), ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(visionos) API_UNAVAILABLE(watchos);
+
+/// Bias applied to the lens position during continuous autofocus tracking, normalized between -1 and 1.
+///
+/// While the device is actively tracking a subject to keep in focus, this property may be used to specify a bias applied to the lens position so that different portions of the subject are in focus. This property's default value is 0 which aims to keep the median of the subject's depth profile in focus. Values approaching -1 bias the lens position towards the closest portion of the depth profile while values approaching 1 bias the lens position towards the furthest portion of the profile. As the subject moves, the bias continues to apply to the subject's new depth profile.
+///
+/// To apply bias updates, set the device's focus mode to ``AVCaptureFocusModeContinuousAutoFocus`` after each change. The bias value has no effect otherwise. The value will only be automatically reset to 0 if cinematic video capture is enabled.
+///
+/// - Throws: `NSInvalidArgumentException` if this property is set to a value other than 0 when the device's ``continuousAutoFocusTrackingEnabled`` is `false`.
+/// - Throws: `NSInvalidArgumentException` if this property is set to a value less than -1 or greater than 1.
+/// - Throws: `NSInvalidArgumentException` if this property is set to a non-zero value when the device is configured for cinematic video capture.
+/// - Throws: `NSGenericException` if the device is not locked for configuration using ``lockForConfiguration:``.
+@property(nonatomic) float continuousAutoFocusTrackingLensPositionBias API_AVAILABLE(macos(27.0), ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(visionos) API_UNAVAILABLE(watchos);
+
+/// Indicates whether the device is actively tracking a subject in the scene to maintain focus.
+///
+/// Returns `true` when the capture device is actively tracking a subject in the scene, and `false` otherwise. The subject is initially identified by ``focusPointOfInterest`` when focus mode is set to ``AVCaptureFocusModeContinuousAutoFocus`` with ``continuousAutoFocusTrackingEnabled`` set to `true`. This property is key-value observable and reflects only whether a subject is actively tracked, not which one. To identify the tracked subject, include ``AVMetadataObjectTypeFocusTrackedObject`` in the ``metadataObjectTypes`` of ``AVCaptureMetadataOutput``. The ``AVMetadataFocusTrackedObject`` delivered by the metadata output represents the subject currently tracked for continuous autofocus.
+@property(nonatomic, readonly, getter=isContinuousAutoFocusTrackingSubjectAcquired) BOOL continuousAutoFocusTrackingSubjectAcquired API_AVAILABLE(macos(27.0), ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(visionos) API_UNAVAILABLE(watchos);
+
+@end
+
#pragma mark - AVCaptureDeviceDiscoverySession
/*!
@@ -3299,7 +3460,38 @@
The value of this property is also used for the AVCaptureSystemZoomSlider's range.
*/
@property(nonatomic, readonly, nullable) AVZoomRange *systemRecommendedVideoZoomRange API_AVAILABLE(macos(15.0), ios(18.0), macCatalyst(18.0), tvos(18.0)) API_UNAVAILABLE(visionos) NS_REFINED_FOR_SWIFT;
+/** Reports if the given set of exposure parameters are supported by this format.
+
+ The intended use of this method is to query which combinations of "Auto" parameters (``AVFCapture/AVCaptureLensApertureAuto``, ``AVFCapture/AVCaptureExposureDurationAuto``, ``AVFCapture/AVCaptureISOAuto``) are supported by this format.
+ If you pass a numeric constant it will be range checked against the parameter's supported min and max. However you can also pass the "Current" constants (``AVFCapture/AVCaptureLensApertureCurrent``, ``AVFCapture/AVCaptureExposureDurationCurrent``, ``AVFCapture/AVCaptureISOCurrent``) to generically query locked vs. auto parameter support without picking arbitrary lock values.
+
+ > Example: to query support for "shutter priority" where the exposure duration is locked but auto-exposure continues to manage aperture and ISO:
+ > ```swift
+ > format.supportsExposureModeCustom(lensAperture: AVCaptureDevice.autoLensAperture, duration: AVCaptureDevice.currentExposureDuration, iso: AVCaptureDevice.autoISO)
+ > ```
+ Devices that have fixed aperture will have equivalent support for ``AVFCapture/AVCaptureLensApertureAuto`` and ``AVFCapture/AVCaptureLensApertureCurrent``.
+ */
+- (BOOL)supportsExposureModeCustomWithLensAperture:(float)lensAperture duration:(CMTime)duration ISO:(float)ISO NS_SWIFT_NAME(supportsExposureModeCustom(lensAperture:duration:iso:)) API_AVAILABLE(ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(macos, visionos);
+
+/** A sorted array of recommended values for the ``AVCaptureDevice/lensAperture`` property.
+
+ If this array contains a single item, the aperture is fixed at that value and cannot be changed.
+ If this array contains multiple items, the first will be the minimum recommended 𝑓-stop and the last will be the maximum recommended 𝑓-stop.
+
+ Using values from this list may provide optimal calibration and lens characteristics.
+ */
+@property(nonatomic, readonly) NSArray<NSNumber *> *recommendedLensApertureStops API_AVAILABLE(ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(macos, visionos) API_UNAVAILABLE(watchos) NS_REFINED_FOR_SWIFT;
+
+/// The minimum supported value for the ``AVCaptureDevice/lensAperture`` property.
+@property(nonatomic, readonly) float minLensAperture API_AVAILABLE(ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(macos, visionos) API_UNAVAILABLE(watchos);
+
+/// The maximum supported value for the ``AVCaptureDevice/lensAperture`` property.
+@property(nonatomic, readonly) float maxLensAperture API_AVAILABLE(ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(macos, visionos) API_UNAVAILABLE(watchos);
+
+/// The default value for the ``AVCaptureDevice/lensAperture`` property.
+@property(nonatomic, readonly) float defaultLensAperture API_AVAILABLE(ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(macos, visionos) API_UNAVAILABLE(watchos);
+
/*!
@property minExposureDuration
@abstract
@@ -3835,6 +4027,10 @@
/// Devices may support a limited frame rate range when Cinematic Video capture is active. If this device format does not support Cinematic Video capture, this property returns `nil`.
@property(nonatomic, readonly, nullable) AVFrameRateRange *videoFrameRateRangeForCinematicVideo API_AVAILABLE(macos(26.0), ios(26.0), macCatalyst(26.0), tvos(26.0)) API_UNAVAILABLE(visionos) API_UNAVAILABLE(watchos);
+/// Indicates whether the format supports Cinematic Video Metadata capture.
+///
+/// This property returns `true` if the format supports capturing cinematic video metadata alongside video. The metadata enables post-capture cinematic video editing using the Cinematic framework.
+@property(nonatomic, readonly, getter=isCinematicVideoMetadataCaptureSupported) BOOL cinematicVideoMetadataCaptureSupported API_AVAILABLE(macos(27.0), ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(visionos) API_UNAVAILABLE(watchos);
@end
@@ -3916,6 +4112,25 @@
@end
+API_AVAILABLE(macos(27.0), ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(visionos) API_UNAVAILABLE(watchos)
+@interface AVCaptureDeviceFormat (AVCaptureDeviceFormatContinuousAutoFocusTracking)
+
+/// Indicates whether the device format supports continuous autofocus tracking.
+///
+/// Continuous autofocus tracking allows the device to keep a subject in focus by monitoring it as it moves throughout the scene. The device's ``continuousAutoFocusTrackingEnabled`` property can only be set if this property returns `true`.
+@property(nonatomic, readonly, getter=isContinuousAutoFocusTrackingSupported) BOOL continuousAutoFocusTrackingSupported API_AVAILABLE(macos(27.0), ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(visionos) API_UNAVAILABLE(watchos);
+
+@end
+
+API_AVAILABLE(macos(27.0), ios(27.0), macCatalyst(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(watchos)
+@interface AVCaptureDeviceFormat (AVCaptureDeviceFormatLowLightVideoNoiseReduction)
+
+/// Indicates whether the format supports low light video noise reduction.
+///
+/// This property returns `true` if the format supports low light video noise reduction.
+@property(nonatomic, readonly, getter=isLowLightVideoNoiseReductionSupported) BOOL lowLightVideoNoiseReductionSupported API_AVAILABLE(macos(27.0), ios(27.0), macCatalyst(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(watchos);
+
+@end
#pragma mark - AVCaptureDeviceInputSource
diff -ruN /Applications/Xcode_27.0.0-beta6.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVCaptureFileOutput.h /Applications/Xcode_27.0.0-rc.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVCaptureFileOutput.h
--- /Applications/Xcode_27.0.0-beta6.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVCaptureFileOutput.h 2026-08-08 20:43:26
+++ /Applications/Xcode_27.0.0-rc.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVCaptureFileOutput.h 2026-08-08 18:02:55
@@ -592,6 +592,51 @@
*/
@property(nonatomic, getter=isSpatialVideoCaptureEnabled) BOOL spatialVideoCaptureEnabled API_AVAILABLE(macos(15.0), ios(18.0), macCatalyst(18.0), tvos(18.0)) API_UNAVAILABLE(visionos) API_UNAVAILABLE(watchos);
+/// Returns whether capturing cinematic video metadata to the movie file is supported in the current session configuration.
+///
+/// Cinematic video metadata enables post-capture cinematic video editing using the Cinematic framework.
+///
+/// This property returns `true` when all of the following conditions are met:
+/// - The source device's `activeFormat` supports cinematic video metadata capture.
+/// - The source device's dynamic aspect ratio is 16:9 or 9:16 (or unset).
+/// - Spatial video capture (`spatialVideoCaptureEnabled`) is not enabled.
+/// - No other incompatible features are enabled.
+///
+/// When switching cameras, formats, or toggling other features, this property may change. This property is key-value observable.
+@property(nonatomic, readonly, getter=isCinematicVideoMetadataCaptureSupported) BOOL cinematicVideoMetadataCaptureSupported
+ API_AVAILABLE(macos(27.0), ios(27.0), macCatalyst(27.0), tvos(27.0))
+ API_UNAVAILABLE(visionos)
+ API_UNAVAILABLE(watchos);
+
+/// Controls whether cinematic video metadata capture is automatically managed by the framework.
+///
+/// When this property is `true` (the default), the framework manages `cinematicVideoMetadataCaptureEnabled` automatically. The framework decides when to enable cinematic video metadata capture; capture is not guaranteed even when `cinematicVideoMetadataCaptureSupported` is `true`. Clients that need explicit control over whether metadata is captured should set this property to `false` and manage `cinematicVideoMetadataCaptureEnabled` directly.
+///
+/// When this property is `false`, `cinematicVideoMetadataCaptureEnabled` is not automatically managed and must be explicitly set by the client.
+///
+/// Setting this property from `true` to `false` sets `cinematicVideoMetadataCaptureEnabled` to `false`.
+///
+/// This property can be set before calling `-[AVCaptureSession startRunning]` or within `-[AVCaptureSession beginConfiguration]` and `-[AVCaptureSession commitConfiguration]` while the session is running.
+///
+/// Default value: `true`.
+@property(nonatomic) BOOL automaticallyAdjustsCinematicVideoMetadataCaptureEnabled
+ API_AVAILABLE(macos(27.0), ios(27.0), macCatalyst(27.0), tvos(27.0))
+ API_UNAVAILABLE(visionos)
+ API_UNAVAILABLE(watchos);
+
+/// Indicates whether cinematic video metadata is captured to movie files.
+///
+/// When `true`, recorded movie files include a cinematic video metadata track that enables post-capture cinematic video editing using the Cinematic framework.
+///
+/// This property may only be set when `automaticallyAdjustsCinematicVideoMetadataCaptureEnabled` is `false`. Setting this property when `automaticallyAdjustsCinematicVideoMetadataCaptureEnabled` is `true` throws an `NSInvalidArgumentException`.
+///
+/// This property may only be set to `true` when `cinematicVideoMetadataCaptureSupported` is `true`. Setting to `true` when not supported throws an `NSInvalidArgumentException`.
+///
+/// This property is key-value observable.
+@property(nonatomic, getter=isCinematicVideoMetadataCaptureEnabled) BOOL cinematicVideoMetadataCaptureEnabled
+ API_AVAILABLE(macos(27.0), ios(27.0), macCatalyst(27.0), tvos(27.0))
+ API_UNAVAILABLE(visionos)
+ API_UNAVAILABLE(watchos);
@end
@interface AVCaptureMovieFileOutput (ProVideoStorage)
diff -ruN /Applications/Xcode_27.0.0-beta6.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVCaptureSession.h /Applications/Xcode_27.0.0-rc.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVCaptureSession.h
--- /Applications/Xcode_27.0.0-beta6.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVCaptureSession.h 2026-08-08 20:44:39
+++ /Applications/Xcode_27.0.0-rc.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVCaptureSession.h 2026-08-08 18:02:55
@@ -1272,6 +1272,20 @@
*/
@property(nonatomic, getter=isCameraIntrinsicMatrixDeliveryEnabled) BOOL cameraIntrinsicMatrixDeliveryEnabled API_AVAILABLE(ios(11.0), macCatalyst(14.0), tvos(17.0)) API_UNAVAILABLE(macos, visionos);
+/// Indicates whether the connection supports low light video noise reduction.
+///
+/// This property returns `true` if the connection's source device's active format supports low light video noise reduction (see ``AVCaptureDeviceFormat/isLowLightVideoNoiseReductionSupported``) and the connection's output supports the feature. This value reflects the active configuration and can change as the active format, video stabilization mode or auto video frame rate changes. See ``automaticallyEnablesLowLightVideoNoiseReduction`` for a detailed discussion. This property is key-value observable.
+@property(nonatomic, readonly, getter=isLowLightVideoNoiseReductionSupported) BOOL lowLightVideoNoiseReductionSupported API_AVAILABLE(macos(27.0), ios(27.0), macCatalyst(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(watchos);
+
+/// Indicates whether the connection should automatically enable low light video noise reduction when the connection supports it.
+///
+/// On a connection where ``isLowLightVideoNoiseReductionSupported`` is `true`, the system can enable low light video noise reduction to improve video quality at the cost of additional power. This property defaults to `true` for movie file output connections. When ``automaticallyEnablesLowLightVideoNoiseReduction`` is `true`, the connection sets ``isLowLightVideoNoiseReductionEnabled`` to `true` automatically when the session configuration is committed and the connection supports the feature. For `AVCaptureMultiCamSession` configurations with multiple movie file outputs, automatic enablement is suppressed because the feature can only be active on one output at a time; in that case, set this property to `false` and control ``isLowLightVideoNoiseReductionEnabled`` directly on the desired connection. Enabling the feature on more than one movie file output connection increases the session's `hardwareCost` and may result in an `AVCaptureSessionRuntimeErrorNotification`. Setting this property on a connection that does not support low light video noise reduction is permitted but has no effect. Clients can key-value observe ``isLowLightVideoNoiseReductionEnabled`` to know when the connection has automatically changed the value.
+@property(nonatomic) BOOL automaticallyEnablesLowLightVideoNoiseReduction API_AVAILABLE(macos(27.0), ios(27.0), macCatalyst(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(watchos);
+
+/// Indicates whether low light video noise reduction is enabled for the current session.
+///
+/// A `BOOL` indicating whether low light video noise reduction is enabled on the connection. To set this property directly, first set ``automaticallyEnablesLowLightVideoNoiseReduction`` to `false`; setting this property while ``automaticallyEnablesLowLightVideoNoiseReduction`` is `true` throws an `NSInvalidArgumentException`. This property may only be set to `true` if the connection's ``isLowLightVideoNoiseReductionSupported`` property returns `true`, otherwise an `NSInvalidArgumentException` is thrown. This property is key-value observable.
+@property(nonatomic, getter=isLowLightVideoNoiseReductionEnabled) BOOL lowLightVideoNoiseReductionEnabled API_AVAILABLE(macos(27.0), ios(27.0), macCatalyst(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(watchos);
@end
diff -ruN /Applications/Xcode_27.0.0-beta6.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVFCapture.h /Applications/Xcode_27.0.0-rc.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVFCapture.h
--- /Applications/Xcode_27.0.0-beta6.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVFCapture.h 2026-08-08 20:44:38
+++ /Applications/Xcode_27.0.0-rc.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVFCapture.h 2026-08-08 17:55:46
@@ -9,6 +9,7 @@
#import <TargetConditionals.h>
#import <AVFoundation/AVCameraCalibrationData.h>
+#import <AVFoundation/AVCaptureAncillaryDataEncoder.h>
#import <AVFoundation/AVCaptureAudioDataOutput.h>
#import <AVFoundation/AVCaptureAudioPreviewOutput.h>
#import <AVFoundation/AVCaptureBroadcastVideoOutput.h>
diff -ruN /Applications/Xcode_27.0.0-beta6.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVMetadataObject.h /Applications/Xcode_27.0.0-rc.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVMetadataObject.h
--- /Applications/Xcode_27.0.0-beta6.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVMetadataObject.h 2026-08-18 02:06:36
+++ /Applications/Xcode_27.0.0-rc.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVMetadataObject.h 2026-08-08 19:20:55
@@ -95,9 +95,9 @@
@property(readonly) NSInteger groupID API_AVAILABLE(macos(26.0), ios(26.0), macCatalyst(26.0), tvos(26.0)) API_UNAVAILABLE(visionos, watchos);
-/// A unique identifier for each detected object type (face, body, hands, heads and salient objects) in a collection.
+/// A unique identifier for each detected object type (face, body, hands, heads, salient objects and focus-tracked objects) in a collection.
///
-/// Defaults to a value of -1 when invalid or not available. When used in conjunction with an ``AVCaptureMetadataOutput``, each newly detected object that enters the scene is assigned a unique identifier. ``objectID``s are never re-used as objects leave the picture and new ones enter. Objects that leave the picture and then re-enter are assigned a new ``objectID``.
+/// Defaults to a value of -1 when invalid or not available. When used in conjunction with an ``AVCaptureMetadataOutput``, each newly detected object that enters the scene is assigned a unique identifier. ``objectID``s are never re-used as objects leave the picture and new ones enter. Objects that leave the picture and then re-enter are assigned a new ``objectID``. Focus-tracked objects are an exception. They retain the same ``objectID`` when leaving and re-entering the picture.
@property(readonly) NSInteger objectID API_AVAILABLE(macos(26.0), ios(26.0), macCatalyst(26.0), tvos(26.0)) API_UNAVAILABLE(visionos, watchos);
@end
@@ -112,6 +112,48 @@
/// A BOOL indicating whether this metadata object represents a fixed focus.
@property(readonly, getter=isFixedFocus) BOOL fixedFocus API_AVAILABLE(macos(26.0), ios(26.0), macCatalyst(26.0), tvos(26.0)) API_UNAVAILABLE(visionos) API_UNAVAILABLE(watchos);
+
+@end
+
+#pragma mark - AVMetadataFocusTrackedObject
+
+/// An identifier for an instance of ``AVMetadataFocusTrackedObject``.
+///
+/// This metadata object type is only available when the source ``AVCaptureDevice``'s `activeFormat` has ``AVCaptureDeviceFormat/isContinuousAutoFocusTrackingSupported`` equal to `true`. It can therefore appear and disappear from ``AVCaptureMetadataOutput/availableMetadataObjectTypes`` as the active format changes; observers should not assume it is statically available for the lifetime of the session.
+AVF_EXPORT AVMetadataObjectType const AVMetadataObjectTypeFocusTrackedObject API_AVAILABLE(macos(27.0), ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(visionos) API_UNAVAILABLE(watchos);
+
+/// A metadata object that is maintained in focus by the camera's auto focus system continuously tracking it.
+///
+/// ``AVMetadataFocusTrackedObject`` represents a single tracked object in a picture. It is an immutable object describing the focus-tracked object.
+///
+/// On supported platforms, ``AVCaptureMetadataOutput`` outputs arrays of focus-tracked objects. See AVCaptureOutput.h.
+API_AVAILABLE(macos(27.0), ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(visionos) API_UNAVAILABLE(watchos)
+@interface AVMetadataFocusTrackedObject : AVMetadataObject <NSCopying>
+
+@end
+
+#pragma mark - AVMetadataCinematicVideoMetadataObject
+
+/// A constant that identifies Cinematic video metadata for post-capture Cinematic video editing.
+///
+/// This metadata object type is only available when the source ``AVCaptureDevice``'s `activeFormat` has ``AVCaptureDeviceFormat/isCinematicVideoMetadataCaptureSupported`` equal to `true`. It can therefore appear and disappear from ``AVCaptureMetadataOutput/availableMetadataObjectTypes`` as the active format changes; observers should not assume it is statically available for the lifetime of the session.
+AVF_EXPORT AVMetadataObjectType const AVMetadataObjectTypeCinematicVideoMetadata API_AVAILABLE(macos(27.0), ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(visionos) API_UNAVAILABLE(watchos);
+
+/// A metadata object containing opaque Cinematic video metadata for Cinematic video editing.
+///
+/// This object represents Cinematic video metadata captured during a recording session using ``AVCaptureMetadataOutput``.
+API_AVAILABLE(macos(27.0), ios(27.0), macCatalyst(27.0), tvos(27.0)) API_UNAVAILABLE(visionos) API_UNAVAILABLE(watchos)
+@interface AVMetadataCinematicVideoMetadataObject : AVMetadataObject <NSCopying>
+
+/// The format description for Cinematic video timed metadata sample buffers.
+///
+/// Use this format description when creating your ``AVAssetWriterInput`` for the Cinematic video timed metadata track.
+@property(class, nonatomic, readonly, nullable) CMFormatDescriptionRef cinematicVideoMetadataFormatDescription;
+
+/// A timed metadata group containing the Cinematic video metadata.
+///
+/// Append this group to an ``AVAssetWriterInputMetadataAdaptor`` to write the Cinematic video metadata track.
+@property(readonly, nonatomic, nullable) AVTimedMetadataGroup *timedMetadataGroup;
@end