Skip to content

CoreMedia tvOS xcode15.0 b1

Alex Soto edited this page Jun 5, 2023 · 1 revision

#CoreMedia.framework

diff -ruN /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMAudioClock.h /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMAudioClock.h
--- /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMAudioClock.h	2023-03-09 19:13:33
+++ /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMAudioClock.h	2023-05-27 21:04:25
@@ -26,7 +26,7 @@
 		This clock will not drift from audio output, but may drift from CMClockGetHostTimeClock().
 		When audio output is completely stopped, the clock continues to advance, tracking CMClockGetHostTimeClock() 
 		until audio output starts up again.
-		This clock is suitable for use as AVPlayer.masterClock when synchronizing video-only playback 
+		This clock is suitable for use as AVPlayer.sourceClock when synchronizing video-only playback
 		with audio played through other APIs or objects.
 	@param	allocator
 		A CFAllocator to use to allocate the clock.  
diff -ruN /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMAudioDeviceClock.h /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMAudioDeviceClock.h
--- /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMAudioDeviceClock.h	1969-12-31 19:00:00
+++ /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMAudioDeviceClock.h	2023-05-27 21:04:26
@@ -0,0 +1,105 @@
+/*
+	File:  CMAudioDeviceClock.h
+ 
+	Framework:  CoreMedia
+ 
+	Copyright © 2006-2018 Apple Inc. All rights reserved.
+ 
+*/
+
+#ifndef __CMAUDIODEVICECLOCK__
+#define __CMAUDIODEVICECLOCK__
+
+#include <CoreMedia/CMBase.h>
+#if !TARGET_OS_IPHONE
+
+#include <CoreMedia/CMSync.h>
+
+#include <CoreAudio/CoreAudio.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+    
+#pragma pack(push, 4)
+
+/*!
+	@function	CMAudioDeviceClockCreate
+	@abstract	Creates a clock that tracks playback through a particular CoreAudio device.
+	@discussion
+		When the device is stopped, the clock continues to tick, tracking HostTime until
+		the device starts up again.
+		Pass NULL for deviceUID to create a clock that tracks the default device.
+		deviceUID must be NULL on iOS.
+*/
+CM_EXPORT OSStatus
+CMAudioDeviceClockCreate(
+		CFAllocatorRef CM_NULLABLE allocator,
+		CFStringRef	CM_NULLABLE deviceUID,
+		CM_RETURNS_RETAINED_PARAMETER CMClockRef CM_NULLABLE * CM_NONNULL clockOut)
+			API_AVAILABLE(macosx(10.8), macCatalyst(12.0)) API_UNAVAILABLE(ios, tvos, watchos);
+
+/*!
+	@function	CMAudioDeviceClockCreateFromAudioDeviceID
+	@abstract	Creates a clock that tracks playback through a particular CoreAudio device.
+*/
+CM_EXPORT OSStatus
+CMAudioDeviceClockCreateFromAudioDeviceID(
+		CFAllocatorRef CM_NULLABLE allocator,
+		AudioDeviceID deviceID,
+		CM_RETURNS_RETAINED_PARAMETER CMClockRef CM_NULLABLE * CM_NONNULL clockOut)
+			API_AVAILABLE(macosx(10.8), macCatalyst(12.0)) API_UNAVAILABLE(ios, tvos, watchos);
+
+CF_IMPLICIT_BRIDGING_ENABLED
+
+/*!
+	@function	CMAudioDeviceClockSetAudioDeviceUID
+	@abstract	Changes the CoreAudio device the clock is tracking.
+	@discussion
+		Pass NULL for deviceUID to make the clock track the default device.
+*/
+CM_EXPORT OSStatus
+CMAudioDeviceClockSetAudioDeviceUID(
+		CMClockRef CM_NONNULL clock,
+		CFStringRef CM_NULLABLE deviceUID)
+			API_AVAILABLE(macosx(10.8), macCatalyst(12.0)) API_UNAVAILABLE(ios, tvos, watchos);
+
+/*!
+	@function	CMAudioDeviceClockSetAudioDeviceUID
+	@abstract	Changes the CoreAudio device the clock is tracking.
+*/
+CM_EXPORT OSStatus
+CMAudioDeviceClockSetAudioDeviceID(
+		CMClockRef CM_NONNULL clock,
+		AudioDeviceID deviceID)
+			API_AVAILABLE(macosx(10.8), macCatalyst(12.0)) API_UNAVAILABLE(ios, tvos, watchos);
+
+/*!
+	@function	CMAudioDeviceClockGetAudioDevice
+	@abstract	Queries which CoreAudio device the clock is tracking.
+	@discussion
+		If a non-NULL deviceUID has been set, CMAudioDeviceClockGetAudioDevice returns the set UID, its associated ID,
+		and *trackingDefaultDeviceOut == false.
+		If a deviceID has been set directly, CMAudioDeviceClockGetAudioDevice returns NULL UID, the set device ID,
+		and *trackingDefaultDeviceOut == false.
+		If a NULL deviceUID has been set (which means "track the default device"), CMAudioDeviceClockGetAudioDevice
+		returns NULL UID, the ID of the current default device, and *trackingDefaultDeviceOut == true.
+*/
+CM_EXPORT OSStatus CMAudioDeviceClockGetAudioDevice(
+		CMClockRef CM_NONNULL clock,
+		CM_RETURNS_NOT_RETAINED_PARAMETER CFStringRef CM_NULLABLE * CM_NULLABLE deviceUIDOut,	// may be NULL
+		AudioDeviceID * CM_NULLABLE deviceIDOut,			// may be NULL
+		Boolean * CM_NULLABLE trackingDefaultDeviceOut)	// may be NULL
+			API_AVAILABLE(macosx(10.8), macCatalyst(12.0)) API_UNAVAILABLE(ios, tvos, watchos);
+
+CF_IMPLICIT_BRIDGING_DISABLED
+
+#pragma pack(pop)
+    
+#ifdef __cplusplus
+}
+#endif
+
+#endif // !TARGET_OS_IPHONE
+
+#endif // __CMAUDIODEVICECLOCK__
diff -ruN /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMBase.h /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMBase.h
--- /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMBase.h	2023-03-09 19:13:34
+++ /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMBase.h	2023-05-26 21:30:05
@@ -191,10 +191,12 @@
 	#define CM_EXPORT __declspec( dllimport ) extern
 	#define VT_EXPORT __declspec( dllimport ) extern
 	#define MT_EXPORT __declspec( dllimport ) extern
+	#define ME_EXPORT __declspec( dllimport ) extern
 #else
 	#define CM_EXPORT extern
 	#define VT_EXPORT extern
 	#define MT_EXPORT extern
+	#define ME_EXPORT extern
 #endif
 
 // These have 32-bit range in a 32-bit build, and 64-bit range in a 64-bit build.
@@ -225,7 +227,7 @@
 #define COREMEDIA_USE_DERIVED_ENUMS_FOR_CONSTANTS COREMEDIA_FALSE
 #endif
 
-#if (TARGET_OS_IPHONE || TARGET_OS_MAC) && defined(__has_feature)
+#if (TARGET_OS_IPHONE || TARGET_OS_MAC || TARGET_OS_LINUX) && defined(__has_feature)
 #if __has_feature(nullability)
 	#define COREMEDIA_DECLARE_NULLABILITY COREMEDIA_TRUE
 #endif
@@ -249,7 +251,7 @@
 	#define COREMEDIA_DECLARE_RELEASES_ARGUMENT COREMEDIA_TRUE
 #endif
 
-#endif // (TARGET_OS_IPHONE || TARGET_OS_MAC) && defined(__has_feature)
+#endif // (TARGET_OS_IPHONE || TARGET_OS_MAC || TARGET_OS_LINUX) && defined(__has_feature)
 
 #ifndef COREMEDIA_DECLARE_NULLABILITY
 #define COREMEDIA_DECLARE_NULLABILITY COREMEDIA_FALSE
@@ -284,8 +286,13 @@
 #endif
 
 #if COREMEDIA_DECLARE_NULLABILITY
+#if TARGET_OS_LINUX
+#define CM_NULLABLE _Nullable
+#define CM_NONNULL _Nonnull
+#else // TARGET_OS_LINUX
 #define CM_NULLABLE __nullable
 #define CM_NONNULL __nonnull
+#endif //TARGET_OS_LINUX
 #else
 #define CM_NULLABLE
 #define CM_NONNULL
@@ -360,6 +367,23 @@
 		#define CM_INLINE static    
 	#endif
 #endif
+
+// These defines are copied over from CFNSObjCRuntime.h
+#if __SWIFT_ATTR_SUPPORTS_SENDABLE_DECLS
+	// The typedef or struct should be imported as 'Sendable' in Swift
+	#define CM_SWIFT_SENDABLE __attribute__((swift_attr("@Sendable")))
+	// The struct should *not* be imported as 'Sendable' in Swift even if it normally would be
+	#define CM_SWIFT_NONSENDABLE __attribute__((swift_attr("@_nonSendable")))
+#else
+	#define CM_SWIFT_SENDABLE
+	#define CM_SWIFT_NONSENDABLE
+#endif // __SWIFT_ATTR_SUPPORTS_SENDABLE_DECLS
+
+// Swift macros not available on Windows builds
+#if TARGET_OS_WINDOWS
+#define CF_SWIFT_UNAVAILABLE(_unused)
+#define CF_REFINED_FOR_SWIFT
+#endif // TARGET_OS_WINDOWS
 
 #pragma pack(pop)
     
diff -ruN /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMBlockBuffer.h /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMBlockBuffer.h
--- /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMBlockBuffer.h	2023-03-09 23:53:20
+++ /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMBlockBuffer.h	2023-05-27 21:04:26
@@ -113,7 +113,7 @@
 	on the last reference to the CMBlockBuffer, any referenced BlockBuffers are released and eligible memory blocks are
 	deallocated. These operations are recursive, so one release could result in many follow on releses.
 */
-typedef struct CM_BRIDGED_TYPE(id) OpaqueCMBlockBuffer *CMBlockBufferRef API_AVAILABLE(macos(10.7), ios(4.0), tvos(9.0), watchos(6.0));
+typedef struct CM_BRIDGED_TYPE(id) OpaqueCMBlockBuffer *CMBlockBufferRef API_AVAILABLE(macos(10.7), ios(4.0), tvos(9.0), watchos(6.0)) CM_SWIFT_NONSENDABLE;
 
 /*!
 	@typedef CMBlockBufferCustomBlockSource
diff -ruN /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMBufferQueue.h /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMBufferQueue.h
--- /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMBufferQueue.h	2023-03-09 19:21:34
+++ /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMBufferQueue.h	2023-05-26 21:25:52
@@ -131,7 +131,7 @@
 	@abstract	A reference to a CMBufferQueue, a CF object that implements a queue of timed buffers.
 		
 */
-typedef struct CM_BRIDGED_TYPE(id) opaqueCMBufferQueue *CMBufferQueueRef API_AVAILABLE(macos(10.7), ios(4.0), tvos(9.0), watchos(6.0));
+typedef struct CM_BRIDGED_TYPE(id) opaqueCMBufferQueue *CMBufferQueueRef API_AVAILABLE(macos(10.7), ios(4.0), tvos(9.0), watchos(6.0)) CM_SWIFT_NONSENDABLE;
 
 /*!
 	@typedef	CMBufferRef
@@ -139,7 +139,7 @@
 	@discussion	A CMBuffer can be any CFTypeRef, as long as a getDuration callback can be provided.  Commonly used
 				types are CMSampleBufferRef and CVPixelBufferRef.
 */
-typedef CM_BRIDGED_TYPE(id) CFTypeRef CMBufferRef API_AVAILABLE(macos(10.7), ios(4.0), tvos(9.0), watchos(6.0));
+typedef CM_BRIDGED_TYPE(id) CFTypeRef CMBufferRef API_AVAILABLE(macos(10.7), ios(4.0), tvos(9.0), watchos(6.0)) CM_SWIFT_NONSENDABLE;
 
 /*!
 	@typedef	CMBufferGetTimeCallback
@@ -265,7 +265,7 @@
 																	Can be NULL (then the queue won't listen for it). */
 	CMBufferGetSizeCallback CM_NULLABLE getSize;				/*!< This callback is called (once) during enqueue and dequeue operation to
 																	update the total size of the queue. Can be NULL.  Ignored if version < 1. */
-} CMBufferCallbacks API_AVAILABLE(macos(10.7), ios(4.0), tvos(9.0), watchos(6.0));
+} CMBufferCallbacks API_AVAILABLE(macos(10.7), ios(4.0), tvos(9.0), watchos(6.0)) CM_SWIFT_NONSENDABLE;
 
 #if __BLOCKS__
 #pragma pack(push)
@@ -417,12 +417,28 @@
     @discussion This follows CF "Get" semantics -- it does not retain the returned buffer.
     			Note that with non-FIFO queues it's not guaranteed that the next dequeue will return
     			this particular buffer (if an intervening Enqueue adds a buffer that will dequeue next).
+    			This function is deprecated in favor of CMBufferQueueCopyHead() which returns a
+    			retained buffer. When adopting CMBufferQueueCopyHead(), existing CFRetain() call
+    			on the buffer returned from this function must be removed.
 	@result		The buffer.  Will be NULL if the queue is empty.
 */
 CM_EXPORT CMBufferRef CM_NULLABLE CMBufferQueueGetHead(
 	CMBufferQueueRef CM_NONNULL queue)		/*! @param queue
 												The CMBufferQueue from which to retrieve a buffer. */
-							API_AVAILABLE(macos(10.7), ios(4.0), tvos(9.0), watchos(6.0));
+							API_DEPRECATED_WITH_REPLACEMENT("CMBufferQueueCopyHead", macos(10.7, API_TO_BE_DEPRECATED), ios(4.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(6.0, API_TO_BE_DEPRECATED));
+
+/*!
+	@function   CMBufferQueueCopyHead
+	@abstract   Retrieves & retains the next-to-dequeue buffer from a CMBufferQueue but leaves it in the queue.
+	@discussion This follows CF "Copy" semantics -- it retains the returned buffer.
+				Note that with non-FIFO queues it's not guaranteed that the next dequeue will return
+				this particular buffer (if an intervening Enqueue adds a buffer that will dequeue next).
+	@result		The retained buffer.  Will be NULL if the queue is empty.
+*/
+CM_EXPORT CM_RETURNS_RETAINED CMBufferRef CM_NULLABLE CMBufferQueueCopyHead(
+	CMBufferQueueRef CM_NONNULL queue)		/*! @param queue
+												The CMBufferQueue from which to retrieve a buffer. */
+							API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
 
 /*!
 	@function	CMBufferQueueIsEmpty
diff -ruN /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMFormatDescription.h /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMFormatDescription.h
--- /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMFormatDescription.h	2023-03-09 19:21:34
+++ /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMFormatDescription.h	2023-05-27 21:04:25
@@ -3,7 +3,7 @@
 
 	Framework:  CoreMedia
  
-	Copyright © 2005-2021 Apple Inc. All rights reserved.
+	Copyright © 2005-2023 Apple Inc. All rights reserved.
 
 */
 
@@ -58,7 +58,7 @@
 	@typedef	CMFormatDescriptionRef
 	@abstract	A reference to a CMFormatDescription, a CF object describing media of a particular type (audio, video, muxed, etc).
 */
-typedef const struct CM_BRIDGED_TYPE(id) opaqueCMFormatDescription *CMFormatDescriptionRef API_AVAILABLE(macos(10.7), ios(4.0), tvos(9.0), watchos(6.0));
+typedef const struct CM_BRIDGED_TYPE(id) opaqueCMFormatDescription *CMFormatDescriptionRef API_AVAILABLE(macos(10.7), ios(4.0), tvos(9.0), watchos(6.0)) CM_SWIFT_SENDABLE;
 
 /*!
 	@enum CMMediaType
@@ -71,6 +71,7 @@
 	@constant kCMMediaType_Subtitle Subtitle media
 	@constant kCMMediaType_TimeCode TimeCode media
 	@constant kCMMediaType_Metadata Metadata media
+	@constant kCMMediaType_TaggedBufferGroup media
 */
 typedef FourCharCode CMMediaType API_AVAILABLE(macos(10.7), ios(4.0), tvos(9.0), watchos(6.0));
 #if COREMEDIA_USE_DERIVED_ENUMS_FOR_CONSTANTS
@@ -87,6 +88,7 @@
 	kCMMediaType_Subtitle			= 'sbtl',
 	kCMMediaType_TimeCode			= 'tmcd',
 	kCMMediaType_Metadata			= 'meta',
+	kCMMediaType_TaggedBufferGroup	= 'tbgr',
 } API_AVAILABLE(macos(10.7), ios(4.0), tvos(9.0), watchos(6.0));
 
 /*! 
@@ -309,7 +311,7 @@
 	@typedef CMAudioFormatDescriptionRef
 	SYnonym type used for manipulating audio CMFormatDescriptions
 */
-typedef CMFormatDescriptionRef CMAudioFormatDescriptionRef API_AVAILABLE(macos(10.7), ios(4.0), tvos(9.0), watchos(6.0));
+typedef CMFormatDescriptionRef CMAudioFormatDescriptionRef API_AVAILABLE(macos(10.7), ios(4.0), tvos(9.0), watchos(6.0)) CM_SWIFT_SENDABLE;
 
 CF_IMPLICIT_BRIDGING_DISABLED
 
@@ -515,7 +517,7 @@
 	@typedef CMVideoFormatDescriptionRef
 	Synonym type used for manipulating video CMFormatDescriptions
 */
-typedef CMFormatDescriptionRef CMVideoFormatDescriptionRef API_AVAILABLE(macos(10.7), ios(4.0), tvos(9.0), watchos(6.0));
+typedef CMFormatDescriptionRef CMVideoFormatDescriptionRef API_AVAILABLE(macos(10.7), ios(4.0), tvos(9.0), watchos(6.0)) CM_SWIFT_SENDABLE;
 
 /*!
 	@enum CMPixelFormatType
@@ -873,6 +875,8 @@
 							API_AVAILABLE(macos(10.13), ios(11.0), tvos(11.0), watchos(6.0));
 CM_EXPORT const CFStringRef kCMFormatDescriptionExtension_ContentLightLevelInfo			// CFData(4 bytes); big-endian structure; same as kCVImageBufferContentLightLevelInfoKey
 							API_AVAILABLE(macos(10.13), ios(11.0), tvos(11.0), watchos(6.0));
+CM_EXPORT const CFStringRef kCMFormatDescriptionExtension_ContentColorVolume			// CFData; big-endian structure; same as kCVImageBufferContentColorVolumeKey (to be added); matches payload of ITU-T-H.265:11/2019, D.2.40 Content Colour Volume SEI message
+							API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
 CM_EXPORT const CFStringRef kCMFormatDescriptionExtension_AlternativeTransferCharacteristics	// CFString (usually kCMFormatDescriptionTransferFunction_ITU_R_2100_HLG when used); corresponds to D.2.38 Alternative Transfer Characteristics SEI message
 							API_AVAILABLE(macos(10.14), ios(12.0), tvos(12.0), watchos(6.0));
 
@@ -895,6 +899,42 @@
 CM_EXPORT const CFStringRef kCMFormatDescriptionExtension_HorizontalFieldOfView	// CFNumber; horizontal field of view in thousandths of a degree (i.e., 123456 is 123.456 degrees).
 							API_AVAILABLE(macos(12.0), ios(15.0), tvos(15.0), watchos(8.0));
 
+/*!
+	@constant    kCMFormatDescriptionExtension_HeroEye
+	@abstract 
+        Indicates which of the two eyes should be used as the primary when rendering in 2D. It is usually perpendicular to the target image surface.
+	@constant    kCMFormatDescriptionHeroEye_Left
+		Indicates the left eye is the hero eye.
+	@constant    kCMFormatDescriptionHeroEye_Right
+		Indicates the right eye is the hero eye.
+	@discussion
+	The value is a CFString holding one of the kCMFormatDescriptionHeroEye_* constants.
+*/
+CM_EXPORT const CFStringRef kCMFormatDescriptionExtension_HeroEye API_AVAILABLE(macos(14.0), ios(17.0)) API_UNAVAILABLE(tvos, watchos);       // CFString, one of
+CM_EXPORT const CFStringRef kCMFormatDescriptionHeroEye_Left API_AVAILABLE(macos(14.0), ios(17.0)) API_UNAVAILABLE(tvos, watchos);
+CM_EXPORT const CFStringRef kCMFormatDescriptionHeroEye_Right API_AVAILABLE(macos(14.0), ios(17.0)) API_UNAVAILABLE(tvos, watchos);
+
+/*!
+    @constant    kCMFormatDescriptionExtension_StereoCameraBaseline
+    @abstract
+        Indicates the distance between centers of the lenses of the camera system.
+    @discussion
+    The value is a CFNumber holding an unsigned 32-bit integer that is interpreted in micrometers or thousandths of a millimeter (e.g., 63123 is 63.123 millimeters).
+    This property is optional and should only be specified if the distance is known.
+ */
+CM_EXPORT const CFStringRef kCMFormatDescriptionExtension_StereoCameraBaseline API_AVAILABLE(macos(14.0), ios(17.0)) API_UNAVAILABLE(tvos, watchos);     // CFNumber(uint32) as micrometers
+
+/*!
+    @constant    kCMFormatDescriptionExtension_HorizontalDisparityAdjustment
+    @abstract
+        Indicates a relative shift of the left and right images, which changes the zero parallax plane.
+    @discussion
+    The value encoded in normalized image space is a CFNumber holding a signed 32-bit integer measured over the range of -10000 to 10000 mapping to the uniform range [-1.0...1.0]. The interval of 0.0 to 1.0 or 0 to 10000 maps onto the stereo eye view image width. The negative interval 0.0 to -1.0 or 0 to -10000 similarly map onto the stereo eye view image width.
+    The default value of 0 is interpreted if this property is not set. If the property is not set, NULL may be set and retrieved. The NULL value should be interpreted as meaning 0.
+    This property is optional and should only be specified if a disparity adjustment including 0 is known.
+ */
+CM_EXPORT const CFStringRef kCMFormatDescriptionExtension_HorizontalDisparityAdjustment API_AVAILABLE(macos(14.0), ios(17.0)) API_UNAVAILABLE(tvos, watchos);     // CFNumber(int32) from -10000 to 10000 for the uniform range [-1.0...1.0]
+
 CM_ASSUME_NONNULL_END
 
 CF_IMPLICIT_BRIDGING_DISABLED
@@ -1135,6 +1175,46 @@
 	CVImageBufferRef CM_NONNULL imageBuffer)		/*! @param imageBuffer	image buffer validate against. */
 							API_AVAILABLE(macos(10.7), ios(4.0), tvos(9.0), watchos(6.0));
 
+/*!
+	@function    CMVideoFormatDescriptionCopyTagCollectionArray
+	@abstract    Copies the multi-image encoding properties as an array of CMTagCollections.
+	@param formatDescription    CMVideoFormatDescription being interrogated.
+	@param tagCollectionsOut    Returned TagCollections with CMTags such as kCMTagCategory_VideoLayerID and kCMTagCategory_StereoViewType.
+	@discussion	On return, the caller owns the returned CFArrayRef and must release it when done with it.
+				This function copies the VideoLayerIDs and LeftAndRightViewIDs from hvcC and 3D Reference Displays Info SEI in the formatDescription.
+				The returned values can be used to enable the multi-image decoding with kVTDecompressionPropertyKey_RequestedMVHEVCVideoLayerIDs.
+				It also gives the eye mapping information for the pixel buffers of the decoded CMTaggedBufferGroups.
+	@result      Array of CMTagCollections. The result will be NULL if the CMVideoFormatDescription does not contain multi-image encoding parameters, or if there is some other error.
+*/
+CM_EXPORT OSStatus CMVideoFormatDescriptionCopyTagCollectionArray(
+	CMVideoFormatDescriptionRef CM_NONNULL formatDescription,
+	CM_RETURNS_RETAINED_PARAMETER CFArrayRef CM_NULLABLE *tagCollectionsOut) CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+#pragma mark CMTaggedBufferGroupFormatDescription
+
+/*!
+	@typedef CMTaggedBufferGroupFormatDescriptionRef
+		Synonym type used for manipulating CMTaggedBufferGroup media CMFormatDescriptions
+*/
+typedef CMFormatDescriptionRef CMTaggedBufferGroupFormatDescriptionRef CM_SWIFT_SENDABLE;
+
+/*!
+	@enum CMTaggedBufferGroupFormatType
+	@discussion The subtypes of CMTaggedBufferGroup media type.
+	@constant kCMTaggedBufferGroupFormatType_TaggedBuffer    For sample buffers carrying CMTaggedBufferGroup objects.
+*/
+typedef FourCharCode CMTaggedBufferGroupFormatType;
+#if COREMEDIA_USE_DERIVED_ENUMS_FOR_CONSTANTS
+enum : CMTaggedBufferGroupFormatType
+#else
+enum
+#endif
+{
+	kCMTaggedBufferGroupFormatType_TaggedBufferGroup        = 'tbgr',
+} CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+// See CMTaggedBufferGroup.h for CMTaggedBufferGroupFormatDescriptionCreateForTaggedBufferGroup and CMTaggedBufferGroupFormatDescriptionMatchesTaggedBufferGroup
+
 #pragma mark CMMuxedFormatDescription
 
 /*! 
@@ -1145,7 +1225,7 @@
 	@typedef CMMuxedFormatDescriptionRef
 	Synonym type used for manipulating muxed media CMFormatDescriptions
 */
-typedef CMFormatDescriptionRef CMMuxedFormatDescriptionRef API_AVAILABLE(macos(10.7), ios(4.0), tvos(9.0), watchos(6.0));
+typedef CMFormatDescriptionRef CMMuxedFormatDescriptionRef API_AVAILABLE(macos(10.7), ios(4.0), tvos(9.0), watchos(6.0)) CM_SWIFT_SENDABLE;
 
 /*!
 	@enum CMMuxedStreamType
@@ -1154,6 +1234,8 @@
 	@constant	kCMMuxedStreamType_MPEG2Transport	MPEG-2 Transport stream
 	@constant	kCMMuxedStreamType_MPEG2Program	MPEG-2 Program stream
 	@constant	kCMMuxedStreamType_DV	DV stream
+	@constant	kCMMuxedStreamType_EmbeddedDeviceScreenRecording	Screen capture on an embedded device
+	@abstract	Contains interleaved sample buffers from multiple media types. The receiver should query the media type of each CMSampleBuffer’s format description to discover if it’s video or audio, and process it accordingly.
 */
 typedef FourCharCode CMMuxedStreamType API_AVAILABLE(macos(10.7), ios(4.0), tvos(9.0), watchos(6.0));
 #if COREMEDIA_USE_DERIVED_ENUMS_FOR_CONSTANTS
@@ -1165,7 +1247,8 @@
 	kCMMuxedStreamType_MPEG1System		= 'mp1s',
 	kCMMuxedStreamType_MPEG2Transport	= 'mp2t',
 	kCMMuxedStreamType_MPEG2Program		= 'mp2p',
-	kCMMuxedStreamType_DV				= 'dv  '
+	kCMMuxedStreamType_DV				= 'dv  ',
+	kCMMuxedStreamType_EmbeddedDeviceScreenRecording API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0)) = 'isr '
 } API_AVAILABLE(macos(10.7), ios(4.0), tvos(9.0), watchos(6.0));
 
 #define CMMuxedFormatDescriptionGetStreamType(desc)  CMFormatDescriptionGetMediaSubType(desc)
@@ -1207,7 +1290,7 @@
 	@typedef CMClosedCaptionFormatDescriptionRef
 	Synonym type used for manipulating closed-caption media CMFormatDescriptions
 */
-typedef CMFormatDescriptionRef CMClosedCaptionFormatDescriptionRef API_AVAILABLE(macos(10.7), ios(4.0), tvos(9.0), watchos(6.0));
+typedef CMFormatDescriptionRef CMClosedCaptionFormatDescriptionRef API_AVAILABLE(macos(10.7), ios(4.0), tvos(9.0), watchos(6.0)) CM_SWIFT_SENDABLE;
 
 /*!
 	@enum CMClosedCaptionFormatType
@@ -1242,7 +1325,7 @@
 	@typedef CMTextFormatDescriptionRef
 	Synonym type used for manipulating Text media CMFormatDescriptions
 */
-typedef CMFormatDescriptionRef CMTextFormatDescriptionRef API_AVAILABLE(macos(10.7), ios(4.0), tvos(9.0), watchos(6.0));
+typedef CMFormatDescriptionRef CMTextFormatDescriptionRef API_AVAILABLE(macos(10.7), ios(4.0), tvos(9.0), watchos(6.0)) CM_SWIFT_SENDABLE;
 
 /*!
 	@enum CMTextFormatType
@@ -1509,7 +1592,7 @@
 	@typedef CMTimeCodeFormatDescriptionRef
 	SYnonym type used for manipulating TimeCode media CMFormatDescriptions
 */
-typedef CMFormatDescriptionRef CMTimeCodeFormatDescriptionRef API_AVAILABLE(macos(10.7), ios(4.0), tvos(9.0), watchos(6.0));
+typedef CMFormatDescriptionRef CMTimeCodeFormatDescriptionRef API_AVAILABLE(macos(10.7), ios(4.0), tvos(9.0), watchos(6.0)) CM_SWIFT_SENDABLE;
 
 /*!
 	@enum CMTimeCodeFormatType
@@ -1632,7 +1715,7 @@
 	@typedef CMMetadataFormatDescriptionRef
 	SYnonym type used for manipulating Metadata media CMFormatDescriptions
 */
-typedef CMFormatDescriptionRef CMMetadataFormatDescriptionRef API_AVAILABLE(macos(10.7), ios(4.0), tvos(9.0), watchos(6.0));
+typedef CMFormatDescriptionRef CMMetadataFormatDescriptionRef API_AVAILABLE(macos(10.7), ios(4.0), tvos(9.0), watchos(6.0)) CM_SWIFT_SENDABLE;
 
 /*!
 	@enum CMMetadataFormatType
diff -ruN /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMMemoryPool.h /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMMemoryPool.h
--- /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMMemoryPool.h	2023-03-09 19:21:34
+++ /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMMemoryPool.h	2023-05-26 21:25:52
@@ -49,7 +49,7 @@
 		CFAllocatorDeallocate methods.
 */
 
-typedef struct CM_BRIDGED_TYPE(id) OpaqueCMMemoryPool *CMMemoryPoolRef API_AVAILABLE(macos(10.8), ios(6.0), tvos(9.0), watchos(6.0)); // a CF type; use CFRetain and CFRelease.
+typedef struct CM_BRIDGED_TYPE(id) OpaqueCMMemoryPool *CMMemoryPoolRef API_AVAILABLE(macos(10.8), ios(6.0), tvos(9.0), watchos(6.0)) CM_SWIFT_SENDABLE; // a CF type; use CFRetain and CFRelease.
 
 /*!
 	@enum CMMemoryPool Errors
diff -ruN /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMSampleBuffer.h /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMSampleBuffer.h
--- /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMSampleBuffer.h	2023-03-09 19:24:08
+++ /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMSampleBuffer.h	2023-05-23 23:50:12
@@ -3,7 +3,7 @@
 	
 	Framework:  CoreMedia
  
-	Copyright © 2005-2022 Apple Inc. All rights reserved.
+	Copyright © 2005-2023 Apple Inc. All rights reserved.
  
 */
 
@@ -129,7 +129,7 @@
 				samples of a particular media type (audio, video, muxed, etc).
 		
 */
-typedef struct CM_BRIDGED_TYPE(id) opaqueCMSampleBuffer *CMSampleBufferRef API_AVAILABLE(macos(10.7), ios(4.0), tvos(9.0), watchos(6.0));
+typedef struct CM_BRIDGED_TYPE(id) opaqueCMSampleBuffer *CMSampleBufferRef API_AVAILABLE(macos(10.7), ios(4.0), tvos(9.0), watchos(6.0)) CM_SWIFT_NONSENDABLE;
 
 /*!
 	@typedef	CMSampleTimingInfo
diff -ruN /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMSimpleQueue.h /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMSimpleQueue.h
--- /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMSimpleQueue.h	2023-03-09 23:50:13
+++ /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMSimpleQueue.h	2023-05-23 23:50:12
@@ -75,7 +75,7 @@
 	@abstract	A reference to a CMSimpleQueue, a CF object that implements a simple lockless queue of (void *) elements.
 		
 */
-typedef struct CM_BRIDGED_TYPE(id) opaqueCMSimpleQueue *CMSimpleQueueRef API_AVAILABLE(macos(10.7), ios(5.0), tvos(9.0), watchos(6.0));
+typedef struct CM_BRIDGED_TYPE(id) opaqueCMSimpleQueue *CMSimpleQueueRef API_AVAILABLE(macos(10.7), ios(5.0), tvos(9.0), watchos(6.0)) CM_SWIFT_NONSENDABLE;
 
 //=============================================================================
 
diff -ruN /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMSync.h /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMSync.h
--- /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMSync.h	2023-03-09 19:21:33
+++ /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMSync.h	2023-05-26 21:30:04
@@ -37,7 +37,7 @@
 		Additionally, the CMSync infrastructure monitors relative drift between CMClocks.
 */
 
-typedef struct CM_BRIDGED_TYPE(id) OpaqueCMClock* CMClockRef API_AVAILABLE(macos(10.8), ios(6.0), tvos(9.0), watchos(6.0)); // a CF type; use CFRetain and CFRelease
+typedef struct CM_BRIDGED_TYPE(id) OpaqueCMClock* CMClockRef API_AVAILABLE(macos(10.8), ios(6.0), tvos(9.0), watchos(6.0)) CM_SWIFT_SENDABLE; // a CF type; use CFRetain and CFRelease
 
 /*!
 	@typedef	CMTimebase
@@ -57,9 +57,9 @@
 		the timebase's time changes relative to the ultimate source clock.
 */
 
-typedef struct CM_BRIDGED_TYPE(id) OpaqueCMTimebase* CMTimebaseRef API_AVAILABLE(macos(10.8), ios(6.0), tvos(9.0), watchos(6.0)); // a CF type; use CFRetain and CFRelease
+typedef struct CM_BRIDGED_TYPE(id) OpaqueCMTimebase* CMTimebaseRef API_AVAILABLE(macos(10.8), ios(6.0), tvos(9.0), watchos(6.0)) CM_SWIFT_SENDABLE; // a CF type; use CFRetain and CFRelease
 
-typedef CM_BRIDGED_TYPE(id) CFTypeRef CMClockOrTimebaseRef API_AVAILABLE(macos(10.8), ios(6.0), tvos(9.0), watchos(6.0)); // used in argument lists and function results to indicate that either may be passed
+typedef CM_BRIDGED_TYPE(id) CFTypeRef CMClockOrTimebaseRef API_AVAILABLE(macos(10.8), ios(6.0), tvos(9.0), watchos(6.0)) CM_SWIFT_SENDABLE; // used in argument lists and function results to indicate that either may be passed
 
 #ifndef CMTIMEBASE_USE_SOURCE_TERMINOLOGY
 #if (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= __MAC_12_0) || (__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ >= __IPHONE_15_0) || (__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ >= __TVOS_15_0) || (__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ >= __WATCHOS_8_0) || 0
diff -ruN /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMTag.h /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMTag.h
--- /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMTag.h	1969-12-31 19:00:00
+++ /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMTag.h	2023-05-19 20:58:41
@@ -0,0 +1,615 @@
+/*
+    File:  CMTag.h
+	
+	Framework:  CoreMedia
+ 
+	Copyright © 2023 Apple Inc. All rights reserved.
+ 
+*/
+
+#ifndef CMTAG_H
+#define CMTAG_H
+
+#include <CoreMedia/CMBase.h>
+#include <CoreFoundation/CoreFoundation.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+    
+CF_IMPLICIT_BRIDGING_ENABLED
+
+CM_ASSUME_NONNULL_BEGIN
+
+#pragma pack(push)
+#pragma pack()
+
+#pragma mark - Errors
+
+/*!
+	@enum		CMTag Errors
+	@discussion The OSStatus errors returned from the CMTag routines.
+	@constant	kCMTagError_ParamErr Returned when caller passes incorrect input or output parameters.
+	@constant		kCMTagError_AllocationFailed Returned if a necessary allocation failed.
+*/
+typedef CF_ENUM(OSStatus, CMTagError)
+{
+	kCMTagError_ParamErr = -15730,
+	kCMTagError_AllocationFailed = -15731,
+} CF_SWIFT_UNAVAILABLE("Unavailable in Swift") API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+#pragma mark - CMTagCategory enums
+
+/*!
+	@enum CMTagCategory
+	@abstract An enum indicating the available CMTagCategory identifiers that can be used to distinguish the tag from other kinds.
+	@discussion Different kinds of CMTags may be defined or registered. Each will be associated with a category. CMTags with the same CMTagCategory will have the same kinds of values. The category serves as a namespace.
+	@constant kCMTagCategory_Undefined Indicates there is no category specified for this value or it could not be determined. CMTags should typically not have this category except as sentinel values.
+	@constant kCMTagCategory_MediaType Value is an OSType holding a CMMediaType.
+	@constant kCMTagCategory_MediaSubType Value is an OSType holding a media subtype such as a video codec type.
+	@constant kCMTagCategory_TrackID Value is a CMPersistentTrackID for a corresponding asset.
+	@constant kCMTagCategory_ChannelID Value is the CMVideoTarget/CMVideoReceiver channel identifier.
+	@constant kCMTagCategory_VideoLayerID Value is a signed 64-bit integer specifying the video layer identifier.
+	@constant kCMTagCategory_PixelFormat Indicates the pixel format of the buffer or channel, if pixel-based. The type is an OSType corresponding to a pixel format (i.e., a kCVPixelFormatType_* type).
+	@constant kCMTagCategory_PackingType Indicates this channel is packed in some way (e.g., frame packed, texture atlas). The value is an OSType carrying kCMPackingType_* constants.
+	@constant kCMTagCategory_ProjectionType Indicates textures are related to a kind of texture projection (e.g., equirectangular). The value is an OSType carrying one of the kCMProjectionType_* constants.
+	@constant kCMTagCategory_StereoView Indicates this channel is related to carrying stereographic views. The value is a Flags value carrying one of the kCMTagStereoViewComponent_* constants.
+	@constant kCMTagCategory_StereoViewInterpretation Indicates this channel has non default stereo view interpretation (e.g., stereo eye view order is reversed.) Tags with this category will typically be associated with tags of category kCMTagCategory_StereoView. This tag alone however does not indicate which stereo eyes are present. The value is a Flags value carrying one of the kCMTagStereoInterpretationOption_* constants.
+*/
+typedef CF_ENUM(FourCharCode, CMTagCategory)
+{
+	kCMTagCategory_Undefined CF_REFINED_FOR_SWIFT	= 0,
+	kCMTagCategory_MediaType 						= 'mdia',
+	kCMTagCategory_MediaSubType 					= 'msub',
+	kCMTagCategory_TrackID 							= 'trak',
+	kCMTagCategory_ChannelID 						= 'vchn',
+	kCMTagCategory_VideoLayerID						= 'vlay',
+	kCMTagCategory_PixelFormat 						= 'pixf',
+	kCMTagCategory_PackingType						= 'pack',
+	kCMTagCategory_ProjectionType 					= 'proj',
+	kCMTagCategory_StereoView 					= 'eyes',
+	kCMTagCategory_StereoViewInterpretation 	= 'eyip',
+} CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+#pragma mark - CMTagDataType enums
+
+/*!
+	@enum CMTagDataType
+	@discussion The data type for the value of the CMTag.
+	@constant kCMTagDataType_Invalid Value is a sentinel data type indicating it is not valid. The value should not be treated as a value.
+	@constant kCMTagDataType_SInt64 Value is a signed 64-bit integer (e,g, int64_t).
+	@constant kCMTagDataType_Float64 Value is a 64-bit floating point value (e.g., Float64).
+	@constant kCMTagDataType_OSType Value is an OSType in the lower 32 bits of a 64-bit integer (e.g., OSType).
+	@constant kCMTagDataType_Flags Value is a 64-bit integer holding option bits or flags.
+*/
+typedef CF_ENUM( uint32_t, CMTagDataType ) {
+	kCMTagDataType_Invalid CF_REFINED_FOR_SWIFT	= 0,
+	kCMTagDataType_SInt64						= 2,
+	kCMTagDataType_Float64 						= 3,
+	kCMTagDataType_OSType 						= 5,
+	kCMTagDataType_Flags 						= 7,
+} CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+#pragma mark - CMTagValue
+
+/*!
+	@typedef	CMTagValue
+	@abstract	64-bit value interpreted within the context of the CMTagCategory.
+	@discussion	The 64-bit value can be one of several data types fitting within that range and holding a category-specific value. Data types include numeric and non-numeric types. Examples of numeric include a signed 64-bit integer and a 64-bit floating point value. Non-numeric types include a single OSType and an OSType pair. The value may hold values including discrete values, bit flags, enums representable as a signed 64-bit integer or float and values encoding any of these.
+*/
+typedef uint64_t CMTagValue CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+#pragma mark - CMTag
+
+/*!
+	@typedef CMTag
+	@abstract An efficient structure used to label something about a resource or other media construct.
+	@discussion A structure holding a CMTagCategory, CMTagDataType, and a CMTagValue serving to represent a particular tag that might be assigned to or associated with another resource. There is only one of each of the category, the dataType and the value so any notion of "has" is about the respective singular element.  CMTags are a value type. No lifetime management such as allocation or retain and release semantics are needed. CMTags can be passed by value, returned by value and stored in other structures or arrays or on the stack.  CMTags carry a single value that can be carried in 64 bits. This can include data types such as signed 64-bit integers, floating point values fitting in 64 bits, up to 64 bit of flags, and other data types fitting within 64 bits. Signaling of the data type is carried in the CMTagDataType. The data types can be extended through registration with the CoreMedia team.  A CMTag value should not be used to carry pointers. If such a reference is needed, it is okay to carry an index into an out-of-band data structure that itself has a memory reference or an object reference.
+	@field category CMTagCategory for the tag.
+	@field dataType CMTagDataType for the tag indicating the data type of the value.
+	@field value CMTagValue for the value of the CMTag (e.g., a signed 64-bit integer.)
+ */
+struct CMTag {
+	CMTagCategory category;
+	CMTagDataType dataType;
+	CMTagValue value;
+} CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+typedef struct CMTag CMTag CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+#pragma mark - CMTag data type and value accessors
+
+/*!
+	@function	CMTagIsValid
+	@abstract   Tests if a CMTag is valid.
+	@param tag The CMTag to evaluate.
+	@result		Returns false if the tag's dataType is kCMTagDataType_Invalid, true otherwise.
+*/
+CM_INLINE Boolean CMTagIsValid( CMTag tag ) CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function	CMTagGetValueDataType
+	@abstract   Returns the dataType field of the CMTag.
+	@param tag CMTag from which to extract the data type.
+	@result		kCMTagDataType_* value.
+*/
+CM_EXPORT CMTagDataType CMTagGetValueDataType( CMTag tag ) CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+#pragma mark - CMTag constants
+
+/*!
+	@constant   kCMTagInvalid
+	@abstract	CMTag with an unspecified or "null" value.
+ */
+CM_EXPORT const CMTag kCMTagInvalid CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+#pragma mark - MediaType convenience tags
+
+/*!
+	@constant kCMTagMediaTypeVideo
+	@abstract A CMTag of category kCMTagCategory_MediaType and the value kCMMediaType_Video (OSType).
+ */
+CM_EXPORT const CMTag kCMTagMediaTypeVideo CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@constant kCMTagMediaSubTypeMebx
+	@abstract A CMTag of category kCMTagCategory_MediaType and the value kCMMetadataFormatType_Boxed (OSType).
+ */
+CM_EXPORT const CMTag kCMTagMediaSubTypeMebx CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@constant kCMTagMediaTypeAudio
+	@abstract A CMTag of category kCMTagCategory_MediaType and the value kCMMediaType_Audio (OSType).
+ */
+CM_EXPORT const CMTag kCMTagMediaTypeAudio CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@constant kCMTagMediaTypeMetadata
+	@abstract A CMTag of category kCMTagCategory_MediaType and the value kCMMediaType_Metadata (OSType).
+ */
+CM_EXPORT const CMTag kCMTagMediaTypeMetadata CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+#pragma mark - StereoView data types and convenience tags
+
+/*!
+	@abstract Flags used with kCMTagCategory_StereoView tags to signal the nature of the stereo views carried in a buffer or channel.
+	@discussion A "stereo eye" is either for the left eye or for the right eye. A CMTag signaling of stereo views can indicate the presence of one "stereo eye", both stereo eyes or no stereo eyes. A CMTag having a CMTagCategory of kCMTagCategory_StereoView has a value that is a set of kCMTagStereoViewComponent_* flags (see CMTagMakeWithFlagsValue()) that can be set to indicate the stereo eyes carried.  If neither the left nor the right stereo eye is signaled, this can be interpreted to mean that this is not stereo view related and is instead monoscopic video. If it is not stereo related, a kCMTagCategory_StereoView CMTag need not be associated with the buffer or channel.  kCMTagCategory_StereoView does not prescribe how the stereo views are carried. It might be contained in some kind of multiview carriage or might be frame packed in some way. The kCMTagCategory_PackingType will typically be available if frame packing of stereo views is used. The presence of a CMTag with kCMTagCategory_StereoView alone is insufficient to imply if there is some kind of packing or other mechanism required. Additional CMTags with other CMTagCategories may be necessary.  One or more kCMTagCategory_StereoView tags may be present in a collection. When considering which stereo eyes are represented by the collection, the same semantic can be expressed in more than one way in the collection. Specifying the same CMTag more than once has no meaning as the first occurrence indicates the stereo eye or stereo eyes are present.
+	Here are compatible semantics expressed by one or more CMTags:
+	- a single CMTag with kCMTagStereoViewsOption_LeftEye bitwise ORed with kCMTagStereoViewsOption_RightEye.
+	- two kCMTagCategory_StereoView CMTags with one CMTag having the value kCMTagStereoViewsOption_LeftEye and the other CMTag having the value kCMTagStereoViewsOption_RightEye.
+	- three or more CMTags made up of a CMTag with kCMTagStereoViewsOption_LeftEye bitwise ORed with kCMTagStereoViewsOption_RightEye and both a CMTag with only kCMTagStereoViewsOption_LeftEye and a CMTag with kCMTagStereoViewsOption_RightEye.
+	Likewise, if a collection contains only one or more CMTags with one stereo eye (e.g., kCMTagStereoViewsOption_LeftEye), only that stereo eye should be considered present.  The absence of a kCMTagCategory_StereoView CMTag is meant to indicate there is no stereo view present. If this signaling of no stereo eyes is associated with a buffer or channel that carries stereo eye views, the buffer or channel should be configured to present only a monoscopic view. This might be in the form of some fallback to a default view corresponding to a stereo eye or even to some other view it includes or can synthesize.
+	@constant kCMTagStereoViewsOption_LeftEye the left stereo eye is present in encoded or decoded video buffers.
+	@constant kCMTagStereoViewsOption_RightEye the right stereo eye is present in encoded or decoded video buffers.
+ */
+typedef CF_OPTIONS(uint64_t, CMStereoViewComponents)
+{
+	kCMStereoView_None          = 0,
+	kCMStereoView_LeftEye 		= 1UL << 0,
+	kCMStereoView_RightEye 		= 1UL << 1
+} API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@constant kCMTagStereoLeftEye
+	@abstract A CMTag of category kCMTagCategory_StereoView and the value kCMTagStereoViewComponent_LeftEye (Flags).
+ */
+CM_EXPORT const CMTag kCMTagStereoLeftEye CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@constant kCMTagStereoRightEye
+	@abstract A CMTag of category kCMTagCategory_StereoView and the value kCMTagStereoViewComponent_RightEye (Flags).
+ */
+CM_EXPORT const CMTag kCMTagStereoRightEye CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@constant kCMTagStereoLeftAndRightEye
+	@abstract A CMTag of category kCMTagCategory_StereoView and the value of the bitwise OR of kCMTagStereoViewComponent_LeftEye and kCMTagStereoViewComponent_RightEye (Flags).
+ */
+CM_EXPORT const CMTag kCMTagStereoLeftAndRightEye CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@constant kCMTagStereoNone
+	@abstract A CMTag of category kCMTagCategory_StereoView and the value of kCMTagStereoViewComponent_None. (Flags)
+ */
+CM_EXPORT const CMTag kCMTagStereoNone CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+#pragma mark - StereoViewInterpretation data types and convenience tags
+
+/*!
+	@abstract Flags used with kCMTagCategory_StereoViewInterpretation tags to signal additional information that may be important to the interpretation of stereo views carried in a buffer or channel.
+	@discussion A buffer or channel may carry one or more stereo eye views. The signaling of the presence of individual stereo eye views can be done using CMTags with a kCMTagCategory_StereoView category and correspondng kCMTagStereoViewComponent_* constants. There may however be additional signaling that is valuable beyond the presence of a stereo eye. The kCMTagCategory_StereoViewInterpretation category allows additional signaling that may be relevant for interpretation of storage, ordering or other details regarding the stereo views.  A CMTag having a CMTagCategory of kCMTagCategory_StereoViewInterpretation has a value that is a set of kCMStereoViewInterpretation_* flags (see CMTagMakeWithFlagsValue()) that can be set to indicate additional aspects of the stereo view or stereo views. The absence of a flag indicates the default interpretation of that feature or aspect should occur. If a flag is set, the semantic of that feature and only that feature should be inferred.  Two stereo view interpretations are currently defined.  One is that the order of stereo views is the reverse of the default of left then right. Here, order can be the geometric order such as in frame packed video or in something such as storage order.  The second is that buffers or channels contain views other than the left stereo eye view and the right stereo eye view. Such a view might be used as an alternative when perhaps monoscopic view is to be used instead of selecting the left or right stereo view or synthesizing something based upon the left and right stereo eye views.  The absence of a kCMTagCategory_StereoViewInterpretation CMTag is meant to indicate defaults are used.  Specifying kCMStereoViewInterpretation_Default is equivalent to the absence of a CMTag with category kCMTagCategory_StereoViewInterpretation.
+	@constant kCMStereoViewInterpretation_Default no additional interpretation other than the default is implied by this tag. The absence of a tag of the kCMTagCategory_StereoViewInterpretation is considered equivalent to a CMTag having the kCMStereoViewInterpretation_Default value.
+	@constant kCMStereoViewInterpretation_StereoOrderReversed the order of the stereo left eye and stereo right eye are reversed from the default of left being first and right being second in whatever geometric sense or storage sense that might imply. If set to 0, the order is the default left and then right eye.
+	@constant kCMStereoViewInterpretation_AdditionalViews one or more additional views may be present beyond stereo left and stereo right eyes (e.g,. a “centerline” view). If set to 0, there are no additional views beyond the stereo views or no additional views can be determined to exist.
+ */
+typedef CF_OPTIONS(uint64_t, CMStereoViewInterpretationOptions)
+{
+	kCMStereoViewInterpretation_Default      			= 0,
+	kCMStereoViewInterpretation_StereoOrderReversed 	= 1UL << 0,
+	kCMStereoViewInterpretation_AdditionalViews 		= 1UL << 1
+} API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@constant kCMTagStereoInterpretationOrderReversed
+	@abstract A CMTag of category kCMTagCategory_StereoViewInterpretation and the value of kCMStereoViewInterpretation_StereoOrderReversed (Flags).
+ */
+CM_EXPORT const CMTag kCMTagStereoInterpretationOrderReversed CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+#pragma mark - ProjectionType data types and convenience tags
+
+/*!
+	@abstract Constants used with kCMTagCategory_ProjectionType to signal the nature of a video projection carried in a buffer or channel.
+	@discussion A video projection can be one of several types. Examples include 360 degree equirectangular, 180 degree half equirectangular, or a fisheye.  A CMTag having a CMTagCategory of kCMTagCategory_ProjectionType has a value that is an OSType indicating the kind of projection using a kCMProjectionType_* constant.  The kCMProjectionType_Rectangular projection type can signal that there is no projection other than the default 2D view. This is provided so it is possible to still signal a kCMTagCategory_ProjectionType CMTag but indicates it has no effect. If a kCMTagCategory_ProjectionType CMTag is not signaled, a rectangular projection is implied.  The kCMTagCategory_ProjectionType tag may be associated with other tags if projection related parameters are also signaled. What is carried will be defined for the specific type of projection.
+	@constant kCMProjectionType_Rectangular There is no projection.This is a traditional 2D texture. Default if no projection type tag is signaled.
+	@constant kCMProjectionType_Equirectangular The projection is a 360 degree equirectangular projection.
+	@constant kCMProjectionType_HalfEquirectangular The projection is a 180 degree equirectangular projection.
+	@constant kCMProjectionType_Fisheye The projection is a fisheye projection.
+ */
+typedef CF_ENUM(uint64_t, CMProjectionType)
+{
+	kCMProjectionType_Rectangular 			= 'rect',
+	kCMProjectionType_Equirectangular 		= 'equi',
+	kCMProjectionType_HalfEquirectangular 	= 'hequ',
+	kCMProjectionType_Fisheye 				= 'fish',
+} API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@constant kCMTagProjectionTypeRectangular
+	@abstract A CMTag of category kCMTagCategory_ProjectionType and the value kCMTagProjectionType_Rectangular (OSType).
+ */
+CM_EXPORT const CMTag kCMTagProjectionTypeRectangular CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@constant kCMTagProjectionTypeEquirectangular
+	@abstract A CMTag of category kCMTagCategory_ProjectionType and the value kCMTagProjectionType_Equirectangular (OSType).
+ */
+CM_EXPORT const CMTag kCMTagProjectionTypeEquirectangular CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@constant kCMTagProjectionTypeFisheye
+	@abstract A CMTag of category kCMTagCategory_ProjectionType and the value kCMTagProjectionType_Fisheye (OSType).
+ */
+CM_EXPORT const CMTag kCMTagProjectionTypeFisheye CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+#pragma mark - PackingType data types and convenience tags
+
+/*!
+	@abstract Constants used with kCMTagCategory_PackingType to signal the nature of any packing applied in a buffer or channel.
+	@discussion A video packing can be one of several types including frame-packing for stereo views or texture atlasing. A CMTag having a CMTagCategory of kCMTagCategory_ProjectionType has a value that is an OSType indicating the kind of packing using a kCMPackingType_* constant.  Examples of frame-packing include side-by-side and over-under packing, There may be related CMTags if a kind of packing requires additional parameters. The requirements will be documented with the specific kind of packing.
+	@constant kCMPackingType_None There is no packing. This is a traditional 2D texture. For this case no packing tag needs to be used.
+	@constant kCMPackingType_SideBySide The packing uses a horizontal side-by-side packing of two views. By default, the left stereo eye view is to the left of the right stereo eye view. If the view order is reversed, indicated by kCMTagCategory_StereoViewInterpretation/kCMStereoViewInterpretation_StereoOrderReversed, then the right view is to the left of the left stereo view.
+	@constant kCMPackingType_OverUnder The packing uses a vertical over-under (or top-and-bottom) packing of two views. By default, the left stereo eye view is above the right stereo eye view. If the view order is reversed, indicated by kCMTagCategory_StereoViewInterpretation/kCMStereoViewInterpretation_StereoOrderReversed, then the right view is above the left stereo view.
+ */
+typedef CF_ENUM(uint64_t, CMPackingType)
+{
+	kCMPackingType_None 			= 'none',
+	kCMPackingType_SideBySide 	= 'side',
+	kCMPackingType_OverUnder 	= 'over',
+} API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@constant kCMTagPackingTypeNone
+	@abstract A CMTag of category kCMTagCategory_PackingType and the value kCMTagPackingType_None (OStype).
+ */
+CM_EXPORT const CMTag kCMTagPackingTypeNone CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@constant kCMTagPackingTypeSideBySide
+	@abstract A CMTag of category kCMTagCategory_PackingType and the value kCMTagPackingType_SideBySide (OStype).
+ */
+CM_EXPORT const CMTag kCMTagPackingTypeSideBySide CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@constant kCMTagPackingTypeOverUnder
+	@abstract A CMTag of category kCMTagCategory_PackingType and the value kCMTagPackingType_OverUnder (OStype).
+ */
+CM_EXPORT const CMTag kCMTagPackingTypeOverUnder CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+#pragma mark - CMTag accessors and creation
+
+/*!
+	@function	CMTagGetCategory
+	@abstract   Returns the CMTagCategory field of the CMTag.
+	@param tag CMTag to access.
+	@result		CMTagCategory of the tag.
+*/
+CM_INLINE CMTagCategory CMTagGetCategory( CMTag tag ) CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function	CMTagCategoryEqualToTagCategory
+	@abstract   Tests if the CMTagCategory fields of two CMTags are equal.
+	@discussion Function evaluates if two tag categories are structurally equivalent. This can also be performed using the == operator with the fields but this inline can be useful if one wants to catch invocations.
+	@param	 	tag1 First CMTag to test.
+	@param 		tag2 Second CMTag to test.
+	@result		Boolean indicating if the tag categories are equal.
+*/
+CM_INLINE Boolean CMTagCategoryEqualToTagCategory( CMTag tag1, CMTag tag2 ) CF_SWIFT_UNAVAILABLE("Unavailable in Swift") API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function	CMTagGetValue
+	@abstract   Returns the raw 64-bit CMTagValue field of the CMTag.
+	@discussion The CMTagValue is returned without consideration for the encoded data type.
+	@param		tag CMTag to access.
+	@result		CMTagValue of the tag.
+*/
+CM_INLINE CMTagValue CMTagGetValue( CMTag tag ) CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function	CMTagHasCategory
+	@abstract   Returns true if the CMTag has the specified CMTagCategory.
+	@param tag CMTag to evaluate.
+	@param category CMTagCategory to check for.
+	@result		CMTagCategory of the tag.
+*/
+CM_INLINE Boolean CMTagHasCategory( CMTag tag, CMTagCategory category ) CF_SWIFT_UNAVAILABLE("Unavailable in Swift") API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function	CMTagHasSInt64Value
+	@abstract	Checks if the tag represents a signed 64-bit value.
+	@param tag CMTag to evaluate.
+	@result	Returns true if the CMTag carries a signed 64-bit value indicated by a data type of kCMTagDataType_SInt64, false otherwise.
+*/
+CM_EXPORT Boolean CMTagHasSInt64Value( CMTag tag ) CF_SWIFT_UNAVAILABLE("Unavailable in Swift") API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function	CMTagGetSInt64Value
+	@abstract   Returns the signed 64-bit value carried by the CMTag.
+	@discussion This should only be called on a CMTag with a data type of kCMTagDataType_SInt64. Calling it with a CMTag having another data type is undefined.
+	@param tag CMTag to evaluate.
+	@result	Signed 64-bit integer.
+*/
+CM_EXPORT int64_t CMTagGetSInt64Value( CMTag tag ) CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function	CMTagHasFloat64Value
+	@abstract	Checks if the tag represents a 64-bit float value.
+	@param tag CMTag to evaluate.
+	@result	Returns true if the CMTag carries a 64-bit float indicated by a data type of kCMTagDataType_Float64, false otherwise.
+*/
+CM_EXPORT Boolean CMTagHasFloat64Value( CMTag tag ) CF_SWIFT_UNAVAILABLE("Unavailable in Swift") API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function	CMTagGetFloat64Value
+	@abstract   Returns the 64-bit floating point value carried by the CMTag.
+	@discussion This should only be called on a CMTag with a data type of kCMTagDataType_Float64. Calling it with a CMTag having another data type is undefined.
+	@param tag CMTag to evaluate.
+	@result	64-bit float.
+*/
+CM_EXPORT Float64 CMTagGetFloat64Value( CMTag tag ) CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function	CMTagHasOSTypeValue
+	@abstract	Checks if the tag represents an OSType value.
+	@param tag CMTag to evaluate.
+	@result	Returns true if the CMTag carries an OSType indicated by a data type of kCMTagDataType_OSType, false otherwise.
+*/
+CM_EXPORT Boolean CMTagHasOSTypeValue( CMTag tag ) CF_SWIFT_UNAVAILABLE("Unavailable in Swift") API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function	CMTagGetOSTypeValue
+	@abstract   Returns the single OSType value carried by the CMTag.
+	@discussion This should only be called on a CMTag with a data type of kCMTagDataType_OSType. Calling it with a CMTag having another data type is undefined.
+	@param tag CMTag to evaluate.
+	@result	OSType.
+*/
+CM_EXPORT OSType CMTagGetOSTypeValue( CMTag tag ) CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function	CMTagHasFlagsValue
+	@abstract	Checks if the tag represents an flags value.
+	@param tag CMTag to evaluate.
+	@result	Returns true if the CMTag carries 64 bits of flags indicated by a data type of kCMTagDataType_Flags, false otherwise.
+*/
+CM_EXPORT Boolean CMTagHasFlagsValue( CMTag tag ) CF_SWIFT_UNAVAILABLE("Unavailable in Swift") API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function	CMTagGetFlagsValue
+	@abstract   Returns the 64 bits of flags as an unsigned 64-bit integer carried by the CMTag.
+	@discussion This should only be called on a CMTag with a data type of kCMTagDataType_Flags. Calling it with a CMTag having another data type is undefined.
+	@param tag CMTag to evaluate.
+	@result	Unsigned 64-bit integer holding the flags value.
+*/
+CM_EXPORT uint64_t CMTagGetFlagsValue( CMTag tag ) CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+#pragma mark - CMTag creation functions
+
+/*!
+	@function	CMTagMakeWithSInt64Value
+	@abstract   Create a CMTag holding a signed 64-bit integer.
+	@discussion This function creates a valid CMTag with the data type kCMTagDataType_SInt64 and have a signed 64-bit integer value.
+	@param category CMTagCategory for the created CMTag.
+	@param value A signed 64-bit integer to encode in the returned CMTag.
+	@result A CMTag.
+*/
+CM_EXPORT CMTag CMTagMakeWithSInt64Value( CMTagCategory category, int64_t value ) CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function	CMTagMakeWithFloat64Value
+	@abstract   Create a CMTag holding a 64-bit float.
+	@discussion This function creates a valid CMTag with the data type kCMTagDataType_Float64 and have a 64-bit floating point value.
+	@param category CMTagCategory for the created CMTag.
+	@param value A 64-bit float to encode in the returned CMTag.
+	@result A CMTag.
+*/
+CM_EXPORT CMTag CMTagMakeWithFloat64Value( CMTagCategory category, Float64 value ) CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function	CMTagMakeWithOSTypeValue
+	@abstract   Create a CMTag holding an OSType.
+	@discussion This function creates a valid CMTag with the data type kCMTagDataType_OSType and have an OSType value.
+	@param category CMTagCategory for the created CMTag.
+	@param value An OSType to encode in the returned CMTag.
+	@result A CMTag.
+*/
+CM_EXPORT CMTag CMTagMakeWithOSTypeValue( CMTagCategory category, OSType value ) CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+
+/*!
+	@function	CMTagMakeWithFlagsValue
+	@abstract   Create a CMTag holding a 64 bits of flags.
+	@discussion This function creates a valid CMTag with the data type kCMTagDataType_Flags and has an unsigned 64-bit integer value holding the flags.
+	@param category CMTagCategory for the created CMTag.
+	@param flagsForTag An unsigned 64-bit integer to encode in the returned CMTag.
+	@result A CMTag.
+*/
+CM_EXPORT CMTag CMTagMakeWithFlagsValue( CMTagCategory category, uint64_t flagsForTag ) CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+#pragma mark - CMTag equality
+
+/*
+	Routines to test equality of one CMTag struct type to another struct of the same category.
+*/
+
+/*!
+	@function	CMTagEqualToTag
+	@abstract   Tests if two CMTags are equal.
+	@discussion Function evaluates if two tags are structurally equivalent. It performs a field by field comparison.
+	@param tag1 First CMTag to test for equality.
+	@param tag2 Second CMTag to test for equality.
+	@result		Returns true if the two tags are equal, false otherwise.
+*/
+CM_EXPORT Boolean CMTagEqualToTag( CMTag tag1, CMTag tag2 ) CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function	CMTagCompare
+	@abstract   Compares two CMTags in an ordered fashion returning a CFComparisonResult based upon the ordering of the tags.
+	@discussion The entirety of a CMTag can be compared against a second CMTag in an ordered way.  The details of how the comparison is performed is an internal implementation detail. The comparison is performed as tag1 COMPARISON tag2 where COMPARISON is the ordering operation.  The ordering will be stable under a release of the framework but may change in the future. Therefore, an ordered CMTag array serialized in one version of the framework should not be assumed to be ordered the same in another version of the framework. This is best handled by retrieving the original array of CMTags and then reinserting with the new order.
+	@param tag1 First CMTag to compare in ordered fashion.
+	@param tag2 Second CMTag to compare in ordered fashion.
+	@result		The CFComparisonResult indicating the order of tag1 compared to tag2.
+*/
+CM_EXPORT CFComparisonResult CMTagCompare( CMTag tag1, CMTag tag2 ) CF_SWIFT_UNAVAILABLE("Unavailable in Swift") API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function	CMTagCategoryValueEqualToValue
+	@abstract   Compares two CMTagCategory values for equality.
+	@discussion Equality can also be tested by comparing the values with == but this is provided for consistency with other tests here.
+	@param tag1 First CMTag to test for equality.
+	@param tag2 Second CMTag to test for equality.
+	@result		Boolean indicating if the tag values are equal.
+*/
+CM_INLINE Boolean CMTagCategoryValueEqualToValue( CMTag tag1, CMTag tag2 ) CF_SWIFT_UNAVAILABLE("Unavailable in Swift") API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function	CMTagHash
+	@abstract   Calculates a hash code for the CMTag.
+	@param tag CMTag to hash.
+	@result		The created CFHashCode.
+*/
+CM_EXPORT CFHashCode CMTagHash( CMTag tag) CF_SWIFT_UNAVAILABLE("Unavailable in Swift") API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function	CMTagCopyDescription
+	@abstract   Creates a CFString with a description of a CMTag (just like CFCopyDescription).
+	@discussion This can be used from within CFShow on an object that contains CMTag fields. It is also useful from other client debugging code.  The caller owns the returned CFString, and is responsible for releasing it.  Descriptions are not localized so are likely suitable only for debugging.
+	@param allocator CFAllocator to use in creating the description string.  Pass kCFAllocatorDefault to use the default allocator.
+	@param tag CMTag to describe.
+	@result		The created CFString description.
+*/
+CM_EXPORT CFStringRef CM_NULLABLE CMTagCopyDescription(
+	CFAllocatorRef CM_NULLABLE allocator,
+	CMTag tag ) CF_REFINED_FOR_SWIFT
+API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+#pragma mark - CMTag serialization
+
+/*!
+	@function	CMTagCopyAsDictionary
+	@abstract   Returns a CFDictionary version of a CMTag.
+	@discussion This is useful when putting CMTag in CF container types.  The caller owns the returned CFDictionary, and is responsible for releasing it.
+	@param tag 	The CMTag from which to create the dictionary.
+	@param allocator	CFAllocator with which to create a dictionary. Pass kCFAllocatorDefault to use the default allocator.
+	@result     A CFDictionary version of the CMTag.
+*/
+CM_EXPORT CFDictionaryRef CM_NULLABLE CMTagCopyAsDictionary(
+				CMTag tag,
+				CFAllocatorRef CM_NULLABLE  allocator) CF_SWIFT_UNAVAILABLE("Unavailable in Swift")
+				API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+/*!
+	@function	CMTagMakeFromDictionary
+	@abstract   Reconstitutes a CMTag struct from a CFDictionary previously created by CMTagCopyAsDictionary.
+	@discussion This is useful when getting CMTag from CF container types.  If the CFDictionary does not have the requisite keyed values, kCMTagInvalid is returned.
+	@param	dict	A CFDictionary from which to create a CMTag.
+	@result		The created CMTag.
+*/
+CM_EXPORT CMTag CMTagMakeFromDictionary(
+				CFDictionaryRef CM_NONNULL dict) CF_SWIFT_UNAVAILABLE("Unavailable in Swift")
+				API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+#pragma mark - Tag Dictionary Keys
+
+/*!
+	@constant kCMTagValueKey
+	@discussion CFDictionary key for value field of a CMTag.
+*/
+CM_EXPORT const CFStringRef kCMTagValueKey CF_SWIFT_UNAVAILABLE("Unavailable in Swift") API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@constant kCMTagCategoryKey
+	@discussion CFDictionary key for category field of a CMTag.
+*/
+CM_EXPORT const CFStringRef kCMTagCategoryKey CF_SWIFT_UNAVAILABLE("Unavailable in Swift") API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@constant kCMTagDataTypeKey
+	@discussion CFDictionary key for dataType field of a CMTag.
+*/
+CM_EXPORT const CFStringRef kCMTagDataTypeKey CF_SWIFT_UNAVAILABLE("Unavailable in Swift") API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+#pragma mark - CMTag Inline Routine Definitions
+
+/*
+	Macros for testing CMTag validity and data type
+ */
+#define CMTAG_IS_VALID(tag) ((Boolean)(((tag).dataType) != kCMTagDataType_Invalid))
+
+#define CMTAG_IS_INVALID(tag) ((Boolean)(((tag).dataType) == kCMTagDataType_Invalid))
+
+/*
+	Inline routine definitions
+	
+	Prototypes are above
+ */
+
+CM_INLINE CMTagCategory CMTagGetCategory( CMTag tag )
+{
+	return tag.category;
+}
+
+CM_INLINE CMTagValue CMTagGetValue( CMTag tag )
+{
+	return tag.value;
+}
+
+CM_INLINE Boolean CMTagHasCategory( CMTag tag, CMTagCategory category )
+{
+	return ( CMTagGetCategory( tag ) == category );
+}
+
+CM_INLINE Boolean CMTagCategoryEqualToTagCategory( CMTag tag1, CMTag tag2 )
+{
+	return tag1.category == tag2.category;
+}
+
+CM_INLINE Boolean CMTagIsValid( CMTag tag )
+{
+	return CMTAG_IS_VALID( tag );
+}
+
+CM_INLINE Boolean CMTagCategoryValueEqualToValue( CMTag tag1, CMTag tag2 )
+{
+	return (tag1.category == tag2.category) &&	// categories must match
+		(CMTagGetValueDataType(tag1) == CMTagGetValueDataType(tag2)) &&	// data types must match
+		(tag1.value == tag2.value);
+}
+
+#pragma pack(pop)
+    
+CM_ASSUME_NONNULL_END
+
+CF_IMPLICIT_BRIDGING_DISABLED
+
+#ifdef __cplusplus
+}
+#endif
+	
+#endif // CMTAG_H
diff -ruN /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMTagCollection.h /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMTagCollection.h
--- /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMTagCollection.h	1969-12-31 19:00:00
+++ /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMTagCollection.h	2023-05-26 21:30:04
@@ -0,0 +1,560 @@
+/*
+    File:  CMTagCollection.h
+	
+	Framework:  CoreMedia
+ 
+	Copyright © 2023 Apple Inc. All rights reserved.
+ 
+*/
+
+#ifndef CMTAGCOLLECTION_H
+#define CMTAGCOLLECTION_H
+
+#include <CoreMedia/CMBase.h>
+#include <CoreFoundation/CoreFoundation.h>
+#include <CoreMedia/CMTag.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+CF_IMPLICIT_BRIDGING_ENABLED
+
+CM_ASSUME_NONNULL_BEGIN
+
+#pragma pack(push)
+#pragma pack()
+
+#pragma mark - Errors
+
+/*!
+	@enum		CMTagCollection Errors
+	@discussion The OSStatus errors returned from the CMTagCollection routines.
+	@constant	kCMTagCollectionError_ParamErr Returned when caller passes incorrect input or output parameters.
+	@constant	kCMTagCollectionError_AllocationFailed Returned if a necessary allocation failed.
+	@constant	kCMTagCollectionError_InternalError Returned if some kind of internal implementation error occurred.
+	@constant	kCMTagCollectionError_InvalidTag Returned if the tag is kCMTagInvalid.
+	@constant	kCMTagCollectionError_InvalidTagCollectionDictionary Returned if the CFDictionary being deserialized is not valid to create a CMTagCollection.
+	@constant	kCMTagCollectionError_InvalidTagCollectionData Returned if structure of the CFData being deserialized is not valid to create a CMTagCollection.
+	@constant	kCMTagCollectionError_TagNotFound Returned if a search for a CMTag in the collection failed, including if the collection is empty.
+	@constant	kCMTagCollectionError_InvalidTagCollectionDataVersion Returned if the CFData deserialized to create a CMTagCollection has an unknown version.
+	@constant	kCMTagCollectionError_ExhaustedBufferSize Returned if the buffer size to retrieve CMTags is smaller than necessary.
+	@constant	kCMTagCollectionError_NotYetImplemented Returned if the function is not yet implemented.
+*/
+typedef CF_ENUM(OSStatus, CMTagCollectionError)
+{
+	kCMTagCollectionError_ParamErr 							= -15740,
+	kCMTagCollectionError_AllocationFailed 					= -15741,
+	kCMTagCollectionError_InternalError 					= -15742,
+	kCMTagCollectionError_InvalidTag						= -15743,
+	kCMTagCollectionError_InvalidTagCollectionDictionary	= -15744,
+	kCMTagCollectionError_InvalidTagCollectionData			= -15745,
+	kCMTagCollectionError_TagNotFound						= -15746,
+	kCMTagCollectionError_InvalidTagCollectionDataVersion 	= -15747,
+	kCMTagCollectionError_ExhaustedBufferSize 				= -15748,
+	kCMTagCollectionError_NotYetImplemented					= -15749
+} CF_SWIFT_UNAVAILABLE("Unavailable in Swift") API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+#pragma mark - CMTagCollectionRef
+
+/*!
+	@typedef CMTagCollectionRef
+	@discussion	A reference to a CMTagCollection, a CF object that adheres to retain/release semantics. This value type represents an unordered collection of zero or more CMTags. This type is roughly analogous to CFSetRef in that it is unordered and has operations for Boolean set math. It is however optimized for the storage of CMTag structures.
+*/
+typedef const struct CM_BRIDGED_TYPE(id) OpaqueCMTagCollection * CMTagCollectionRef CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+typedef struct CM_BRIDGED_TYPE(id) OpaqueCMTagCollection * CMMutableTagCollectionRef CF_SWIFT_UNAVAILABLE("Unavailable in Swift") API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function	CMTagCollectionGetTypeID
+	@abstract	Obtains the CoreFoundation type ID for the CMTagCollection type.
+	@discussion	Obtains the CoreFoundation type ID for the CMTagCollection type.
+	@result	Returns the CFTypeID corresponding to CMTagCollection.
+*/
+CM_EXPORT CFTypeID CMTagCollectionGetTypeID(void) CF_SWIFT_UNAVAILABLE("Unavailable in Swift") API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+#pragma mark - Tag collection related struct constants
+
+/*!
+	@typedef CMTagCollectionApplierFunction
+	@discussion A callback function that can be used to iterate over a CMTagCollection. The callback is passed a CMTag and a potentially NULL context reference that can be used to implement some operation for each tag.
+	@param tag The CMTag to evaluate.
+	@param context A valid pointer or NULL used by the callback implementation.
+*/
+typedef void (*CMTagCollectionApplierFunction)(CMTag tag, void * CM_NULLABLE context) CF_SWIFT_UNAVAILABLE("Unavailable in Swift") API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@typedef CMTagCollectionTagFilterFunction
+	@discussion A callback function that can be used to implement a filtering operation during iteration over a CMTagCollection. For each CMTag that satisfies the predicate, the callback should return true. Otherwise, it should return false.  The callback is passed a CMTag and a potentially NULL context reference that can be used to implement some operation for each tag.
+	@param tag The CMTag to evaluate.
+	@param context A valid pointer or NULL used by the callback implementation.
+	@result A Boolean indicating if the tag passed the callback test.
+*/
+typedef Boolean (*CMTagCollectionTagFilterFunction)(CMTag tag, void * CM_NULLABLE context) CF_SWIFT_UNAVAILABLE("Unavailable in Swift") API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+#pragma mark - Tag collection creation
+
+/*!
+	@function	CMTagCollectionCreate
+	@abstract   Creates a CMTagCollectionRef described by a number of parameters.
+	@discussion This can be used to construct a CMTagCollectionRef from zero or more CMTags.
+	@param allocator	CFAllocator to use to create the collection and internal data structures.
+	@param tags			Zero or more CMTag structs to copy into the collection. May pass NULL if tagCount is also zero (0).
+	@param tagCount		Number of tags in the 'tags' array.
+	@param newCollectionOut		Address of a location to return the newly created CMTagCollectionRef.  The client is responsible for releasing the returned CMTagCollection.
+	@result     OSStatus with error or noErr if successful.
+*/
+CM_EXPORT OSStatus CMTagCollectionCreate( CFAllocatorRef CM_NULLABLE allocator,
+				const CMTag * CM_NULLABLE tags,
+				CMItemCount tagCount,
+				CM_RETURNS_RETAINED_PARAMETER CMTagCollectionRef CM_NULLABLE * CM_NONNULL newCollectionOut ) CF_REFINED_FOR_SWIFT
+				API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function	CMTagCollectionCreateMutable
+	@abstract   Creates a CMMutableTagCollectionRef.
+	@discussion This can be used to construct a mutable CMTagCollectionRef with a capacity limit or without a capacity limit. A capacity greater than zero indicates a maximum number of CMTags the collection can contain. The actual number of tags may be less than this value depending upon how many tags have been added to the collection.
+	If capacity is 0, the mutable collection can contain any number of tags.
+	@param allocator	CFAllocator to use to create the collection and internal data structures.
+	@param capacity		Capacity limit set to zero to indicate no limit or a value greater than zero for a limit.
+	@param newMutableCollectionOut	Address of a location to return the newly created CMMutabbleTagCollectionRef.  The client is responsible for releasing the returned CMMutableTagCollection.
+	@result     OSStatus with error, or noErr if successful.
+*/
+CM_EXPORT OSStatus CMTagCollectionCreateMutable( CFAllocatorRef CM_NULLABLE allocator,
+				CFIndex capacity,
+				CM_RETURNS_RETAINED_PARAMETER CMMutableTagCollectionRef CM_NULLABLE * CM_NONNULL newMutableCollectionOut ) CF_REFINED_FOR_SWIFT
+				API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+/*!
+	@function	CMTagCollectionCreateCopy
+	@abstract   Creates a duplicate CMTagCollectionRef.
+	@discussion This can be used to construct a CMTagCollectionRef that contains all the same tags as another collection.
+	@param tagCollection	CMTagCollectionRef used to create the copy.
+	@param allocator	CFAllocator used to create the copy.
+	@param newCollectionCopyOut		Address of a location to return the newly created CMTagCollectionRef.  The client is responsible for releasing the returned CMTagCollection.
+	@result     OSStatus with error or noErr if successful.
+*/
+CM_EXPORT OSStatus CMTagCollectionCreateCopy( CMTagCollectionRef CM_NONNULL tagCollection,
+				CFAllocatorRef CM_NULLABLE allocator,
+				CM_RETURNS_RETAINED_PARAMETER CMTagCollectionRef CM_NULLABLE * CM_NONNULL newCollectionCopyOut ) CF_REFINED_FOR_SWIFT
+				API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function	CMTagCollectionCreateMutableCopy
+	@abstract   Creates a duplicate mutable CMTagCollectionRef.
+	@discussion This can be used to construct a CMMutableTagCollectionRef that contains all the same tags as another collection.
+	@param tagCollection CMTagCollectionRef used to create the copy.
+	@param allocator CFAllocator used to create the copy.
+	@param newMutableCollectionCopyOut Address of a location to return the newly created CMMutableTagCollectionRef.  The client is responsible for releasing the returned CMMutableTagCollection.
+	@result     OSStatus with error or noErr if successful.
+*/
+CM_EXPORT OSStatus CMTagCollectionCreateMutableCopy( CMTagCollectionRef CM_NONNULL tagCollection,
+				CFAllocatorRef CM_NULLABLE allocator,
+				CM_RETURNS_RETAINED_PARAMETER CMMutableTagCollectionRef CM_NULLABLE * CM_NONNULL newMutableCollectionCopyOut ) CF_REFINED_FOR_SWIFT
+				API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+#pragma mark - Tag collection accessors
+
+/*!
+	@function	CMTagCollectionCopyDescription
+	@abstract   Creates a CFString with a description of a CMTagCollection.
+	@discussion This can be used from within CFShow on a CMTagCollection object. It is also useful from other client debugging code.  The caller owns the returned CFString, and is responsible for releasing it.  Descriptions are not localized so are likely suitable only for debugging.
+	@param allocator CFAllocator to use in creating the description string.
+	@param tagCollection CMTagCollectionRef to describe.
+	@result		The created CFString description.
+*/
+CM_EXPORT CM_RETURNS_RETAINED CFStringRef CM_NULLABLE CMTagCollectionCopyDescription(
+			CFAllocatorRef CM_NULLABLE allocator,
+			CMTagCollectionRef CM_NULLABLE tagCollection) CF_REFINED_FOR_SWIFT
+			API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function	CMTagCollectionGetCount
+	@abstract   Returns the number of CMTags held in the CMTagCollectionRef.
+	@param tagCollection	CMTagCollectionRef to evaluate for the tag count.
+	@result     CMItemCount holding the count.
+*/
+CM_EXPORT CMItemCount CMTagCollectionGetCount( CMTagCollectionRef CM_NONNULL tagCollection ) CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function	CMTagCollectionContainsTag
+	@abstract	Checks if the tag collection contains a specific tag.
+	@param tagCollection	CMTagCollection to check.
+	@param tag	CMTag to find.
+	@result     Returns true if the indicated CMTag is contained within the CMTagCollection, false otherwise.
+*/
+CM_EXPORT Boolean CMTagCollectionContainsTag( CMTagCollectionRef CM_NONNULL tagCollection, CMTag tag ) CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function	CMTagCollectionContainsTagsOfCollection
+	@abstract	Checks if all the tags in a tag collection are present in another tag collection.
+	@discussion Tests if a collection of tags specified by a CMTagCollection are contained within another tag collection in its entirety. Partial containment will report false. Complete containment will report true.
+	@param tagCollection	CMTagCollectionRef used to check.
+	@param containedTagCollection	CMTagCollectionRef whose contents should be checked for containment in tagCollection.
+	@result     Returns true if all CMTags in a collection are contained within the specified CMTagCollection, false otherwise.
+*/
+CM_EXPORT Boolean CMTagCollectionContainsTagsOfCollection( CMTagCollectionRef CM_NONNULL tagCollection,
+					CMTagCollectionRef CM_NONNULL containedTagCollection ) CF_REFINED_FOR_SWIFT
+					API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function	CMTagCollectionContainsSpecifiedTags
+	@abstract	Checks if all the specified tags are contained in a tag collection.
+	@discussion Tests if the tags specified by a buffer of CMTags are contained within another tag collection in its entirety. Partial containment will report false. Complete containment will report true.
+	@param tagCollection	CMTagCollectionRef to check.
+	@param containedTags	The non-NULL address to a CMTag array whose CMTags should be checked for containment in tagCollection.
+	@param containedTagCount	The number of CMTag elements in the buffer containedTags. Zero is allowed but will report true.
+	@result     Returns true if all CMTags in a buffer of CMTags are contained within the CMTagCollection, false otherwise.
+*/
+CM_EXPORT Boolean CMTagCollectionContainsSpecifiedTags( CMTagCollectionRef CM_NONNULL tagCollection,
+					const CMTag * CM_NONNULL containedTags, CMItemCount containedTagCount ) CF_REFINED_FOR_SWIFT
+					API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function	CMTagCollectionContainsCategory
+	@abstract   Tests if a CMTagCategory is used by any CMTags within the tag container.
+	@param tagCollection	CMTagCollectionRef to check.
+	@param category	CMTagCategory whose value should be checked for containment in tagCollection.
+	@result     Returns true if tagCollection contains at least one CMTag with the specified category, false otherwise.
+*/
+CM_EXPORT Boolean CMTagCollectionContainsCategory( CMTagCollectionRef CM_NONNULL tagCollection, CMTagCategory category ) CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+ @function CMTagCollectionGetCountOfCategory
+ @abstract Counts an returns the number of tags in the tag collection matching the specified category.
+ @discussion Returns the count of tags having the specified category. It will return 0 if there are no tags.
+ @param tagCollection	CMTagCollectionRef to evaluate.
+ @param category CMTagCategory to check for.
+ @result Returns the count of tags having the specified category.
+*/
+CM_EXPORT CMItemCount CMTagCollectionGetCountOfCategory( CMTagCollectionRef CM_NONNULL tagCollection, CMTagCategory category ) CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+ @function CMTagCollectionGetTags
+ @abstract Retrieve all CMTags and copy into a supplied buffer.
+ @discussion The function retrieves a specified number of CMTags from the CMTagCollectionRef and copies them to a supplied buffer. The routine populates a provided sized buffer with each CMTag in the collection. If the provided buffer is smaller than needed to retrieve all tags, the routine will fill the buffer, return the number actually copied and return kCMTagCollectionError_ExhaustedBufferSize. If the provided buffer is larger than the number of CMTags in the collection to retrieve, the routine will fill the buffer with the number of available CMTags, return the number copied and fill the remainder of the buffer with kCMTagInvalid while returning noErr.
+ @param tagCollection CMTagCollectionRef to iterate.
+ @param tagBuffer A non-NULL address of a buffer to fill with CMTags with CMTagCategory 'category'.
+ @param tagBufferCount The number of CMTags the buffer 'tagBuffer' can hold.
+ @param numberOfTagsCopied The address of a CMItemCount that is filled with the number of tags retrieved, may be NULL.
+ @result OSStatus with an error or noErr if successful.
+*/
+CM_EXPORT OSStatus CMTagCollectionGetTags( CMTagCollectionRef CM_NONNULL tagCollection, CMTag * CM_NONNULL tagBuffer, CMItemCount tagBufferCount, CMItemCount * CM_NULLABLE numberOfTagsCopied ) CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+ @function CMTagCollectionGetTagsWithCategory
+ @abstract Retrieve CMTags having a specified CMTagCategory and copy to a supplied buffer.
+ @discussion Populates a provided buffer with each CMTag in the collection that has the specified CMTagCategory. If the provided buffer is smaller than needed, the routine will fill the buffer, return the number of CMTags actually copied and return kCMTagCollectionError_ExhaustedBufferSize. If the provided buffer is larger than needed, it will fill the buffer with the number of available CMTags, return the number copied and fill the remainder of the buffer with kCMTagInvalid.
+ @param tagCollection CMTagCollectionRef to iterate.
+ @param category CMTagCategory to match.
+ @param tagBuffer A non-NULL address of a buffer to fill with CMTags with CMTagCategory 'category'.
+ @param tagBufferCount The number of CMTags the buffer 'tagBuffer' can hold.
+ @param numberOfTagsCopied The address of a CMItemCount that is filled with the number of tags retrieved, may be NULL.
+ @result OSStatus with an error or noErr if successful.
+*/
+CM_EXPORT OSStatus CMTagCollectionGetTagsWithCategory( CMTagCollectionRef CM_NONNULL tagCollection, CMTagCategory category, CMTag * CM_NONNULL tagBuffer, CMItemCount tagBufferCount, CMItemCount * CM_NULLABLE numberOfTagsCopied ) CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+ @function CMTagCollectionCountTagsWithFilterFunction
+ @abstract Count the number of tags satisfying a callback.
+ @discussion Iterates over the CMTags of the tag collection calling the supplied callback and incrementing a counter for each tag satisfying the callback. Returns this counter value upon completing iteration.
+ @param tagCollection CMTagCollectionRef to iterate.
+ @param filterApplier The CMTagCollectionTagFilterFunction callback to call with each tag.
+ @param context A void * or NULL to pass to applier.
+ @result CMItemCount indicating the number of CMTags satisfying 'filterApplier'.
+*/
+CM_EXPORT CMItemCount CMTagCollectionCountTagsWithFilterFunction( CMTagCollectionRef CM_NONNULL tagCollection, CMTagCollectionTagFilterFunction CM_NONNULL filterApplier, void * CM_NULLABLE context ) CF_SWIFT_UNAVAILABLE("Unavailable in Swift") API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+ @function CMTagCollectionGetTagsWithFilterFunction
+ @abstract Retrieve CMTags satisfying a callback function and copy them to a supplied buffer.
+ @discussion Applies a CMTagCollectionTagFilterFunction predicate and populates a provided buffer with each CMTag that for each tag when the filter returns true.  If the provided buffer is smaller than the number of tags the predicate satisfies, the routine will fill the buffer, return the copy CMTags actually copied and return kCMTagCollectionError_ExhaustedBufferSize. If the provided buffer is larger than needed, it will fill the buffer with the number of available CMTags, fill the remainder of the buffer with kCMTagInvalid and return a result of noErr.
+ @param tagCollection CMTagCollectionRef to iterate.
+ @param tagBuffer A non-NULL address of a buffer to fill with CMTags with CMTagCategory 'category'.
+ @param tagBufferCount The number of CMTags the buffer 'tagBuffer' can hold.
+ @param numberOfTagsCopied The address of a CMItemCount that is filled with the number of tags retrieved, may be NULL.
+ @param filter The CMTagCollectionTagFilterFunction callback to call with each tag.
+ @param context A void * or NULL to pass to filter.
+ @result OSStatus with an error or noErr if successful.
+*/
+CM_EXPORT OSStatus CMTagCollectionGetTagsWithFilterFunction( CMTagCollectionRef CM_NONNULL tagCollection, CMTag * CM_NONNULL tagBuffer, CMItemCount tagBufferCount, CMItemCount * CM_NULLABLE numberOfTagsCopied, CMTagCollectionTagFilterFunction CM_NONNULL filter, void * CM_NULLABLE context ) CF_SWIFT_UNAVAILABLE("Unavailable in Swift") API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+ @function CMTagCollectionCopyTagsOfCategories
+ @abstract Copies all tags belonging to a specified list of CMTagCategory from one tag collection to a newly created tag collection.
+ @discussion This routine copies all tags belonging to a specified list of CMTagCategory from one tag collection to a newly created tag collection.
+ @param allocator CFAllocatorRef to use in allocations of the operation.
+ @param tagCollection CMTagCollectionRef from which to copy tags.
+ @param categories A non-NULL address of a buffer containing a list of CMTagCategory.
+ @param categoriesCount The number of CMTagCategory the buffer 'categories' is holding.
+ @param collectionWithTagsOfCategories The address of a CMTagCollectionRef that contains all tags copied from 'tagCollection'.  The client is responsible for releasing the returned CMTagCollection.
+ @result OSStatus indicating if the operation succeeded.
+*/
+CM_EXPORT OSStatus CMTagCollectionCopyTagsOfCategories(
+				CFAllocatorRef CM_NULLABLE allocator,
+				CMTagCollectionRef CM_NONNULL tagCollection,
+				const CMTagCategory * CM_NONNULL categories,
+				CMItemCount categoriesCount,
+				CM_RETURNS_RETAINED_PARAMETER CMTagCollectionRef CM_NULLABLE * CM_NONNULL collectionWithTagsOfCategories ) CF_SWIFT_UNAVAILABLE("Unavailable in Swift")
+				API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+#pragma mark - Tag collection iteration
+
+/*!
+ @function CMTagCollectionApply
+ @abstract Iterate over a tag collection calling the provided callback.
+ @discussion Iterates over the CMTags of the tag collection executing the callback with each tag.
+ @param tagCollection CMTagCollectionRef to iterate.
+ @param applier The CMTagCollectionApplierFunction callback to call with each tag.
+ @param context A void * or NULL to pass to applier.
+*/
+CM_EXPORT void CMTagCollectionApply( CMTagCollectionRef CM_NONNULL tagCollection,
+				CMTagCollectionApplierFunction CM_NONNULL applier,
+				void * CM_NULLABLE context ) CF_SWIFT_UNAVAILABLE("Unavailable in Swift")
+				API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+ @function CMTagCollectionApplyUntil
+ @abstract Iterate over a tag collection until the callback is satisfied.
+ @discussion Function iterates over the CMTags of the tag collection until the function returns true and then returns the CMTag at that position. Once the callback is satisfied by returning true, CMTagCollectionApplyUntil() stops iteration and returns the CMTag that evaluated to true. If no CMTags satisfy the callback, the value kCMTagInvalid will be returned.
+ @param tagCollection CMTagCollectionRef to iterate.
+ @param applier The CMTagCollectionTagFilterFunction callback to call with each tag.
+ @param context A void * or NULL to pass to applier.
+ @result CMTag having the value of the first tag the callback returned true for or kCMTagInvalid if none was found.
+*/
+CM_EXPORT CMTag CMTagCollectionApplyUntil( CMTagCollectionRef CM_NONNULL tagCollection,
+				CMTagCollectionTagFilterFunction CM_NONNULL applier,
+				void * CM_NULLABLE context ) CF_SWIFT_UNAVAILABLE("Unavailable in Swift")
+				API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+#pragma mark - Tag collection set like operations
+
+/*!
+ @function CMTagCollectionIsEmpty
+ @abstract Reports if the tag collection contains no tags.
+ @discussion This is a convenience name for set like use but is the same as the expression: CMTagCollectionIsEmptyGetCount() == 0.
+ @param tagCollection CMTagCollectionRef to iterate.
+ @result True if there are no tags, false otherwise.
+*/
+CM_EXPORT Boolean CMTagCollectionIsEmpty( CMTagCollectionRef CM_NONNULL tagCollection ) CF_SWIFT_UNAVAILABLE("Use isEmpty") API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+ @function CMTagCollectionCreateIntersection
+ @abstract Calculates the intersection of two tag collections to produce a new tag collection.
+ @discussion This routine creates an intersection of two tag collection by finding common tags among two source tag collections and produces a new tag collection containing those common tags.
+ @param tagCollection1 CMTagCollectionRef to use in the intersection operation.
+ @param tagCollection2 CMTagCollectionRef to use in the intersection operation.
+ @param tagCollectionOut The address of a CMTagCollectionRef that contains all tags that are common to 'tagCollection1' and 'tagCollection2'.  The client is responsible for releasing the returned CMTagCollection.
+ @result OSStatus indicating if the operation succeeded.
+*/
+CM_EXPORT OSStatus CMTagCollectionCreateIntersection(
+			CMTagCollectionRef CM_NULLABLE tagCollection1,
+			CMTagCollectionRef CM_NULLABLE tagCollection2,
+			CM_RETURNS_RETAINED_PARAMETER CMTagCollectionRef CM_NULLABLE * CM_NONNULL tagCollectionOut ) CF_SWIFT_UNAVAILABLE("Unavailable in Swift")
+			API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+ @function CMTagCollectionCreateUnion
+ @abstract Calculates the union of two tag collections to produce a new tag collection.
+ @discussion This routine creates an union of two tag collection by adding all tags from two tag collections and produces a new tag collection containing all the tags. Duplicate tags will not be added twice.  Note that if no tags are common among the source tag collections, the new tag collection will contain as many tags as the sum of the number of tags in each source tag collection. If two source tag collections contain the same tags, the resulting tag collection will have the same number of tags as each source tag collection.
+ @param tagCollection1 CMTagCollectionRef to use in the union operation.
+ @param tagCollection2 CMTagCollectionRef to use in the union operation.
+ @param tagCollectionOut The address of a CMTagCollectionRef that contains all tags that are common to 'tagCollection1' and 'tagCollection2'.  The client is responsible for releasing the returned CMTagCollection.
+ @result OSStatus indicating if the operation succeeded.
+*/
+CM_EXPORT OSStatus CMTagCollectionCreateUnion(
+			CMTagCollectionRef CM_NULLABLE tagCollection1,
+			CMTagCollectionRef CM_NULLABLE tagCollection2,
+			CM_RETURNS_RETAINED_PARAMETER CMTagCollectionRef CM_NULLABLE * CM_NONNULL tagCollectionOut ) CF_SWIFT_UNAVAILABLE("Unavailable in Swift")
+			API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+ @function CMTagCollectionCreateDifference
+ @abstract Calculates the difference of two tag collections to produce a new tag collection.
+ @discussion This routine creates the difference by considering a first source tag collection and removing all tags found in the first tag collection to produce a new tag collection containing only the tags not in the second tag collection.  Note that if the second tag collection has no tags found in the first tag collection, the produced tag collection will have the same tags as the first tag collection. If the second tag collection is empty, the produced tag collection will also have the same tags as the first tag collection.  If the second tag collection contains all the tags found in the source tag collection, the produced tag collection will be empty.  The order of parameters is important. Given two tag collections 'A' and 'B', the calculaton of 'A' - 'B' is not the same as 'B' - 'A'.
+ @param tagCollectionMinuend CMTagCollectionRef from which to remove tags.
+ @param tagCollectionSubtrahend CMTagCollectionRef to consult to determine tags to remove from 'tagCollectionMinuend'.
+ @param tagCollectionOut The address of a CMTagCollectionRef that contains tags from a first tag collection without tags found in a second tag collection.  The client is responsible for releasing the returned CMTagCollection.
+ @result OSStatus indicating if the operation succeeded.
+*/
+CM_EXPORT
+OSStatus CMTagCollectionCreateDifference(
+			CMTagCollectionRef CM_NULLABLE tagCollectionMinuend,
+			CMTagCollectionRef CM_NULLABLE tagCollectionSubtrahend,
+			CM_RETURNS_RETAINED_PARAMETER CMTagCollectionRef CM_NULLABLE * CM_NONNULL tagCollectionOut ) CF_SWIFT_UNAVAILABLE("Unavailable in Swift")
+			API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+ @function CMTagCollectionCreateExclusiveOr
+ @abstract Calculates the exclusive OR of two tag collections to produce a new tag collection.
+ @discussion This routine determines tags that are in only one of two source tag collections and adds only those to produce a new tag collection. If both source tag collections have no tags in common, the produced tag collection will contain a union of both source tag collections. If both source tag collections have the same tags, the produced tag collection will be empty.
+ @param tagCollection1 CMTagCollectionRef to use in the xor operation.
+ @param tagCollection2 CMTagCollectionRef to use in the xor operation.
+ @param tagCollectionOut The address of a CMTagCollectionRef that contains the xor of the tags from the two tag collections.  The client is responsible for releasing the returned CMTagCollection.
+ @result OSStatus indicating if the operation succeeded.
+*/
+CM_EXPORT OSStatus CMTagCollectionCreateExclusiveOr(
+			CMTagCollectionRef CM_NULLABLE tagCollection1,
+			CMTagCollectionRef CM_NULLABLE tagCollection2,
+			CM_RETURNS_RETAINED_PARAMETER CMTagCollectionRef CM_NULLABLE * CM_NONNULL tagCollectionOut ) CF_SWIFT_UNAVAILABLE("Unavailable in Swift")
+			API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+#pragma mark - CMMutableTagCollection routines
+
+/*!
+ @function CMTagCollectionAddTag
+ @abstract Adds a tag to a mutable tag collection guaranteeing it is only added once.
+ @discussion This routine adds a CMTag to a CMMutableTagCollection. If the CMTag already exists in the tag collection, the tag is not added again. If the tag doesn't exist in the tag collection, the tag collection is updated to contain the tag. Note that there is no ordering for tags within a tag collection.
+ @param tagCollection CMMutableTagCollectionRef to which to add a tag.
+ @param tagToAdd A CMTag to add to the tag collection.
+ @result OSStatus indicating if the operation succeeded.  Returns noErr if the tag was already in the collection.
+*/
+CM_EXPORT OSStatus CMTagCollectionAddTag(
+				CMMutableTagCollectionRef CM_NONNULL tagCollection,
+				CMTag tagToAdd ) CF_SWIFT_UNAVAILABLE("Unavailable in Swift")
+				API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+ @function CMTagCollectionRemoveTag
+ @abstract Removes one tag from a mutable tag collection.
+ @discussion This routine removes a CMTag if present from a CMMutableTagCollection. If the CMTag exists in the tag collection, the tag collection is updated to no longer contain the tag. If the tag doesn't exist in the tag collection, the tag collection is left unchanged.  The OSStatus will return kCMTagCollectionError_TagNotFound if the tag does not exist in the collection or if the tag collection is empty.
+ @param tagCollection CMMutableTagCollectionRef from which to remove a tag.
+ @param tagToRemove A CMTag to match to the tag collection.
+ @result OSStatus indicating if the operation succeeded.
+*/
+CM_EXPORT OSStatus CMTagCollectionRemoveTag(
+				CMMutableTagCollectionRef CM_NONNULL tagCollection,
+				CMTag tagToRemove ) CF_SWIFT_UNAVAILABLE("Unavailable in Swift")
+				API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+ @function CMTagCollectionRemoveAllTags
+ @abstract Removes all tags from a mutable tag collection.
+ @discussion This routine removes all CMTags from a CMMutableTagCollection producing an empty collection.
+ @param tagCollection CMMutableTagCollectionRef from which to remove all tags.
+ @result OSStatus indicating if the operation succeeded.
+*/
+CM_EXPORT OSStatus CMTagCollectionRemoveAllTags( CMMutableTagCollectionRef CM_NONNULL tagCollection ) CF_SWIFT_UNAVAILABLE("Unavailable in Swift") API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+ @function CMTagCollectionRemoveAllTagsOfCategory
+ @abstract Removes all tags having a specified category from a mutable tag collection.
+ @discussion This routine removes all CMTags having a specified CMTagCategory from a CMMutableTagCollection perhaps producing an empty collection.
+ @param tagCollection CMMutableTagCollectionRef from which to remove all tags.
+ @param category CMTagCategory to match.
+ @result OSStatus indicating if the operation succeeded.
+*/
+CM_EXPORT OSStatus CMTagCollectionRemoveAllTagsOfCategory(
+				CMMutableTagCollectionRef CM_NONNULL tagCollection,
+				CMTagCategory category ) CF_SWIFT_UNAVAILABLE("Unavailable in Swift")
+				API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+ @function CMTagCollectionAddTagsFromCollection
+ @abstract Add all tags from one tag collection to a mutable tag collection.  Tags already existing in tagCollection will not be added.
+ @param tagCollection CMMutableTagCollectionRef to which to add tags.
+ @param collectionWithTagsToAdd CMTagCollectionRef from which to copy all tags.
+ @result OSStatus indicating if the operation succeeded.
+*/
+CM_EXPORT OSStatus CMTagCollectionAddTagsFromCollection(
+				CMMutableTagCollectionRef CM_NONNULL tagCollection,
+				CMTagCollectionRef CM_NONNULL collectionWithTagsToAdd ) CF_SWIFT_UNAVAILABLE("Unavailable in Swift")
+				API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+ @function CMTagCollectionAddTagsFromArray
+ @abstract Adds all tags specified in a C array to a mutable tag collection.  Tags already existing in tagCollection will not be added.
+ @param tagCollection CMMutableTagCollectionRef to which to add tags.
+ @param tags The address of a buffer of CMTags.
+ @param tagCount CMItemCount of the number of tags in 'tags' array.
+ @result OSStatus indicating if the operation succeeded.
+*/
+CM_EXPORT OSStatus CMTagCollectionAddTagsFromArray(
+				CMMutableTagCollectionRef CM_NONNULL tagCollection,
+				CMTag * CM_NONNULL tags,
+				CMItemCount tagCount ) CF_SWIFT_UNAVAILABLE("Unavailable in Swift")
+				API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+#pragma mark - CMTagCollection dictionary serialization
+
+/*!
+	@function	CMTagCollectionCopyAsDictionary
+	@abstract   Returns a CFDictionary representation of a CMTagCollection.
+	@discussion This is useful when putting CMTagCollections in CF container types.
+	@param 		tagCollection	CMTagCollection to serialize as a CFDictionary.
+	@param		allocator	CFAllocator with which to create a dictionary. Pass kCFAllocatorDefault to use the default allocator.
+	@result     A CFDictionaryRef holding the serialized contents of the CMTagCollection.  The client is responsible for releasing the returned CFDictionary.
+*/
+CM_EXPORT CM_RETURNS_RETAINED CFDictionaryRef CM_NULLABLE CMTagCollectionCopyAsDictionary(
+				CMTagCollectionRef CM_NONNULL tagCollection,
+				CFAllocatorRef CM_NULLABLE  allocator ) CF_SWIFT_UNAVAILABLE("Unavailable in Swift")
+				API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function	CMTagCollectionCreateFromDictionary
+	@abstract   Reconstitutes a CMTagCollection from a CFDictionary previously created by CMTagCollectionCopyAsDictionary.
+	@discussion This is useful when getting CMTagCollection from CF container types.  If the CFDictionary does not have the requisite keyed values, newCollectionOut will contain NULL.
+	@param dict	A CFDictionary from which to create a CMTagCollection.
+	@param allocator CFAllocator to use in allocation CMTagCollectionRef
+	@param newCollectionOut Address of an CMTagCollectionRef to return the newly created tag collection.  The client is responsible for releasing the returned CMTagCollection.
+	@result OSStatus with error or noErr if successful.
+*/
+CM_EXPORT OSStatus CMTagCollectionCreateFromDictionary(
+				CFDictionaryRef CM_NONNULL dict,
+				CFAllocatorRef CM_NULLABLE allocator,
+				CM_RETURNS_RETAINED_PARAMETER CMTagCollectionRef CM_NULLABLE * CM_NONNULL newCollectionOut ) CF_SWIFT_UNAVAILABLE("Unavailable in Swift")
+				API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+#pragma mark - CMTagCollection data serialization
+
+/*
+	CMTagCollection serialization as transport neutral CFData (e.g., always big endian)
+*/
+
+/*!
+	@function	CMTagCollectionCopyAsData
+	@abstract   Returns a CFDataRef version of a CMTagCollection.
+	@discussion This is useful when putting CMTagCollections in CF container types.
+	@param 		tagCollection	CMTagCollection to serialize as a CFData.
+	@param 		allocator	CFAllocator with which to create a CFData. Pass kCFAllocatorDefault to use the default allocator.
+	@result     A CFDataRef holding the serialized contents of the CMTagCollection.  The client is responsible for releasing the returned CFData.
+*/
+CM_EXPORT CM_RETURNS_RETAINED CFDataRef CM_NULLABLE CMTagCollectionCopyAsData(
+				CMTagCollectionRef CM_NONNULL tagCollection,
+				CFAllocatorRef CM_NULLABLE  allocator ) CF_SWIFT_UNAVAILABLE("Unavailable in Swift")
+				API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function	CMTagCollectionCreateFromData
+	@abstract   Reconstitutes a CMTagCollection from a CFData previously created by CMTagCollectionCopyAsData.
+	@discussion This is useful when getting CMTagCollection from CF container types.  If the CFData does not
+				have the requisite keyed values, newCollectionOut will contain NULL.
+	@param data	A CFData from which to create a CMTagCollection.
+	@param allocator CFAllocator to use in allocation CMTagCollectionRef.  Pass kCFAllocatorDefault to use the default allocator.
+	@param newCollectionOut Address of an CMTagCollectionRef to return the newly created tag collection.  The client is responsible for releasing the returned CMTagCollection.
+	@result OSStatus with error or noErr if successful.
+*/
+CM_EXPORT OSStatus CMTagCollectionCreateFromData(
+				CFDataRef CM_NONNULL data,
+				CFAllocatorRef CM_NULLABLE allocator,
+				CM_RETURNS_RETAINED_PARAMETER CMTagCollectionRef CM_NULLABLE * CM_NONNULL newCollectionOut) CF_SWIFT_UNAVAILABLE("Unavailable in Swift")
+				API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+#pragma mark - Serialization Dictionary Keys
+
+/*!
+	@constant kCMTagCollectionTagsArrayKey
+	@discussion CFDictionary key for a CFArray of serialized CMTag dictionaries of a CMTagCollection as used with CMTagCollectionCopyAsDictionary
+ */
+CM_EXPORT const CFStringRef kCMTagCollectionTagsArrayKey CF_SWIFT_UNAVAILABLE("Unavailable in Swift") API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+#pragma pack(pop)
+
+CM_ASSUME_NONNULL_END
+
+CF_IMPLICIT_BRIDGING_DISABLED
+
+#ifdef __cplusplus
+}
+#endif
+	
+#endif // CMTAGCOLLECTION_H
diff -ruN /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMTaggedBufferGroup.h /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMTaggedBufferGroup.h
--- /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMTaggedBufferGroup.h	1969-12-31 19:00:00
+++ /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CMTaggedBufferGroup.h	2023-05-23 23:50:12
@@ -0,0 +1,268 @@
+/*
+    File:  CMTaggedBufferGroup.h
+	
+	Framework:  CoreMedia
+ 
+	Copyright © 2023 Apple Inc. All rights reserved.
+ 
+*/
+
+#ifndef CMTAGGEDBUFFERGROUP_H
+#define CMTAGGEDBUFFERGROUP_H
+
+/*!
+	@header
+	@abstract	API for creating and manipulating CMTaggedBufferGroups.
+	@discussion	CMTaggedBufferGroups are CF objects containing zero or more buffers, each with a corresponding CMTagCollection describing the buffers.
+*/
+
+#include <CoreMedia/CMBase.h>
+#include <CoreFoundation/CoreFoundation.h>
+#include <CoreMedia/CMTag.h>
+#include <CoreMedia/CMTagCollection.h>
+#include <CoreMedia/CMSampleBuffer.h>
+#include <CoreVideo/CVPixelBuffer.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+    
+CM_ASSUME_NONNULL_BEGIN
+
+#pragma pack(push, 4)
+
+CF_IMPLICIT_BRIDGING_ENABLED
+
+#pragma mark - Errors
+
+/*!
+	@enum		CMTaggedBufferGroup Errors
+	@discussion The OSStatus errors returned from the CMTaggedBufferGroup routines.
+	@constant	kCMTaggedBufferGroupError_ParamErr Returned when caller passes incorrect input or output parameters.
+	@constant	kCMTaggedBufferGroupError_AllocationFailed Returned if a necessary allocation failed.
+	@constant	kCMTaggedBufferGroupError_InternalError Returned if some kind of internal implementation error occurred.
+*/
+typedef CF_ENUM(OSStatus, CMTaggedBufferGroupError)
+{
+	kCMTaggedBufferGroupError_ParamErr = -15780,
+	kCMTaggedBufferGroupError_AllocationFailed = -15781,
+	kCMTaggedBufferGroupError_InternalError = -15782,
+} CF_SWIFT_UNAVAILABLE("Unavailable in Swift") API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@typedef	CMTaggedBufferGroup
+	@abstract	An object gathering zero or more buffers (CMSampleBuffer, CVPixelBuffer) each with a CMTagCollection.
+*/
+typedef struct CM_BRIDGED_TYPE(id) OpaqueCMTaggedBufferGroup *CMTaggedBufferGroupRef CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+CM_EXPORT CFTypeID CMTaggedBufferGroupGetTypeID(void) CF_SWIFT_UNAVAILABLE("Unavailable in Swift") API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function   CMTaggedBufferGroupCreate
+	@abstract   Creates a new tagged buffer group.
+	@param      allocator       The CFAllocator to use for allocating this buffer group.  May be NULL.
+	@param      tagCollections  A CFArray of CMTagCollections for the buffers.
+	@param      buffers         A CFArray of buffers, each of type CMSampleBuffer or CVPixelBuffer.  The group will retain these sample buffers and pixel buffers.
+								The number of tagCollections must match the number of buffers.
+	@param      groupOut        The newly created group will be placed here.  The caller has a responsibility to call CFRelease on it.
+	@result     Returns noErr on success.
+*/
+CM_EXPORT OSStatus CMTaggedBufferGroupCreate(
+	CFAllocatorRef CM_NULLABLE allocator,
+	CFArrayRef CM_NONNULL tagCollections,
+	CFArrayRef CM_NONNULL buffers,
+	CM_RETURNS_RETAINED_PARAMETER CMTaggedBufferGroupRef CM_NULLABLE * CM_NONNULL groupOut ) CF_REFINED_FOR_SWIFT
+	API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function   CMTaggedBufferGroupCreateCombined
+	@abstract   Creates a new tagged buffer group by combining all the tagged buffer groups in an array.
+	@param      allocator       The CFAllocator to use for allocating this buffer group.  May be NULL.
+	@param      taggedBufferGroups  A CFArray of CMTaggedBufferGroups.
+	@param      groupOut        The newly created group will be placed here.  The caller has a responsibility to call CFRelease on it.
+	@result     Returns noErr on success.
+*/
+CM_EXPORT OSStatus CMTaggedBufferGroupCreateCombined(
+	CFAllocatorRef CM_NULLABLE allocator,
+	CFArrayRef CM_NONNULL taggedBufferGroups,
+	CM_RETURNS_RETAINED_PARAMETER CMTaggedBufferGroupRef CM_NULLABLE * CM_NONNULL groupOut ) CF_REFINED_FOR_SWIFT
+	API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function   CMTaggedBufferGroupGetCount
+	@abstract   Returns the number of buffers in a CMTaggedBufferGroup.
+	@param      group  The CMTaggedBufferGroupRef to retrieve the count from.
+	@result     Returns the number of buffers, or 0 on failure or if the group is empty.
+*/
+CM_EXPORT CMItemCount CMTaggedBufferGroupGetCount( CMTaggedBufferGroupRef CM_NONNULL group ) CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function   CMTaggedBufferGroupGetTagCollectionAtIndex
+	@abstract   Returns a CMTagCollection from a CMTaggedBufferGroup by sequential indexing.
+	@param      group   The CMTaggedBufferGroupRef to retrieve the tag collection from.
+	@param      index   An index from 0 to count-1.
+	@result     Returns the tag collection, or NULL on failure.
+*/
+CM_EXPORT CMTagCollectionRef CF_RETURNS_NOT_RETAINED CM_NULLABLE CMTaggedBufferGroupGetTagCollectionAtIndex( CMTaggedBufferGroupRef CM_NONNULL group, CFIndex index ) CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function   CMTaggedBufferGroupGetCVPixelBufferAtIndex
+	@abstract   Returns a CVPixelBuffer from a CMTaggedBufferGroup by sequential indexing.
+	@param      group   The CMTaggedBufferGroupRef to retrieve the CVPixelBuffer from.
+	@param      index   An index from 0 to count-1.
+	@result     Returns the CVPixelBuffer, or NULL on failure (including if the buffer at this index is not a CVPixelBuffer).
+*/
+CM_EXPORT CVPixelBufferRef CF_RETURNS_NOT_RETAINED CM_NULLABLE CMTaggedBufferGroupGetCVPixelBufferAtIndex( CMTaggedBufferGroupRef CM_NONNULL group, CFIndex index ) CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function   CMTaggedBufferGroupGetCVPixelBufferForTag
+	@abstract   Returns a CVPixelBuffer from a CMTaggedBufferGroup by looking for a unique match for the provided tag.
+	@param      group   	The CMTaggedBufferGroupRef to retrieve the CVPixelBuffer from.
+	@param      tag     	The tag to look up.  If more than one buffer's tag collection includes this tag, the lookup will fail.
+	@param		indexOut 	On success, index of the returned CVPixelBuffer.  May be NULL.
+	@result     Returns the CVPixelBuffer, or NULL on failure (including if the buffer at this index is not a CVPixelBuffer).
+*/
+CM_EXPORT CVPixelBufferRef CF_RETURNS_NOT_RETAINED CM_NULLABLE CMTaggedBufferGroupGetCVPixelBufferForTag( CMTaggedBufferGroupRef CM_NONNULL group, CMTag tag, CFIndex * CM_NULLABLE indexOut ) CF_SWIFT_UNAVAILABLE("Unavailable in Swift") API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function   CMTaggedBufferGroupGetCVPixelBufferForTagCollection
+	@abstract   Returns a CVPixelBuffer from a CMTaggedBufferGroup by looking for a unique match for the provided tag collection.
+	@param      group           The CMTaggedBufferGroupRef to retrieve the CVPixelBuffer from.
+	@param      tagCollection   The tag collection to look up.  If more than one buffer's tag collection includes this tag collection, the lookup will fail.
+	@param		indexOut 		On success, index of the returned CVPixelBuffer.  May be NULL.
+	@result     Returns the CVPixelBuffer, or NULL on failure (including if the buffer at this index is not a CVPixelBuffer).
+*/
+CM_EXPORT CVPixelBufferRef CF_RETURNS_NOT_RETAINED CM_NULLABLE CMTaggedBufferGroupGetCVPixelBufferForTagCollection( CMTaggedBufferGroupRef CM_NONNULL group, CMTagCollectionRef CM_NONNULL tagCollection, CFIndex * CM_NULLABLE indexOut ) CF_SWIFT_UNAVAILABLE("Unavailable in Swift") API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function   CMTaggedBufferGroupGetCMSampleBufferAtIndex
+	@abstract   Returns a CMSampleBuffer from a CMTaggedBufferGroup by sequential indexing.
+	@param      group   The CMTaggedBufferGroupRef to retrieve the CMSampleBuffer from.
+	@param      index   An index from 0 to count-1.
+	@result     Returns the CMSampleBuffer, or NULL on failure (including if the buffer at this index is not a CMSampleBuffer).
+*/
+CM_EXPORT CMSampleBufferRef CF_RETURNS_NOT_RETAINED CM_NULLABLE CMTaggedBufferGroupGetCMSampleBufferAtIndex( CMTaggedBufferGroupRef CM_NONNULL group, CFIndex index ) CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function   CMTaggedBufferGroupGetCMSampleBufferForTag
+	@abstract   Returns a CMSampleBuffer from a CMTaggedBufferGroup by looking for a unique match for the provided tag.
+	@param      group   	The CMTaggedBufferGroupRef to retrieve the CMSampleBuffer from.
+	@param      tag     	The tag to look up.  If more than one buffer's tag collection includes this tag, the lookup will fail.
+	@param		indexOut 	On success, index of the returned CMSampleBuffer.  May be NULL.
+	@result     Returns the CMSampleBuffer, or NULL on failure (including if the buffer at this index is not a CMSampleBuffer).
+*/
+CM_EXPORT CMSampleBufferRef CF_RETURNS_NOT_RETAINED CM_NULLABLE CMTaggedBufferGroupGetCMSampleBufferForTag( CMTaggedBufferGroupRef CM_NONNULL group, CMTag tag, CFIndex * CM_NULLABLE indexOut ) CF_SWIFT_UNAVAILABLE("Unavailable in Swift") API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function   CMTaggedBufferGroupGetCMSampleBufferForTagCollection
+	@abstract   Returns a CMSampleBuffer from a CMTaggedBufferGroup by looking for a unique match for the provided tag collection.
+	@param      group           The CMTaggedBufferGroupRef to retrieve the CMSampleBuffer from.
+	@param      tagCollection   The tag collection to look up.  If more than one buffer's tag collection includes this tag collection, the lookup will fail.
+	@param		indexOut 		On success, index of the returned CMSampleBuffer.  May be NULL.
+	@result     Returns the CMSampleBuffer, or NULL on failure (including if the buffer at this index is not a CMSampleBuffer).
+*/
+CM_EXPORT CMSampleBufferRef CF_RETURNS_NOT_RETAINED CM_NULLABLE CMTaggedBufferGroupGetCMSampleBufferForTagCollection( CMTaggedBufferGroupRef CM_NONNULL group, CMTagCollectionRef CM_NONNULL tagCollection, CFIndex * CM_NULLABLE indexOut ) CF_SWIFT_UNAVAILABLE("Unavailable in Swift") API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function   CMTaggedBufferGroupGetNumberOfMatchesForTagCollection
+	@abstract   Returns the number of matches that a tag collection has in a CMTaggedBufferGroup.
+	@discussion If the returned count is less than or greater than 1, buffer lookups using this tag collection will fail and return NULL, since the lookups must be unique and unambiguous.
+	@param      group           The CMTaggedBufferGroupRef to examine.
+	@param      tagCollection   The tag collection to look up.
+	@result     Returns the number of entries in the CMTaggedBufferGroup that match tagCollection.
+*/
+CM_EXPORT CMItemCount CMTaggedBufferGroupGetNumberOfMatchesForTagCollection( CMTaggedBufferGroupRef CM_NONNULL group, CMTagCollectionRef CM_NONNULL tagCollection ) CF_SWIFT_UNAVAILABLE("Unavailable in Swift") API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+#pragma mark Carriage in CMSampleBuffer
+
+/*!
+	@function	CMTaggedBufferGroupFormatDescriptionCreateForTaggedBufferGroup
+	@abstract	Creates a format description for a CMTaggedBufferGroup.
+ 	@param	allocator
+		CFAllocator to be used when creating the CMFormatDescription. Pass kCFAllocatorDefault to use the default allocator.
+ 	@param	taggedBufferGroup
+		The tagged buffer group for which we are creating the format description.
+ 	@param	formatDescriptionOut
+		Returned newly-created tagged buffer group CMFormatDescription
+	@discussion
+		The returned CMTaggedBufferGroupFormatDescription could be used to create a CMSampleBuffer
+		wrapping the CMTaggedBufferGroup using CMSampleBufferCreateForTaggedBufferGroup.
+		If you are going to call CMSampleBufferCreateForTaggedBufferGroup on a series of matching
+		CMTaggedBufferGroups, it is more efficient to create the CMTaggedBufferGroupFormatDescription
+		once and use it for all of the CMSampleBuffers.
+		The caller owns the returned CMFormatDescription, and must release it when done with it.
+*/
+CM_EXPORT
+OSStatus CMTaggedBufferGroupFormatDescriptionCreateForTaggedBufferGroup(
+	CFAllocatorRef CM_NULLABLE allocator,
+	CMTaggedBufferGroupRef CM_NONNULL taggedBufferGroup,
+	CM_RETURNS_RETAINED_PARAMETER CMTaggedBufferGroupFormatDescriptionRef CM_NULLABLE * CM_NONNULL formatDescriptionOut) CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function	CMTaggedBufferGroupFormatDescriptionMatchesTaggedBufferGroup
+	@abstract	Checks to see if a given format description matches a tagged buffer group.
+  	@param	desc
+		The format description to validate.
+  	@param	taggedBufferGroup
+		The tagged buffer group to validate against.
+	@discussion	
+		Returns true if the CMTaggedBufferGroupFormatDescription could be used to create a 
+		CMSampleBuffer wrapping the CMTaggedBufferGroup using CMSampleBufferCreateForTaggedBufferGroup.
+*/
+CM_EXPORT
+Boolean CMTaggedBufferGroupFormatDescriptionMatchesTaggedBufferGroup(
+	CMTaggedBufferGroupFormatDescriptionRef CM_NONNULL desc,
+	CMTaggedBufferGroupRef CM_NONNULL taggedBufferGroup) CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function    CMSampleBufferCreateForTaggedBufferGroup
+	@abstract    Creates a new CMSampleBuffer object with the specified CMTaggedBufferGroup.
+	@param	allocator
+		CFAllocator with which to create the CMSampleBuffer object. Pass kCFAllocatorDefault to use the default allocator.
+	@param	taggedBufferGroup
+		The CMTaggedBufferGroup to be stored in the sample buffer. The CMSampleBuffer will retain the CMTaggedBufferGroup internally.
+	@param	sbufPTS
+		Media time PTS of the sample buffer.
+	@param	sbufDuration
+		Media time duration of the sample buffer. Can be kCMTimeInvalid if not known or not defined.
+	@param	formatDescription
+		A CMTaggedBufferGroupFormatDescription describing the CMTaggedBufferGroup.  
+		You may create this with CMTaggedBufferGroupFormatDescriptionCreateForTaggedBufferGroup.
+		If you are creating a lot of CMSampleBuffers containing matching CMTaggedBufferGroups, 
+		it is more efficient to create the CMTaggedBufferGroupFormatDescription once and use it 
+		for all of the CMSampleBuffers.  
+		You may call CMTaggedBufferGroupFormatDescriptionMatchesTaggedBufferGroup to confirm that
+		a reused CMTaggedBufferGroupFormatDescription matches a new CMTaggedBufferGroup.
+	@param	sBufOut
+		Returned newly created CMSampleBuffer.
+	@result	OSStatus with error or noErr if successful.
+ */
+CM_EXPORT OSStatus CMSampleBufferCreateForTaggedBufferGroup(
+	CFAllocatorRef CM_NULLABLE allocator,
+	CMTaggedBufferGroupRef CM_NONNULL taggedBufferGroup,
+	CMTime sbufPTS,
+	CMTime sbufDuration,
+	CMTaggedBufferGroupFormatDescriptionRef CM_NONNULL formatDescription,
+	CM_RETURNS_RETAINED_PARAMETER CMSampleBufferRef CM_NULLABLE * CM_NONNULL sBufOut)
+	CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+/*!
+	@function    CMSampleBufferGetTaggedBufferGroup
+	@abstract    Returns a CMSampleBuffer's TaggedBufferGroup of media data.
+	@param sbuf    CMSampleBuffer being interrogated.
+	@discussion  The caller does not own the returned CMTaggedBufferGroup, and must retain it explicitly if the caller needs to maintain a reference to it.
+	@result      CMTaggedBufferGroup of media data. The result will be NULL if the CMSampleBuffer does not contain a CMTaggedBufferGroup, or if there is some other error.
+ */
+CM_EXPORT CMTaggedBufferGroupRef CM_NULLABLE CMSampleBufferGetTaggedBufferGroup(CMSampleBufferRef CM_NONNULL sbuf) CF_REFINED_FOR_SWIFT API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0));
+
+CF_IMPLICIT_BRIDGING_DISABLED
+
+#pragma pack(pop)
+    
+CM_ASSUME_NONNULL_END
+
+#ifdef __cplusplus
+}
+#endif
+	
+#endif // CMTAGGEDBUFFERGROUP_H
diff -ruN /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CoreMedia.apinotes /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CoreMedia.apinotes
--- /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CoreMedia.apinotes	2023-03-07 23:39:44
+++ /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CoreMedia.apinotes	2023-05-26 21:27:46
@@ -83,6 +83,8 @@
   SwiftName: "CMBufferQueueDequeueIfDataReady(_:)"
 - Name: CMBufferQueueGetHead
   SwiftName: "CMBufferQueueGetHead(_:)"
+- Name: CMBufferQueueCopyHead
+  SwiftName: "CMBufferQueueCopyHead(_:)"
 - Name: CMBufferQueueIsEmpty
   SwiftName: "CMBufferQueueIsEmpty(_:)"
 - Name: CMBufferQueueMarkEndOfData
@@ -706,6 +708,8 @@
     SwiftName: "CMBufferQueueDequeueIfDataReadyAndRetain(_:)"
   - Name: CMBufferQueueGetHead
     SwiftName: "CMBufferQueueGetHead(_:)"
+  - Name: CMBufferQueueCopyHead
+    SwiftName: "CMBufferQueueCopyHead(_:)"
   - Name: CMBufferQueueIsEmpty
     SwiftName: "CMBufferQueueIsEmpty(_:)"
   - Name: CMBufferQueueMarkEndOfData
diff -ruN /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CoreMedia.h /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CoreMedia.h
--- /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CoreMedia.h	2023-03-07 23:42:29
+++ /Applications/Xcode_15.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CoreMedia.framework/Headers/CoreMedia.h	2023-05-27 21:04:25
@@ -18,6 +18,9 @@
 #include <CoreMedia/CMBufferQueue.h>
 #include <CoreMedia/CMBlockBuffer.h>
 #include <CoreMedia/CMSampleBuffer.h>
+#include <CoreMedia/CMTag.h>
+#include <CoreMedia/CMTagCollection.h>
+#include <CoreMedia/CMTaggedBufferGroup.h>
 #include <CoreMedia/CMSimpleQueue.h>
 #include <CoreMedia/CMMemoryPool.h>
 #include <CoreMedia/CMSync.h>
@@ -26,6 +29,4 @@
 #if ! TARGET_OS_WINDOWS
 #include <CoreMedia/CMAudioClock.h>
 #endif
-#if ! TARGET_OS_IPHONE
 #include <CoreMedia/CMAudioDeviceClock.h>
-#endif
Clone this wiki locally