* feat: CodeScanner JS API * feat: iOS * Use guard * Format * feat: Android base * fix: Attach Surfaces * Use isBusy var * fix: Use separate Queue * feat: Finish iOS types * feat: Implement all other code types on Android * fix: Call JS event * fix: Pass codetypes on Android * fix: iOS use Preview coordinate system * docs: Add comments * chore: Format code * Update CameraView+AVCaptureSession.swift * docs: Add Code Scanner docs * docs: Update * feat: Use lazily downloaded model on Android * Revert changes in CameraPage * Format * fix: Fix empty QR codes * Update README.md
		
			
				
	
	
		
			46 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
//
 | 
						|
//  CameraView+CodeScanner.swift
 | 
						|
//  VisionCamera
 | 
						|
//
 | 
						|
//  Created by Marc Rousavy on 03.10.23.
 | 
						|
//  Copyright © 2023 mrousavy. All rights reserved.
 | 
						|
//
 | 
						|
 | 
						|
import AVFoundation
 | 
						|
import Foundation
 | 
						|
 | 
						|
extension CameraView: AVCaptureMetadataOutputObjectsDelegate {
 | 
						|
  public func metadataOutput(_: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from _: AVCaptureConnection) {
 | 
						|
    guard let onCodeScanned = onCodeScanned else {
 | 
						|
      return
 | 
						|
    }
 | 
						|
    guard !metadataObjects.isEmpty else {
 | 
						|
      return
 | 
						|
    }
 | 
						|
 | 
						|
    // Map codes to JS values
 | 
						|
    let codes = metadataObjects.map { object in
 | 
						|
      var value: String?
 | 
						|
      if let code = object as? AVMetadataMachineReadableCodeObject {
 | 
						|
        value = code.stringValue
 | 
						|
      }
 | 
						|
      let frame = previewView.layerRectConverted(fromMetadataOutputRect: object.bounds)
 | 
						|
 | 
						|
      return [
 | 
						|
        "type": object.type.descriptor,
 | 
						|
        "value": value as Any,
 | 
						|
        "frame": [
 | 
						|
          "x": frame.origin.x,
 | 
						|
          "y": frame.origin.y,
 | 
						|
          "width": frame.size.width,
 | 
						|
          "height": frame.size.height,
 | 
						|
        ],
 | 
						|
      ]
 | 
						|
    }
 | 
						|
    // Call JS event
 | 
						|
    onCodeScanned([
 | 
						|
      "codes": codes,
 | 
						|
    ])
 | 
						|
  }
 | 
						|
}
 |