Commit 050ac990 authored by Tanisha Mandre's avatar Tanisha Mandre Committed by Commit Bot

Fix 'Use Camera' button crash.

-Normalise the 'region of interest' rectangle to make it usable by the Vision request.
- Retrieve the rect from the Preview Overlay View to ensure it is only being received from view related files and doesn't need the camera connection to be setup.

Bug:1005216

Change-Id: I2d66fe77dee961ee44387bd42aea7df72f1cf48d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1810531
Commit-Queue: Tanisha Mandre <tanishamandre@google.com>
Reviewed-by: default avatarGauthier Ambard <gambard@chromium.org>
Reviewed-by: default avatarJavier Ernesto Flores Robles <javierrobles@chromium.org>
Cr-Commit-Position: refs/heads/master@{#698452}
parent e97fcf11
......@@ -65,6 +65,9 @@
// Rounds the parameters of the preview layer's transform.
- (void)finishPreviewRotation;
// Returns the normalised rectangle of interest required for the Vision request.
- (CGRect)viewportRegionOfInterest;
// Returns the rectangle in camera coordinates in which items should be
// recognized.
- (CGRect)viewportRectOfInterest;
......
......@@ -148,6 +148,10 @@ const CGFloat kFlashDuration = 0.5;
[_previewView setTransform:rotation];
}
- (CGRect)viewportRegionOfInterest {
return [_previewView viewportRegionOfInterest];
}
- (CGRect)viewportRectOfInterest {
return [_previewView viewportRectOfInterest];
}
......
......@@ -23,6 +23,9 @@
// Returns the VideoPreviewView's layer cast to AVCaptureVideoPreviewLayer.
- (AVCaptureVideoPreviewLayer*)previewLayer;
// Returns the normalised rectangle of interest required for the Vision request.
- (CGRect)viewportRegionOfInterest;
// Returns the rectangle in camera coordinates in which codes should be
// recognized.
- (CGRect)viewportRectOfInterest;
......
......@@ -38,6 +38,19 @@
return base::mac::ObjCCastStrict<AVCaptureVideoPreviewLayer>([self layer]);
}
- (CGRect)viewportRegionOfInterest {
CGRect rect = CGRectMakeCenteredRectInFrame(self.frame.size, _viewportSize);
CGFloat x = rect.origin.x / self.frame.size.width;
CGFloat y = rect.origin.y / self.frame.size.height;
CGFloat width = rect.size.width / self.frame.size.width;
CGFloat height = rect.size.height / self.frame.size.height;
// Vision region of interest measures the frame size from the lower left
// corner so reverse x & y, reverse width & height.
return CGRectMake(y, x, height, width);
}
- (CGRect)viewportRectOfInterest {
DCHECK(CGPointEqualToPoint(self.frame.origin, CGPointZero));
CGRect viewportRect =
......
......@@ -77,7 +77,7 @@ NSString* const kCreditCardScannerViewID = @"kCreditCardScannerViewID";
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
self.creditCardViewport = [self.scannerView viewportRectOfInterest];
self.creditCardViewport = [self.scannerView viewportRegionOfInterest];
}
#pragma mark - ScannerViewController
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment