Moves everything Camera related into `core/` / `Core/` so that it is better encapsulated from React Native.
Benefits:
1. Code is much better organized. Should be easier for collaborators now, and cleaner codebase for me.
2. Locking is fully atomically as you can now only configure the session through a lock/Mutex which is batch-overridable
    * On iOS, this makes Camera startup time **MUCH** faster, I measured speedups from **1.5 seconds** to only **240 milliseconds** since we only lock/commit once! 🚀 
    * On Android, this fixes a few out-of-sync/concurrency issues like "Capture Request contains unconfigured Input/Output Surface!" since it is now a single lock-operation! 💪 
3. It is easier to integrate VisionCamera outside of React Native (e.g. Native iOS Apps, NativeScript, Flutter, etc)
With this PR, VisionCamera V3 is up to **7x** faster than V2
		
	
		
			
				
	
	
		
			27 lines
		
	
	
		
			677 B
		
	
	
	
		
			Swift
		
	
	
	
	
	
			
		
		
	
	
			27 lines
		
	
	
		
			677 B
		
	
	
	
		
			Swift
		
	
	
	
	
	
//
 | 
						|
//  AVCaptureVideoDataOutput+pixelFormat.swift
 | 
						|
//  VisionCamera
 | 
						|
//
 | 
						|
//  Created by Marc Rousavy on 12.10.23.
 | 
						|
//  Copyright © 2023 mrousavy. All rights reserved.
 | 
						|
//
 | 
						|
 | 
						|
import AVFoundation
 | 
						|
import Foundation
 | 
						|
 | 
						|
extension AVCaptureVideoDataOutput {
 | 
						|
  /**
 | 
						|
   Gets or sets the PixelFormat this output streams in.
 | 
						|
   By default, the first item in `availableVideoPixelFormatTypes` is chosen.
 | 
						|
   */
 | 
						|
  var pixelFormat: OSType {
 | 
						|
    get {
 | 
						|
      let current = videoSettings[String(kCVPixelBufferPixelFormatTypeKey)] as? OSType
 | 
						|
      return current ?? availableVideoPixelFormatTypes.first!
 | 
						|
    }
 | 
						|
    set {
 | 
						|
      videoSettings[String(kCVPixelBufferPixelFormatTypeKey)] = newValue
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 |