I'm currently working with AVCaptureSession
and AVCaptureMetadataOutput
.
It works perfectly, but I just want to know how to indicate to scan and analyze metadata objects only on a specific region of the AVCaptureVideoPreviewLayer
?
Here is a sample of code from a project I have that may help you on the right track
// where 'self.session' is previously setup AVCaptureSession
// setup metadata capture
AVCaptureMetadataOutput *metadataOutput = [[AVCaptureMetadataOutput alloc] init];
[self.session addOutput:metadataOutput];
[metadataOutput setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
[metadataOutput setMetadataObjectTypes:@[AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeEAN13Code]];
// setup preview layer
AVCaptureVideoPreviewLayer *previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.session];
previewLayer.frame = self.previewView.bounds;
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
// we only want the visible area of the previewLayer to accept
// barcode input (ignore the rest)
// we need to convert rects coordinate system
CGRect visibleMetadataOutputRect = [previewLayer metadataOutputRectOfInterestForRect:previewLayer.bounds];
metadataOutput.rectOfInterest = visibleMetadataOutputRect;
// add the previewLayer as a sublayer of the displaying UIView
[self.previewView.layer addSublayer:previewLayer];