I'm trying to use the AVFoundation to read barcodes with the below code, but I keep getting the error below. Help as to why would be much appreciated. Thanks in advance!
//Create camera view
session = AVCaptureSession()
var layer = self.cameraView.layer
vidLayer = AVCaptureVideoPreviewLayer.layerWithSession(session) as AVCaptureVideoPreviewLayer
vidLayer.frame = self.cameraView.bounds
vidLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
var device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
var error:NSError? = nil
var input:AVCaptureDeviceInput? = AVCaptureDeviceInput.deviceInputWithDevice(device, error: &error) as? AVCaptureDeviceInput
var output = AVCaptureMetadataOutput();
session.addOutput(output)
output.setMetadataObjectsDelegate(self, queue: dispatch_get_main_queue())
output.metadataObjectTypes = [AVMetadataObjectTypeUPCECode, AVMetadataObjectTypeCode39Code, AVMetadataObjectTypeCode39Mod43Code, AVMetadataObjectTypeCode93Code, AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode128Code, AVMetadataObjectTypePDF417Code, AVMetadataObjectTypeQRCode, AVMetadataObjectTypeAztecCode]
if(input != nil){
println("ADDED")
session.addInput(input)
}
layer.addSublayer(vidLayer)
session.startRunning()
2014-10-07 15:25:09.279 WegmannMobile[457:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[AVCaptureMetadataOutput setMetadataObjectTypes:] - unsupported type found. Use -availableMetadataObjectTypes.'
*** First throw call stack:
(0x2d7edf83 0x38068ccf 0x2c72bc29 0x618f0 0x62060 0x300256df 0x3019b43f 0x300b8d63 0x300b8b6d 0x300b8b05 0x3000ad59 0x2fc8862b 0x2fc83e3b 0x2fc83ccd 0x2fc836df 0x2fc834ef 0x2fc7d21d 0x2d7b9255 0x2d7b6bf9 0x2d7b6f3b 0x2d721ebf 0x2d721ca3 0x3267b663 0x3006e14d 0x9eff4 0x9f030 0x38575ab7)
libc++abi.dylib: terminating with uncaught exception of type NSException
Try adding both the input and output to the session before setting the metadata object types.
When you don't have the camera attached to the session yet, availableMetadataObjectTypes will be empty.
This is one of those rare cases where the error message is very useful.
Call [output availableMetadataObjectTypes]
and make sure what you're trying to set is in there. If not, then don't try to set that value.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With