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:
		| @@ -10,6 +10,8 @@ import AVFoundation | ||||
|  | ||||
| extension AVCaptureDevice { | ||||
|   func toDictionary() -> [String: Any] { | ||||
|     let formats = formats.map { CameraDeviceFormat(fromFormat: $0) } | ||||
|  | ||||
|     return [ | ||||
|       "id": uniqueID, | ||||
|       "physicalDevices": physicalDevices.map(\.deviceType.physicalDeviceDescriptor), | ||||
| @@ -25,10 +27,8 @@ extension AVCaptureDevice { | ||||
|       "supportsLowLightBoost": isLowLightBoostSupported, | ||||
|       "supportsFocus": isFocusPointOfInterestSupported, | ||||
|       "hardwareLevel": "full", | ||||
|       "sensorOrientation": "portrait", // TODO: Sensor Orientation? | ||||
|       "formats": formats.map { format -> [String: Any] in | ||||
|         format.toDictionary() | ||||
|       }, | ||||
|       "sensorOrientation": Orientation.landscapeLeft.jsValue, | ||||
|       "formats": formats.map { $0.toJSValue() }, | ||||
|     ] | ||||
|   } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user