Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AVFoundation Metadata Object Types

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
like image 886
steventnorris Avatar asked Oct 07 '14 20:10

steventnorris


2 Answers

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.

like image 140
Etan Avatar answered Nov 15 '22 21:11

Etan


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.

like image 43
picciano Avatar answered Nov 15 '22 22:11

picciano