-
Notifications
You must be signed in to change notification settings - Fork 516
VideoToolbox macOS xcode15.0 b1
Alex Soto edited this page Jun 5, 2023
·
1 revision
#VideoToolbox.framework
diff -ruN /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTCompressionProperties.h /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTCompressionProperties.h
--- /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTCompressionProperties.h 2023-03-09 23:50:02
+++ /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTCompressionProperties.h 2023-05-31 08:45:34
@@ -3,7 +3,7 @@
Framework: VideoToolbox
- Copyright 2007-2021 Apple Inc. All rights reserved.
+ Copyright 2007-2022 Apple Inc. All rights reserved.
Standard Video Toolbox compression properties.
*/
@@ -43,10 +43,10 @@
/*
Recommendations for configuring VTCompressionSessions
- These are recommendations for configuring VTCompressionSessions for some common scenarios.
- These are starting points; you may find that the details of your application necessitate further adjustments.
+ These are recommendations for configuring VTCompressionSessions for some common scenarios.
+ These are starting points. The requirements of the application may necessitate further adjustments.
- Video-conferencing, live capture, and live broadcast scenarios:
+ Live capture and live broadcast scenarios:
• kVTCompressionPropertyKey_RealTime: kCFBooleanTrue
• kVTCompressionPropertyKey_ExpectedFrameRate: set to real-time frame rate if possible
@@ -58,9 +58,21 @@
• kVTCompressionPropertyKey_RealTime: kCFBooleanFalse
• kVTCompressionPropertyKey_MaximizePowerEfficiency: kCFBooleanTrue
- Ultra-low-latency capture / conferencing / cloud gaming (cases where every millisecond counts):
+ Ultra-low-latency conferencing and cloud gaming (cases where every millisecond counts):
+ • kVTVideoEncoderSpecification_EnableLowLatencyRateControl: kCFBooleanTrue
• kVTCompressionPropertyKey_RealTime: kCFBooleanTrue
+ • kVTCompressionPropertyKey_ExpectedFrameRate: set to real-time frame rate if possible
• kVTCompressionPropertyKey_PrioritizeEncodingSpeedOverQuality: kCFBooleanTrue
+
+ Optionally, kVTCompressionPropertyKey_AllowTemporalCompression, kVTCompressionPropertyKey_AllowFrameReordering,
+ kVTCompressionPropertyKey_MaxKeyFrameInterval, and kVTCompressionPropertyKey_MaxKeyFrameIntervalDuration
+ may be used to configure frame dependencies in the video stream.
+
+ kVTCompressionPropertyKey_AverageBitRate, kVTCompressionPropertyKey_DataRateLimits, kVTCompressionPropertyKey_ConstantBitRate may be used to configure the video data rate.
+
+ • kVTCompressionPropertyKey_AverageBitRate specifies the desired long term average bit rate. It is a soft limit, so the encoder may overshoot or undershoot and the average bit rate of the output video may be over or under the target.
+ • kVTCompressionPropertyKey_DataRateLimits specifies a hard data rate cap for a given time window. The encoder will not overshoot. kVTCompressionPropertyKey_AverageBitRate and kVTCompressionPropertyKey_DataRateLimits may be used together to specify an overall target bit rate while also establishing hard limits over a smaller window.
+ • kVTCompressionPropertyKey_ConstantBitRate is intended for legacy content distribution networks which require constant bitrate, and is not intended for general streaming scenarios.
*/
#pragma mark Buffers
@@ -961,6 +973,54 @@
VT_EXPORT const CFStringRef kVTCompressionPropertyKey_EncoderID API_AVAILABLE(macosx(10.13), ios(11.0), tvos(11.0)); // CFStringRef
/*!
+ @constant kVTCompressionPropertyKey_RecommendedParallelizationLimit
+ @abstract
+ If supported by the underlying video encoder, returns the recommended number of VTCompressionSessions to instantiate in a parallel encoding configuration.
+ @discussion
+ Parallel encoding VTCompressionSessions require the use of the properties kVTCompressionPropertyKey_MoreFramesBeforeStart, kVTCompressionPropertyKey_MoreFramesAfterEnd, and kVTCompressionPropertyKey_SourceFrameCount.
+ e.g. If the property returns 4, a setup for 4 VTCompressionSessions on a 400 frame movie might look like:
+ compressionSession1
+ kVTCompressionPropertyKey_MoreFramesBeforeStart = false
+ kVTCompressionPropertyKey_MoreFramesAfterEnd = true
+ kVTCompressionPropertyKey_SourceFrameCount = 100
+ compressionSession2
+ kVTCompressionPropertyKey_MoreFramesBeforeStart = true
+ kVTCompressionPropertyKey_MoreFramesAfterEnd = true
+ kVTCompressionPropertyKey_SourceFrameCount = 100
+ compressionSession3
+ kVTCompressionPropertyKey_MoreFramesBeforeStart = true
+ kVTCompressionPropertyKey_MoreFramesAfterEnd = true
+ kVTCompressionPropertyKey_SourceFrameCount = 100
+ compressionSession4
+ kVTCompressionPropertyKey_MoreFramesBeforeStart = true
+ kVTCompressionPropertyKey_MoreFramesAfterEnd = false
+ kVTCompressionPropertyKey_SourceFrameCount = 100
+*/
+VT_EXPORT const CFStringRef kVTCompressionPropertyKey_RecommendedParallelizationLimit API_AVAILABLE(macosx(14.0)) API_UNAVAILABLE(ios, tvos, watchos); // Read-only, CFNumber<int>
+
+/*!
+ @constant kVTCompressionPropertyKey_RecommendedParallelizedSubdivisionMinimumFrameCount
+ @abstract
+ If supported by the underlying video encoder, returns the recommended minimum number of video frames for a given subdivision in a parallel encoding configuration.
+ @discussion
+ For best results, ensure that the total number of frames of a parallelized subdivision is greater than or equal to this returned value.
+ See also kVTCompressionPropertyKey_RecommendedParallelizationLimit
+ See also kVTCompressionPropertyKey_RecommendedParallelizedSubdivisionMinimumDuration
+*/
+VT_EXPORT const CFStringRef kVTCompressionPropertyKey_RecommendedParallelizedSubdivisionMinimumFrameCount API_AVAILABLE(macosx(14.0)) API_UNAVAILABLE(ios, tvos, watchos); // Read-only, CFNumber<uint64_t>
+
+/*!
+ @constant kVTCompressionPropertyKey_RecommendedParallelizedSubdivisionMinimumDuration
+ @abstract
+ If supported by the underlying video encoder, returns the recommended minimum duration for a given subdivision in a parallel encoding configuration.
+ @discussion
+ For best results, ensure that the total duration of a parallelized subdivision is greater than or equal to this returned value.
+ See also kVTCompressionPropertyKey_RecommendedParallelizationLimit
+ See also kVTCompressionPropertyKey_RecommendedParallelizedSubdivisionMinimumFrameCount
+*/
+VT_EXPORT const CFStringRef kVTCompressionPropertyKey_RecommendedParallelizedSubdivisionMinimumDuration API_AVAILABLE(macosx(14.0)) API_UNAVAILABLE(ios, tvos, watchos); // Read-only, CMTime as CFDictionary
+
+/*!
@constant kVTCompressionPropertyKey_PreserveDynamicHDRMetadata
@abstract
Controls whether or not to preserve any dynamic HDR metadata on the input pixel buffer
@@ -1080,6 +1140,72 @@
*/
VT_EXPORT const CFStringRef kVTSampleAttachmentKey_RequireLTRAcknowledgementToken API_AVAILABLE(macosx(12.0), ios(15.0), tvos(15.0)); // CFNumberRef, Optional
+#pragma mark Multi-image compression
+
+/*!
+ @constant kVTCompressionPropertyKey_MVHEVCVideoLayerIDs
+ @abstract
+ Requests multi-image encoding; advises encoder to expect CMTaggedBufferGroups with specific CMTags referencing these MV-HEVC VideoLayerIDs.
+ @discussion
+ MV-HEVC specific.
+ The property value is a CFArray containing VideoLayerIDs as CFNumbers.
+ The property is NULL by default.
+ */
+VT_EXPORT const CFStringRef kVTCompressionPropertyKey_MVHEVCVideoLayerIDs API_AVAILABLE(macos(14.0), ios(17.0)) API_UNAVAILABLE(tvos, watchos); // Read/write, CFArray(CFNumber), Optional
+
+/*!
+ @constant kVTCompressionPropertyKey_MVHEVCViewIDs
+ @abstract
+ Specifies the ViewIDs corresponding to the VideoLayerIDs provided via kVTCompressionPropertyKey_MVHEVCVideoLayerIDs.
+ @discussion
+ MV-HEVC specific.
+ The property value is a CFArray containing ViewIDs as CFNumbers.
+ The entries in this array should be in the same order and have the same count as the value set via kVTCompressionPropertyKey_MVHEVCVideoLayerIDs.
+ The property is NULL by default.
+ */
+VT_EXPORT const CFStringRef kVTCompressionPropertyKey_MVHEVCViewIDs API_AVAILABLE(macos(14.0), ios(17.0)) API_UNAVAILABLE(tvos, watchos); // Read/write, CFArray(CFNumber), Optional
+
+/*!
+ @constant kVTCompressionPropertyKey_MVHEVCLeftAndRightViewIDs
+ @abstract
+ Specifies which of the ViewIDs provided via kVTCompressionPropertyKey_MVHEVCViewIDs is the "left view id" and which is the "right view id".
+ @discussion
+ MV-HEVC specific.
+ These ViewIDs will be incorporated into the 3D Reference Displays Info SEI message.
+ The property value is a CFArray containing two ViewIDs as CFNumbers with the first correspponding to the left eye and the second corresponding to the right eye.
+ The property is NULL by default.
+ */
+VT_EXPORT const CFStringRef kVTCompressionPropertyKey_MVHEVCLeftAndRightViewIDs API_AVAILABLE(macos(14.0), ios(17.0)) API_UNAVAILABLE(tvos, watchos); // Read/write, CFArray[CFNumber(left view ID), CFNumber(right view ID)], Optional
+
+#pragma mark VideoExtendedUsage signaling
+
+/*!
+ @constant kVTCompressionPropertyKey_HeroEye
+ @abstract
+ Specifies the value of kCMFormatDescriptionExtension_HeroEye.
+ @discussion
+ The value will be set on the format description for output samples and may affect the decoded frame presentation.
+ */
+VT_EXPORT const CFStringRef kVTCompressionPropertyKey_HeroEye API_AVAILABLE(macos(14.0), ios(17.0)) API_UNAVAILABLE(tvos, watchos); // CFString, see kCMFormatDescriptionExtension_HeroEye
+
+/*!
+ @constant kVTCompressionPropertyKey_StereoCameraBaseline
+ @abstract
+ Specifies the value of kCMFormatDescriptionExtension_StereoCameraBaseline.
+ @discussion
+ The value will be set on the format description for output samples and may affect the decoded frame presentation.
+ */
+VT_EXPORT const CFStringRef kVTCompressionPropertyKey_StereoCameraBaseline API_AVAILABLE(macos(14.0), ios(17.0)) API_UNAVAILABLE(tvos, watchos); // CFNumber(uint32), see kCMFormatDescriptionExtension_StereoCameraBaseline
+
+/*!
+ @constant kVTCompressionPropertyKey_HorizontalDisparityAdjustment
+ @abstract
+ Specifies the value of kCMFormatDescriptionExtension_HorizontalDisparityAdjustment.
+ @discussion
+ The value will be set on the format description for output samples and may affect the decoded frame presentation.
+ */
+
+VT_EXPORT const CFStringRef kVTCompressionPropertyKey_HorizontalDisparityAdjustment API_AVAILABLE(macos(14.0), ios(17.0)) API_UNAVAILABLE(tvos, watchos); // CFNumber(int32), see kCMFormatDescriptionExtension_HorizontalDisparityAdjustment
CM_ASSUME_NONNULL_END
diff -ruN /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTCompressionSession.h /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTCompressionSession.h
--- /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTCompressionSession.h 2023-03-09 19:13:24
+++ /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTCompressionSession.h 2023-05-31 04:53:34
@@ -3,7 +3,7 @@
Framework: VideoToolbox
- Copyright © 2006-2021 Apple Inc. All rights reserved.
+ Copyright © 2006-2023 Apple Inc. All rights reserved.
Video Toolbox client API for compressing video frames.
@@ -23,6 +23,7 @@
#include <CoreMedia/CMFormatDescription.h>
#include <CoreMedia/CMTime.h>
#include <CoreMedia/CMTimeRange.h>
+#include <CoreMedia/CMTaggedBufferGroup.h>
#include <VideoToolbox/VTSession.h>
#include <VideoToolbox/VTCompressionProperties.h>
@@ -52,7 +53,7 @@
to tear it down and CFRelease to release your object reference.
*/
-typedef struct CM_BRIDGED_TYPE(id) OpaqueVTCompressionSession* VTCompressionSessionRef;
+typedef struct CM_BRIDGED_TYPE(id) OpaqueVTCompressionSession* VTCompressionSessionRef CM_SWIFT_NONSENDABLE;
/*!
@typedef VTCompressionOutputCallback
@@ -273,7 +274,7 @@
typedef void (^VTCompressionOutputHandler)(
OSStatus status,
VTEncodeInfoFlags infoFlags,
- CM_NULLABLE CMSampleBufferRef sampleBuffer );
+ CM_NULLABLE CMSampleBufferRef sampleBuffer ) CM_SWIFT_SENDABLE;
/*!
@function VTCompressionSessionEncodeFrameWithOutputHandler
@@ -334,6 +335,103 @@
CM_NONNULL VTCompressionSessionRef session,
CMTime completeUntilPresentationTimeStamp) API_AVAILABLE(macosx(10.8), ios(8.0), tvos(10.2)); // complete all frames if non-numeric
+#pragma mark Multi-image compression
+
+/*!
+ @function VTIsStereoMVHEVCEncodeSupported
+ @abstract Indicates whether the current system supports stereo MV-HEVC encode.
+ @discussion This call returning true does not guarantee that encode resources will be available at all times.
+ */
+VT_EXPORT Boolean
+VTIsStereoMVHEVCEncodeSupported( void ) API_AVAILABLE(macos(14.0), ios(17.0));
+
+/*!
+ @function VTCompressionSessionEncodeMultiImageFrame
+ @abstract
+ Call this function to present a multi-image frame to the compression session.
+ Encoded frames may or may not be output before the function returns.
+ @discussion
+ The client should not modify the pixel data after making this call.
+ The session and/or encoder will retain the image buffer as long as necessary.
+ @param session
+ The compression session.
+ @param taggedBufferGroup
+ A CMTaggedBufferGroup containing the multiple images for a video frame to be compressed.
+ @param presentationTimeStamp
+ The presentation timestamp for this frame, to be attached to the sample buffer.
+ Each presentation timestamp passed to a session must be greater than the previous one.
+ @param duration
+ The presentation duration for this frame, to be attached to the sample buffer.
+ If you do not have duration information, pass kCMTimeInvalid.
+ @param frameProperties
+ Contains key/value pairs specifying additional properties for encoding this frame.
+ Note that some session properties may also be changed between frames.
+ Such changes have effect on subsequently encoded frames.
+ @param sourceFrameRefcon
+ Your reference value for the frame, which will be passed to the output callback function.
+ @param infoFlagsOut
+ Points to a VTEncodeInfoFlags to receive information about the encode operation.
+ The kVTEncodeInfo_Asynchronous bit may be set if the encode is (or was) running
+ asynchronously.
+ The kVTEncodeInfo_FrameDropped bit may be set if the frame was dropped (synchronously).
+ Pass NULL if you do not want to receive this information.
+*/
+VT_EXPORT OSStatus
+VTCompressionSessionEncodeMultiImageFrame(
+ CM_NONNULL VTCompressionSessionRef session,
+ CM_NONNULL CMTaggedBufferGroupRef taggedBufferGroup,
+ CMTime presentationTimeStamp,
+ CMTime duration, // may be kCMTimeInvalid
+ CM_NULLABLE CFDictionaryRef frameProperties,
+ void * CM_NULLABLE sourceFrameRefcon,
+ VTEncodeInfoFlags * CM_NULLABLE infoFlagsOut ) API_AVAILABLE(macosx(14.0), ios(17.0)) API_UNAVAILABLE(tvos) CF_SWIFT_UNAVAILABLE("Unavailable in Swift");
+
+
+#if __BLOCKS__
+/*!
+ @function VTCompressionSessionEncodeMultiImageFrameWithOutputHandler
+ @abstract
+ Call this function to present a multi-image frame to the compression session.
+ Encoded frames may or may not be output before the function returns.
+ @discussion
+ The client should not modify the pixel data after making this call.
+ The session and/or encoder will retain the image buffer as long as necessary.
+ Cannot be called with a session created with a VTCompressionOutputCallback.
+ @param session
+ The compression session.
+ @param taggedBufferGroup
+ A CMTaggedBufferGroup containing the multiple images for a video frame to be compressed.
+ @param presentationTimeStamp
+ The presentation timestamp for this frame, to be attached to the sample buffer.
+ Each presentation timestamp passed to a session must be greater than the previous one.
+ @param duration
+ The presentation duration for this frame, to be attached to the sample buffer.
+ If you do not have duration information, pass kCMTimeInvalid.
+ @param frameProperties
+ Contains key/value pairs specifying additional properties for encoding this frame.
+ Note that some session properties may also be changed between frames.
+ Such changes have effect on subsequently encoded frames.
+ @param infoFlagsOut
+ Points to a VTEncodeInfoFlags to receive information about the encode operation.
+ The kVTEncodeInfo_Asynchronous bit may be set if the encode is (or was) running
+ asynchronously.
+ The kVTEncodeInfo_FrameDropped bit may be set if the frame was dropped (synchronously).
+ Pass NULL if you do not want to receive this information.
+ @param outputHandler
+ The block to be called when encoding the frame is completed.
+ This block may be called asynchronously, on a different thread from the one that calls VTCompressionSessionEncodeMultiImageFrameWithOutputHandler.
+ */
+VT_EXPORT OSStatus
+VTCompressionSessionEncodeMultiImageFrameWithOutputHandler(
+ CM_NONNULL VTCompressionSessionRef session,
+ CM_NONNULL CMTaggedBufferGroupRef taggedBufferGroup,
+ CMTime presentationTimeStamp,
+ CMTime duration, // may be kCMTimeInvalid
+ CM_NULLABLE CFDictionaryRef frameProperties, // may be NULL
+ VTEncodeInfoFlags * CM_NULLABLE infoFlagsOut,
+ CM_NONNULL VTCompressionOutputHandler outputHandler ) API_AVAILABLE(macosx(14.0), ios(17.0)) API_UNAVAILABLE(tvos) CF_REFINED_FOR_SWIFT;
+#endif // __BLOCKS__
+
#pragma mark Multi-pass
/*
diff -ruN /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTDecompressionProperties.h /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTDecompressionProperties.h
--- /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTDecompressionProperties.h 2023-03-09 23:53:06
+++ /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTDecompressionProperties.h 2023-05-26 21:28:43
@@ -3,7 +3,7 @@
Framework: VideoToolbox
- Copyright © 2007-2020 Apple Inc. All rights reserved.
+ Copyright © 2007-2023 Apple Inc. All rights reserved.
Standard Video Toolbox decompression properties.
*/
@@ -137,7 +137,7 @@
VT_EXPORT const CFStringRef kVTDecompressionPropertyKey_ContentHasInterframeDependencies API_AVAILABLE(macosx(10.8), ios(8.0), tvos(10.2)); // Read-only, CFBoolean
#pragma mark Hardware acceleration
-#if !TARGET_OS_IPHONE
+
/*!
@constant kVTVideoDecoderSpecification_EnableHardwareAcceleratedVideoDecoder
@abstract
@@ -149,7 +149,7 @@
this property can be set to kCFBooleanFalse.
In MacOS 10.15 and later, hardware decode is enabled in VTDecompressionSessions by default.
*/
-VT_EXPORT const CFStringRef kVTVideoDecoderSpecification_EnableHardwareAcceleratedVideoDecoder API_AVAILABLE(macosx(10.9), ios(8.0), tvos(10.2)); // CFBoolean, Optional, true by default
+VT_EXPORT const CFStringRef kVTVideoDecoderSpecification_EnableHardwareAcceleratedVideoDecoder API_AVAILABLE(macosx(10.9), ios(17.0), tvos(17.0)); // CFBoolean, Optional, true by default
/*!
@constant kVTVideoDecoderSpecification_RequireHardwareAcceleratedVideoDecoder
@@ -169,7 +169,7 @@
- the requested decoding format or configuration is not supported
- the hardware decode resources on the machine are busy
*/
-VT_EXPORT const CFStringRef kVTVideoDecoderSpecification_RequireHardwareAcceleratedVideoDecoder API_AVAILABLE(macosx(10.9), ios(8.0), tvos(10.2)); // CFBoolean, Optional
+VT_EXPORT const CFStringRef kVTVideoDecoderSpecification_RequireHardwareAcceleratedVideoDecoder API_AVAILABLE(macosx(10.9), ios(17.0), tvos(17.0)); // CFBoolean, Optional
/*!
@constant kVTDecompressionPropertyKey_UsingHardwareAcceleratedVideoDecoder
@@ -180,8 +180,7 @@
accelerated decode using kVTVideoDecoderSpecification_EnableHardwareAcceleratedVideoDecoder
to see if a hardware accelerated decoder was selected.
*/
-VT_EXPORT const CFStringRef kVTDecompressionPropertyKey_UsingHardwareAcceleratedVideoDecoder API_AVAILABLE(macosx(10.9), ios(8.0), tvos(10.2)) ; // CFBoolean, Read; assumed false by default
-#endif // !TARGET_OS_IPHONE
+VT_EXPORT const CFStringRef kVTDecompressionPropertyKey_UsingHardwareAcceleratedVideoDecoder API_AVAILABLE(macosx(10.9), ios(17.0), tvos(17.0)) ; // CFBoolean, Read; assumed false by default
#pragma mark Decoder behavior
@@ -429,10 +428,36 @@
@abstract
This controls whether or not to propagate any per frame HDR
display metadata from the input compressed bitstream to the output pixel buffer.
- @discussion
*/
VT_EXPORT const CFStringRef kVTDecompressionPropertyKey_PropagatePerFrameHDRDisplayMetadata API_AVAILABLE(macosx(11.0), ios(14.0), tvos(14.0)); // Read/write, CFBoolean, Optional, default is kCFBooleanTrue
+/*!
+ @constant kVTDecompressionPropertyKey_GeneratePerFrameHDRDisplayMetadata
+ @abstract
+ Generates Per Frame HDR Metadata and attaches it to the resulting decoded CVPixelBuffers.
+ @discussion
+ If the color space and YCbCrMatrix matches a supported HDR format such as HLG (kCMFormatDescriptionTransferFunction_ITU_R_2100_HLG)
+ the decoded frame will be analyzed and metadata will be added as an attachment to the CVPixelBuffer.
+*/
+VT_EXPORT const CFStringRef kVTDecompressionPropertyKey_GeneratePerFrameHDRDisplayMetadata API_AVAILABLE(macosx(14.0), ios(17.0)); // CFBoolean, Read/Write, Optional, kCFBooleanFalse by default
+
+
+#pragma mark Multi-image decompression
+
+/*!
+ @constant kVTDecompressionPropertyKey_RequestedMVHEVCVideoLayerIDs
+ @abstract
+ Requests multi-image decoding of specific MV-HEVC VideoLayerIDs.
+ @discussion
+ MV-HEVC specific.
+ Requires that the VTDecompressionSession client use VTDecompressionSessionSetMultiImageCallback to install a callback capable of receiving CMTaggedBufferGroups in response to multi-image DecodeFrame requests.
+ The property value is a CFArray containing VideoLayerIDs as CFNumbers.
+ MV-HEVC VideoLayerIDs not in this list do not need to be output, and the decoder may skip decoding them if not otherwise necessary.
+ The property is NULL by default.
+ If this property is NULL, MV-HEVC shall be decoded ignoring layers other than the base layer.
+ Terminology note: in multi-image decompression, a single video sample (from one CMSampleBuffer) contains a single frame (with one PTS) that is decoded to produce multiple images.
+ */
+VT_EXPORT const CFStringRef kVTDecompressionPropertyKey_RequestedMVHEVCVideoLayerIDs API_AVAILABLE(macos(14.0), ios(17.0)) API_UNAVAILABLE(tvos, watchos); // Read/write, CFArray(CFNumber), Optional
CM_ASSUME_NONNULL_END
diff -ruN /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTDecompressionSession.h /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTDecompressionSession.h
--- /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTDecompressionSession.h 2023-03-09 23:50:02
+++ /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTDecompressionSession.h 2023-05-31 04:53:34
@@ -3,7 +3,7 @@
Framework: VideoToolbox
- Copyright 2006-2013 Apple Inc. All rights reserved.
+ Copyright 2006-2023 Apple Inc. All rights reserved.
Video Toolbox client API for decompressing video frames.
@@ -22,6 +22,7 @@
#include <CoreMedia/CMSampleBuffer.h>
#include <CoreMedia/CMFormatDescription.h>
#include <CoreMedia/CMTime.h>
+#include <CoreMedia/CMTaggedBufferGroup.h>
#include <VideoToolbox/VTSession.h>
#include <VideoToolbox/VTDecompressionProperties.h>
@@ -48,7 +49,7 @@
to tear it down and CFRelease to release your object reference.
*/
-typedef struct CM_BRIDGED_TYPE(id) OpaqueVTDecompressionSession* VTDecompressionSessionRef;
+typedef struct CM_BRIDGED_TYPE(id) OpaqueVTDecompressionSession* VTDecompressionSessionRef CM_SWIFT_NONSENDABLE;
/*!
@typedef VTDecompressionOutputCallback
@@ -94,8 +95,8 @@
struct VTDecompressionOutputCallbackRecord {
CM_NULLABLE VTDecompressionOutputCallback decompressionOutputCallback;
void * CM_NULLABLE decompressionOutputRefCon;
-};
-typedef struct VTDecompressionOutputCallbackRecord VTDecompressionOutputCallbackRecord;
+} CM_SWIFT_NONSENDABLE;
+typedef struct VTDecompressionOutputCallbackRecord VTDecompressionOutputCallbackRecord CM_SWIFT_NONSENDABLE;
/*!
@function VTDecompressionSessionCreate
@@ -219,7 +220,7 @@
VTDecodeInfoFlags infoFlags,
CM_NULLABLE CVImageBufferRef imageBuffer,
CMTime presentationTimeStamp,
- CMTime presentationDuration );
+ CMTime presentationDuration ) CM_SWIFT_SENDABLE;
/*!
@function VTDecompressionSessionDecodeFrameWithOutputHandler
@@ -332,7 +333,153 @@
// See VTSession.h for property access APIs on VTDecompressionSessions.
// See VTDecompressionProperties.h for standard property keys and values for decompression sessions.
-
+#pragma mark Multi-image decompression
+
+/*!
+ @function VTIsStereoMVHEVCDecodeSupported
+ @abstract Indicates whether the current system supports stereo MV-HEVC decode.
+ @discussion This call returning true does not guarantee that decode resources will be available at all times.
+ */
+VT_EXPORT Boolean
+VTIsStereoMVHEVCDecodeSupported( void ) API_AVAILABLE(macos(14.0), ios(17.0));
+
+/*!
+ @typedef VTDecompressionOutputMultiImageCallback
+ @abstract Prototype for callback invoked when multi-image frame decompression is complete.
+ @discussion
+ When you create a decompression session, you pass in a callback function to be called
+ for decompressed frames. This function will not necessarily be called in display order.
+ @param decompressionOutputMultiImageRefCon
+ The callback's reference value, copied from the outputMultiImageRefcon passed to
+ VTDecompressionSessionSetMultiImageCallback.
+ @param sourceFrameRefCon
+ The frame's reference value, copied from the sourceFrameRefCon argument to
+ VTDecompressionSessionDecodeFrame.
+ @param status
+ noErr if decompression was successful; an error code if decompression was not successful.
+ @param infoFlags
+ Contains information about the decode operation.
+ The kVTDecodeInfo_Asynchronous bit may be set if the decode ran asynchronously.
+ The kVTDecodeInfo_FrameDropped bit may be set if the frame was dropped.
+ If the kVTDecodeInfo_ImageBufferModifiable bit is set, it is safe for the client to modify the imageBuffer.
+ @param taggedBufferGroup
+ Contains the decompressed frame's multiple images, if decompression was successful; otherwise, NULL.
+ IMPORTANT: The video decompressor may still be referencing the pixelBuffers returned in this
+ callback if the kVTDecodeInfo_ImageBufferModifiable flag is not set. Unless this flag
+ is set, it is not safe to modify the returned pixelBuffers.
+ @param presentationTimeStamp
+ The frame's presentation timestamp, which will be determined by calling
+ CMSampleBufferGetOutputPresentationTimeStamp; kCMTimeInvalid if not available.
+ @param presentationDuration
+ The frame's presentation duration, which will be determined by calling
+ CMSampleBufferGetOutputDuration; kCMTimeInvalid if not available.
+*/
+
+typedef void (*VTDecompressionOutputMultiImageCallback)(
+ void * CM_NULLABLE decompressionOutputMultiImageRefCon,
+ void * CM_NULLABLE sourceFrameRefCon,
+ OSStatus status,
+ VTDecodeInfoFlags infoFlags,
+ CM_NULLABLE CMTaggedBufferGroupRef taggedBufferGroup,
+ CMTime presentationTimeStamp,
+ CMTime presentationDuration );
+
+/*!
+ @function VTDecompressionSessionSetMultiImageCallback
+ @abstract Provides a callback capable of receiving multiple images for individual DecodeFrame requests.
+ @discussion
+ The outputMultiImageCallback will be used when the video decoder outputs CMTaggedBufferGroups.
+ When installed, outputMultiImageCallback will also be used when DecodeFrame operations fail and return a nonzero status.
+ The original single-image callback will only be used in the case where the video decoder outputs a CVImageBuffer instead of a CMTaggedBufferGroup.
+ Terminology note: in multi-image decompression, a single video sample (from one CMSampleBuffer) contains a single frame (with one PTS) that is decoded to produce multiple images.
+*/
+VT_EXPORT OSStatus
+VTDecompressionSessionSetMultiImageCallback(
+ CM_NONNULL VTDecompressionSessionRef decompressionSession,
+ CM_NONNULL VTDecompressionOutputMultiImageCallback outputMultiImageCallback,
+ void * CM_NULLABLE outputMultiImageRefcon) API_AVAILABLE(macosx(14.0), ios(17.0)) API_UNAVAILABLE(tvos) CF_SWIFT_UNAVAILABLE("Unavailable in Swift");
+
+#if __BLOCKS__
+/*!
+ @typedef VTDecompressionMultiImageCapableOutputHandler
+ @abstract Prototype for block invoked when frame decompression is complete.
+ @discussion
+ When you decode a frame, you pass in a callback block to be called
+ for that decompressed frame. This block will not necessarily be called in display order.
+ If the VTDecompressionSessionDecodeFrameWithOutputHandler call returns an error, the block
+ will not be called.
+ @param status
+ noErr if decompression was successful; an error code if decompression was not successful.
+ @param infoFlags
+ Contains information about the decode operation.
+ The kVTDecodeInfo_Asynchronous bit may be set if the decode ran asynchronously.
+ The kVTDecodeInfo_FrameDropped bit may be set if the frame was dropped.
+ If the kVTDecodeInfo_ImageBufferModifiable bit is set, it is safe for the client to modify the imageBuffer.
+ @param imageBuffer
+ Contains the decompressed frame, if decompression was successful and the CMSampleBuffer contained
+ a single image frame; otherwise, NULL.
+ IMPORTANT: The video decompressor may still be referencing the imageBuffer returned in this
+ callback if the kVTDecodeInfo_ImageBufferModifiable flag is not set. Unless this flag
+ is set, it is not safe to modify the returned imageBuffer.
+ @param taggedBufferGroup
+ Contains the decompressed frame's multiple images, if decompression was successful and the CMSampleBuffer
+ contained a multi-image frame; otherwise, NULL.
+ IMPORTANT: The video decompressor may still be referencing the pixelBuffers returned in this
+ callback if the kVTDecodeInfo_ImageBufferModifiable flag is not set. Unless this flag
+ is set, it is not safe to modify the returned pixelBuffers.
+ @param presentationTimeStamp
+ The frame's presentation timestamp; kCMTimeInvalid if not available.
+ @param presentationDuration
+ The frame's presentation duration; kCMTimeInvalid if not available.
+ */
+typedef void (^VTDecompressionMultiImageCapableOutputHandler)(
+ OSStatus status,
+ VTDecodeInfoFlags infoFlags,
+ CM_NULLABLE CVImageBufferRef imageBuffer,
+ CM_NULLABLE CMTaggedBufferGroupRef taggedBufferGroup,
+ CMTime presentationTimeStamp,
+ CMTime presentationDuration ) CM_SWIFT_SENDABLE;
+
+/*!
+ @function VTDecompressionSessionDecodeFrameWithMultiImageCapableOutputHandler
+ @abstract Decompresses a video frame.
+ @discussion
+ Cannot be called with a session created with a VTDecompressionOutputCallbackRecord.
+ If the VTDecompressionSessionDecodeFrameWithOutputHandler call returns an error, the block
+ will not be called.
+ @param session
+ The decompression session.
+ @param sampleBuffer
+ A CMSampleBuffer containing one or more video frames.
+ @param decodeFlags
+ A bitfield of directives to the decompression session and decoder.
+ The kVTDecodeFrame_EnableAsynchronousDecompression bit indicates whether the video decoder
+ may decompress the frame asynchronously.
+ The kVTDecodeFrame_EnableTemporalProcessing bit indicates whether the decoder may delay calls to the output callback
+ so as to enable processing in temporal (display) order.
+ If both flags are clear, the decompression shall complete and your output callback function will be called
+ before VTDecompressionSessionDecodeFrame returns.
+ If either flag is set, VTDecompressionSessionDecodeFrame may return before the output callback function is called.
+ @param infoFlagsOut
+ Points to a VTDecodeInfoFlags to receive information about the decode operation.
+ The kVTDecodeInfo_Asynchronous bit may be set if the decode is (or was) running
+ asynchronously.
+ The kVTDecodeInfo_FrameDropped bit may be set if the frame was dropped (synchronously).
+ Pass NULL if you do not want to receive this information.
+ @param multiImageCapableHandler
+ The block to be called when decoding the frame is completed. If the
+ VTDecompressionSessionDecodeFrameWithMultiImageCapableOutputHandler call returns an error,
+ the block will not be called.
+ */
+VT_EXPORT OSStatus
+VTDecompressionSessionDecodeFrameWithMultiImageCapableOutputHandler(
+ CM_NONNULL VTDecompressionSessionRef session,
+ CM_NONNULL CMSampleBufferRef sampleBuffer,
+ VTDecodeFrameFlags decodeFlags, // bit 0 is enableAsynchronousDecompression
+ VTDecodeInfoFlags * CM_NULLABLE infoFlagsOut,
+ CM_NONNULL VTDecompressionMultiImageCapableOutputHandler multiImageCapableOutputHandler ) API_AVAILABLE(macosx(14.0), ios(17.0)) API_UNAVAILABLE(tvos) CF_REFINED_FOR_SWIFT;
+#endif // __BLOCKS__
+
#pragma pack(pop)
#if defined(__cplusplus)
diff -ruN /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTErrors.h /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTErrors.h
--- /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTErrors.h 2023-03-07 23:46:08
+++ /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTErrors.h 2023-05-31 08:45:33
@@ -3,7 +3,7 @@
Framework: VideoToolbox
- Copyright 2006-2021 Apple Inc. All rights reserved.
+ Copyright 2006-2022 Apple Inc. All rights reserved.
*/
@@ -64,6 +64,9 @@
kVTVideoDecoderReferenceMissingErr = -17694,
kVTVideoDecoderCallbackMessagingErr = -17695,
kVTVideoDecoderUnknownErr = -17696,
+ kVTFigAudioSessionInitializationErr = -17697,
+ kVTVideoEncoderMVHEVCVideoLayerIDsMismatchErr = -17698,
+ kVTCouldNotOutputTaggedBufferGroupErr = -17699,
};
/*!
@@ -93,11 +96,28 @@
kVTDecodeFrame_EnableTemporalProcessing = 1<<3,
};
-// Informational status for decoding -- non-error flags
+/*!
+ @enum VTDecodeInfoFlags
+ @abstract Informational status for decoding -- non-error flags
+
+ @constant kVTDecodeInfo_Asynchronous
+ The kVTDecodeInfo_Asynchronous bit may be set if the decode ran asynchronously.
+ @constant kVTDecodeInfo_FrameDropped
+ The kVTDecodeInfo_FrameDropped bit may be set if the frame was dropped.
+ @constant kVTDecodeInfo_ImageBufferModifiable
+ If the kVTDecodeInfo_ImageBufferModifiable bit is set, it is safe for the client to modify the imageBuffer.
+ @constant kVTDecodeInfo_SkippedLeadingFrameDropped
+ The kVTDecodeInfo_SkippedLeadingFrameDropped may be set if a leading frame after a sync frame is dropped.
+ This can happen when a seek to a sync frame is initiated and, due to frame reordering, there are leading
+ frames following the sync frame that cannot be decoded due to missing references. Dropping these frames
+ has no impact to playback since the non-decodeable frames will not be rendered.
+ If kVTDecodeInfo_SkippedLeadingFrameDropped is set, kVTDecodeInfo_FrameDropped will also be set.
+*/
typedef CF_OPTIONS(UInt32, VTDecodeInfoFlags) {
kVTDecodeInfo_Asynchronous = 1UL << 0,
kVTDecodeInfo_FrameDropped = 1UL << 1,
kVTDecodeInfo_ImageBufferModifiable = 1UL << 2,
+ kVTDecodeInfo_SkippedLeadingFrameDropped = 1UL << 3,
};
// Informational status for encoding -- non-error flags
diff -ruN /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTFrameSilo.h /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTFrameSilo.h
--- /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTFrameSilo.h 2023-03-09 23:53:05
+++ /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTFrameSilo.h 2023-05-27 21:04:18
@@ -3,7 +3,7 @@
Framework: VideoToolbox
- Copyright © 2012-2018 Apple Inc. All rights reserved.
+ Copyright © 2012-2023 Apple Inc. All rights reserved.
A VTFrameSilo stores a large number of sample buffers, as produced by a multi-pass compression session.
*/
@@ -41,7 +41,7 @@
do not expect to get identical object pointers back.
*/
-typedef struct CM_BRIDGED_TYPE(id) OpaqueVTFrameSilo *VTFrameSiloRef; // a CF type, call CFRetain and CFRelease
+typedef struct CM_BRIDGED_TYPE(id) OpaqueVTFrameSilo *VTFrameSiloRef CM_SWIFT_NONSENDABLE; // a CF type, call CFRetain and CFRelease
VT_EXPORT CFTypeID VTFrameSiloGetTypeID(void) API_AVAILABLE(macosx(10.10), ios(8.0), tvos(10.2));
diff -ruN /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTMultiPassStorage.h /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTMultiPassStorage.h
--- /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTMultiPassStorage.h 2023-03-09 19:08:27
+++ /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTMultiPassStorage.h 2023-05-31 08:45:34
@@ -3,7 +3,7 @@
Framework: VideoToolbox
- Copyright 2012-2013 Apple Inc. All rights reserved.
+ Copyright 2012-2023 Apple Inc. All rights reserved.
Video Toolbox object for storage of multi-pass video encoding metadata.
*/
@@ -35,7 +35,7 @@
VTMultiPassStorageRef is a CF type, so call CFRelease and CFRetain to manage objects of this type.
The data stored in the VTMultiPassStorage is private to the video encoder.
*/
-typedef struct CM_BRIDGED_TYPE(id) OpaqueVTMultiPassStorage* VTMultiPassStorageRef; // a CF type, call CFRetain and CFRelease
+typedef struct CM_BRIDGED_TYPE(id) OpaqueVTMultiPassStorage* VTMultiPassStorageRef CM_SWIFT_NONSENDABLE; // a CF type, call CFRetain and CFRelease
VT_EXPORT CFTypeID VTMultiPassStorageGetTypeID(void) API_AVAILABLE(macosx(10.10), ios(8.0), tvos(10.2));
diff -ruN /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTPixelRotationSession.h /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTPixelRotationSession.h
--- /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTPixelRotationSession.h 2023-03-09 23:53:06
+++ /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTPixelRotationSession.h 2023-05-31 03:39:16
@@ -3,7 +3,7 @@
Framework: VideoToolbox
- Copyright 2021 Apple Inc. All rights reserved.
+ Copyright 2021-2023 Apple Inc. All rights reserved.
*/
@@ -36,7 +36,7 @@
and release your object reference.
*/
-typedef struct CM_BRIDGED_TYPE(id) OpaqueVTPixelRotationSession* VTPixelRotationSessionRef;
+typedef struct CM_BRIDGED_TYPE(id) OpaqueVTPixelRotationSession* VTPixelRotationSessionRef CM_SWIFT_NONSENDABLE;
/*!
@function VTPixelRotationSessionCreate
diff -ruN /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTPixelTransferSession.h /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTPixelTransferSession.h
--- /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTPixelTransferSession.h 2023-03-09 19:16:45
+++ /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/VideoToolbox.framework/Headers/VTPixelTransferSession.h 2023-05-27 21:04:18
@@ -3,7 +3,7 @@
Framework: VideoToolbox
- Copyright 2006-2013 Apple Inc. All rights reserved.
+ Copyright 2006-2023 Apple Inc. All rights reserved.
Video Toolbox client API for transferring images between CVPixelBuffers.
*/
@@ -41,7 +41,7 @@
to tear it down and CFRelease to release your object reference.
*/
-typedef struct CM_BRIDGED_TYPE(id) OpaqueVTPixelTransferSession* VTPixelTransferSessionRef;
+typedef struct CM_BRIDGED_TYPE(id) OpaqueVTPixelTransferSession* VTPixelTransferSessionRef CM_SWIFT_NONSENDABLE;
/*!
@function VTPixelTransferSessionCreate
- README
- xcode13.0 Binding Status
- xcode13.1 Binding Status
- xcode13.2 Binding Status
- xcode13.3 Binding Status
- xcode13.4 Binding Status
- xcode14.0 Binding Status
- xcode14.1 Binding Status
- xcode14.2 Binding Status
- xcode14.3 Binding Status
- xcode15.0 Binding Status
- xcode15.1 Binding Status
- xcode15.3 Binding Status
- xcode15.4 Binding Status
- xcode16.0 Binding Status
- xcode16.1 Binding Status
- xcode16.2 Binding Status