diff --git a/LBXScan/LBXZXing/LBXZXCapture.m b/LBXScan/LBXZXing/LBXZXCapture.m index 3da89eb..18a0b10 100755 --- a/LBXScan/LBXZXing/LBXZXCapture.m +++ b/LBXScan/LBXZXing/LBXZXCapture.m @@ -224,12 +224,14 @@ - (int)front { } - (BOOL)hasFront { - NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]; + AVCaptureDeviceDiscoverySession *session = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:@[AVCaptureDeviceTypeBuiltInWideAngleCamera] mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionFront]; + NSArray *devices = session.devices; return [devices count] > 1; } - (BOOL)hasBack { - NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]; + AVCaptureDeviceDiscoverySession *session = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:@[AVCaptureDeviceTypeBuiltInWideAngleCamera] mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionBack]; + NSArray *devices = session.devices; return [devices count] > 0; } @@ -553,9 +555,14 @@ - (AVCaptureDevice *)device { } AVCaptureDevice *zxd = nil; - - NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]; - + NSArray *devices = nil; + if (@available(iOS 13.0, *)) { + AVCaptureDeviceDiscoverySession *session = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:@[AVCaptureDeviceTypeBuiltInUltraWideCamera, AVCaptureDeviceTypeBuiltInWideAngleCamera] mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionUnspecified]; + devices = session.devices; + } else { + AVCaptureDeviceDiscoverySession *session = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:@[AVCaptureDeviceTypeBuiltInWideAngleCamera] mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionUnspecified]; + devices = session.devices; + } if ([devices count] > 0) { if (self.captureDeviceIndex == -1) { AVCaptureDevicePosition position = AVCaptureDevicePositionBack; @@ -565,7 +572,7 @@ - (AVCaptureDevice *)device { for (unsigned int i = 0; i < [devices count]; ++i) { AVCaptureDevice *dev = [devices objectAtIndex:i]; - if (dev.position == position) { + if (dev.position == position && [dev isFocusModeSupported:AVCaptureFocusModeContinuousAutoFocus]) { self.captureDeviceIndex = i; zxd = dev; break; @@ -577,7 +584,6 @@ - (AVCaptureDevice *)device { zxd = [devices objectAtIndex:self.captureDeviceIndex]; } } - if (!zxd) { zxd = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; } diff --git a/LBXScan/LBXZXing/ZXingWrapper.m b/LBXScan/LBXZXing/ZXingWrapper.m index 5c4742d..254fd18 100644 --- a/LBXScan/LBXZXing/ZXingWrapper.m +++ b/LBXScan/LBXZXing/ZXingWrapper.m @@ -126,6 +126,19 @@ - (void)setOrientation:(NSInteger)orientation AVCaptureVideoPreviewLayer * preview = (AVCaptureVideoPreviewLayer*)self.capture.layer; preview.connection.videoOrientation = self.orientation; + + switch (self.orientation) { + case AVCaptureVideoOrientationPortrait: + case AVCaptureVideoOrientationPortraitUpsideDown: + self.capture.rotation = 90.0f; + break; + case AVCaptureVideoOrientationLandscapeLeft: + case AVCaptureVideoOrientationLandscapeRight: + self.capture.rotation = 0.0f; + break; + default: + break; + } } - (void)setVideoLayerframe:(CGRect)videoLayerframe