chore: Move everything into package/ (#1745)
				
					
				
			* Move everything into package * Remove .DS_Store * Move scripts and eslintrc to package * Create CODE_OF_CONDUCT.md * fix some links * Update all links (I think) * Update generated docs * Update notice-yarn-changes.yml * Update validate-android.yml * Update validate-cpp.yml * Delete notice-yarn-changes.yml * Update validate-cpp.yml * Update validate-cpp.yml * Update validate-js.yml * Update validate-cpp.yml * Update validate-cpp.yml * wrong c++ style * Revert "wrong c++ style" This reverts commit 55a3575589c6f13f8b05134d83384f55e0601ab2.
This commit is contained in:
		
							
								
								
									
										87
									
								
								package/ios/CameraView+TakePhoto.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								package/ios/CameraView+TakePhoto.swift
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,87 @@ | ||||
| // | ||||
| //  CameraView+TakePhoto.swift | ||||
| //  mrousavy | ||||
| // | ||||
| //  Created by Marc Rousavy on 16.12.20. | ||||
| //  Copyright © 2020 mrousavy. All rights reserved. | ||||
| // | ||||
|  | ||||
| import AVFoundation | ||||
|  | ||||
| extension CameraView { | ||||
|   func takePhoto(options: NSDictionary, promise: Promise) { | ||||
|     CameraQueues.cameraQueue.async { | ||||
|       guard let photoOutput = self.photoOutput, | ||||
|             let videoDeviceInput = self.videoDeviceInput else { | ||||
|         if self.photo?.boolValue == true { | ||||
|           promise.reject(error: .session(.cameraNotReady)) | ||||
|           return | ||||
|         } else { | ||||
|           promise.reject(error: .capture(.photoNotEnabled)) | ||||
|           return | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       ReactLogger.log(level: .info, message: "Capturing photo...") | ||||
|  | ||||
|       // Create photo settings | ||||
|       let photoSettings = AVCapturePhotoSettings() | ||||
|  | ||||
|       // default, overridable settings if high quality capture was enabled | ||||
|       if self.enableHighQualityPhotos?.boolValue == true { | ||||
|         // TODO: On iOS 16+ this will be removed in favor of maxPhotoDimensions. | ||||
|         photoSettings.isHighResolutionPhotoEnabled = true | ||||
|         if #available(iOS 13.0, *) { | ||||
|           photoSettings.photoQualityPrioritization = .quality | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       // flash | ||||
|       if videoDeviceInput.device.isFlashAvailable, let flash = options["flash"] as? String { | ||||
|         guard let flashMode = AVCaptureDevice.FlashMode(withString: flash) else { | ||||
|           promise.reject(error: .parameter(.invalid(unionName: "FlashMode", receivedValue: flash))) | ||||
|           return | ||||
|         } | ||||
|         photoSettings.flashMode = flashMode | ||||
|       } | ||||
|  | ||||
|       // shutter sound | ||||
|       let enableShutterSound = options["enableShutterSound"] as? Bool ?? true | ||||
|  | ||||
|       // depth data | ||||
|       photoSettings.isDepthDataDeliveryEnabled = photoOutput.isDepthDataDeliveryEnabled | ||||
|       if #available(iOS 12.0, *) { | ||||
|         photoSettings.isPortraitEffectsMatteDeliveryEnabled = photoOutput.isPortraitEffectsMatteDeliveryEnabled | ||||
|       } | ||||
|  | ||||
|       // quality prioritization | ||||
|       if #available(iOS 13.0, *), let qualityPrioritization = options["qualityPrioritization"] as? String { | ||||
|         guard let photoQualityPrioritization = AVCapturePhotoOutput.QualityPrioritization(withString: qualityPrioritization) else { | ||||
|           promise.reject(error: .parameter(.invalid(unionName: "QualityPrioritization", receivedValue: qualityPrioritization))) | ||||
|           return | ||||
|         } | ||||
|         photoSettings.photoQualityPrioritization = photoQualityPrioritization | ||||
|       } | ||||
|  | ||||
|       // red-eye reduction | ||||
|       if #available(iOS 12.0, *), let autoRedEyeReduction = options["enableAutoRedEyeReduction"] as? Bool { | ||||
|         photoSettings.isAutoRedEyeReductionEnabled = autoRedEyeReduction | ||||
|       } | ||||
|  | ||||
|       // stabilization | ||||
|       if let enableAutoStabilization = options["enableAutoStabilization"] as? Bool { | ||||
|         photoSettings.isAutoStillImageStabilizationEnabled = enableAutoStabilization | ||||
|       } | ||||
|  | ||||
|       // distortion correction | ||||
|       if #available(iOS 14.1, *), let enableAutoDistortionCorrection = options["enableAutoDistortionCorrection"] as? Bool { | ||||
|         photoSettings.isAutoContentAwareDistortionCorrectionEnabled = enableAutoDistortionCorrection | ||||
|       } | ||||
|  | ||||
|       photoOutput.capturePhoto(with: photoSettings, delegate: PhotoCaptureDelegate(promise: promise, enableShutterSound: enableShutterSound)) | ||||
|  | ||||
|       // Assume that `takePhoto` is always called with the same parameters, so prepare the next call too. | ||||
|       photoOutput.setPreparedPhotoSettingsArray([photoSettings], completionHandler: nil) | ||||
|     } | ||||
|   } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user