feat: New Core/ library (#1975)
				
					
				
			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
			
			
This commit is contained in:
		
							
								
								
									
										40
									
								
								package/ios/Core/CameraQueues.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								package/ios/Core/CameraQueues.swift
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | ||||
| // | ||||
| //  CameraQueues.swift | ||||
| //  VisionCamera | ||||
| // | ||||
| //  Created by Marc Rousavy on 22.03.21. | ||||
| //  Copyright © 2021 mrousavy. All rights reserved. | ||||
| // | ||||
|  | ||||
| import Foundation | ||||
|  | ||||
| @objc | ||||
| public class CameraQueues: NSObject { | ||||
|   /// The serial execution queue for camera configuration and setup. | ||||
|   @objc public static let cameraQueue = DispatchQueue(label: "mrousavy/VisionCamera.main", | ||||
|                                                       qos: .userInteractive, | ||||
|                                                       attributes: [], | ||||
|                                                       autoreleaseFrequency: .inherit, | ||||
|                                                       target: nil) | ||||
|  | ||||
|   /// The serial execution queue for output processing of videos for recording or synchronous frame processing. | ||||
|   @objc public static let videoQueue = DispatchQueue(label: "mrousavy/VisionCamera.video", | ||||
|                                                      qos: .userInteractive, | ||||
|                                                      attributes: [], | ||||
|                                                      autoreleaseFrequency: .inherit, | ||||
|                                                      target: nil) | ||||
|  | ||||
|   /// The serial execution queue for output processing of QR/barcodes. | ||||
|   @objc public static let codeScannerQueue = DispatchQueue(label: "mrousavy/VisionCamera.codeScanner", | ||||
|                                                            qos: .userInteractive, | ||||
|                                                            attributes: [], | ||||
|                                                            autoreleaseFrequency: .inherit, | ||||
|                                                            target: nil) | ||||
|  | ||||
|   /// The serial execution queue for output processing of audio buffers. | ||||
|   @objc public static let audioQueue = DispatchQueue(label: "mrousavy/VisionCamera.audio", | ||||
|                                                      qos: .userInteractive, | ||||
|                                                      attributes: [], | ||||
|                                                      autoreleaseFrequency: .inherit, | ||||
|                                                      target: nil) | ||||
| } | ||||
		Reference in New Issue
	
	Block a user