Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions example/ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,7 @@ PODS:
- React-jsinspector (0.68.0)
- React-logger (0.68.0):
- glog
- react-native-idscan-sdk (0.5.1):
- react-native-idscan-sdk (0.7.0):
- React-Core
- React-perflogger (0.68.0)
- React-RCTActionSheet (0.68.0):
Expand Down Expand Up @@ -413,7 +413,7 @@ SPEC CHECKSUMS:
React-jsiexecutor: 010a66edf644339f6da72b34208b070089680415
React-jsinspector: 90f0bfd5d04e0b066c29216a110ffb9a6c34f23f
React-logger: 8474fefa09d05f573a13c044cb0dfd751d4e52e3
react-native-idscan-sdk: 10fcca037729c3c1f0213010599ceff6754a57d7
react-native-idscan-sdk: 51842760e288b24c1cc209994eeaf75ce7132363
React-perflogger: 15cb741d6c2379f4d3fc8f9e4d4e1110ef3020cb
React-RCTActionSheet: ea9099db0597bd769430db1e2d011fd5fdb7fc5e
React-RCTAnimation: 252df4749866f2654f37612f839522cac91c1165
Expand All @@ -430,4 +430,4 @@ SPEC CHECKSUMS:

PODFILE CHECKSUM: ab59e48bef4677d9d279df353a73581b0f9df2cd

COCOAPODS: 1.11.3
COCOAPODS: 1.12.0
58 changes: 57 additions & 1 deletion ios/ScannerViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -382,7 +382,12 @@ - (void)dealloc {

- (void) startScanning {
self.state = LAUNCHING_CAMERA;
[self.captureSession startRunning];

dispatch_async(dispatch_get_main_queue(), ^(void) {
[self.captureSession startRunning];
[self setRecommendedZoomFactor];
});

self.prevLayer.hidden = NO;
self.state = CAMERA;
}
Expand Down Expand Up @@ -413,6 +418,57 @@ - (void) deinitCapture {
}
}

- (void) setRecommendedZoomFactor {
if (@available(iOS 15.0, *)) {
NSInteger deviceMinimumFocusDistance = [self.device minimumFocusDistance];

if (deviceMinimumFocusDistance == -1) {
return;
}

CMVideoDimensions formatDimensions = CMVideoFormatDescriptionGetDimensions([self.device.activeFormat formatDescription]);
float rectOfInterestWidth = formatDimensions.height / formatDimensions.width;

float deviceFieldOfView = [self.device.activeFormat videoFieldOfView];
float minimumSubjectDistanceForCode = [self minimumSubjectDistanceForCode:deviceFieldOfView minimumCodeSize:20 previewFillPercentage:rectOfInterestWidth];

if (minimumSubjectDistanceForCode < deviceMinimumFocusDistance) {
float zoomFactor = deviceMinimumFocusDistance / minimumSubjectDistanceForCode;

@try {
NSError *error;
if ([self.device lockForConfiguration:&error]) {
self.device.videoZoomFactor = zoomFactor;

[self.device unlockForConfiguration];
}
}
@catch (id exceptionError) {
NSLog(@"Could not lock for configuration");
}
}
}
}

- (float) minimumSubjectDistanceForCode:(float)fieldOfView
minimumCodeSize:(float)minimumCodeSize
previewFillPercentage:(float)previewFillPercentage
{
/*
Given the camera horizontal field of view, we can compute the distance (mm) to make a code
of minimumCodeSize (mm) fill the previewFillPercentage.
*/
float fieldOfViewDivided = fieldOfView / 2;
float radians = [self degreesToRadians: fieldOfViewDivided];
float filledCodeSize = minimumCodeSize / previewFillPercentage;

return filledCodeSize / tan(radians);
}

- (float) degreesToRadians:(float)degrees
{
return degrees * M_PI / 180;
}

- (void)decodeResultNotification: (NSNotification *)notification {

Expand Down