3

In my code, Xcode say AVCaptureStillImageOutput is deprecated but I don't know how to change by AVCapturePhotoOutput.

I know that the var output is the problem and the one who I had to replace.

Thanks for your help.

class CameraView: UIViewController,UIImagePickerControllerDelegate{    
var session: AVCaptureSession?
    var input: AVCaptureDeviceInput?
    var output: AVCaptureStillImageOutput?
    var previewLayer: AVCaptureVideoPreviewLayer?
    override func viewDidLoad() {
        super.viewDidLoad()
        //Initialize session an output variables this is necessary

        session = AVCaptureSession()
        session?.sessionPreset = AVCaptureSession.Preset.photo;
        output = AVCaptureStillImageOutput()
        let camera = getDevice(position: .back)
        do {
            input = try AVCaptureDeviceInput(device: camera!)
        } catch let error as NSError {
            print(error)
            input = nil
        }
        if(session?.canAddInput(input!) == true){
            session?.addInput(input!)
            output?.outputSettings = [AVVideoCodecKey : AVVideoCodecType.jpeg]
            if(session?.canAddOutput(output!) == true){
                session?.addOutput(output!)
                previewLayer = AVCaptureVideoPreviewLayer(session: session!)
                previewLayer?.connection?.videoOrientation = AVCaptureVideoOrientation.portrait
                previewLayer?.frame = self.view.bounds
                previewLayer?.videoGravity = AVLayerVideoGravity.resizeAspectFill;
                cameraView.layer.addSublayer(previewLayer!)
                session?.startRunning()
            }
        }

        //Select library photo

    }

    //Get the device (Front or Back)
    func getDevice(position: AVCaptureDevice.Position) -> AVCaptureDevice? {
        let devices: NSArray = AVCaptureDevice.devices() as NSArray;
        for de in devices {
            let deviceConverted = de as! AVCaptureDevice
            if(deviceConverted.position == position){
                return deviceConverted
            }
        }
        return nil
    }

    @IBOutlet weak var prendreBouton: UIButton!
    @IBOutlet weak var previewImage: UIImageView!

    @IBAction func takeAPicture(_ sender: Any) {
        if let videoConnection = output?.connection(with:AVMediaType.video){
            output?.captureStillImageAsynchronously(from:videoConnection, completionHandler: {
                (sampleBuffer, error) in
                let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(sampleBuffer!)
                let dataProvider = CGDataProvider.init(data: imageData! as CFData)
                let cgImageRef = CGImage.init(jpegDataProviderSource: dataProvider!, decode: nil, shouldInterpolate: true, intent: .defaultIntent)
                let image = UIImage.init(cgImage: cgImageRef!, scale: 1.0, orientation: .right)
                // do something with image
            })
        }
    }}
Monsieur Sam
  • 333
  • 1
  • 6
  • 20
  • Have a look here https://stackoverflow.com/questions/37869963/how-to-use-avcapturephotooutput?rq=1 – CarpenterBlood Jul 20 '17 at 23:30
  • The same topic is already here: [https://stackoverflow.com/questions/39173865/avcapturestillimageoutput-vs-avcapturephotooutput-in-swift-3](https://stackoverflow.com/questions/39173865/avcapturestillimageoutput-vs-avcapturephotooutput-in-swift-3). :) – Jakub Kašpar Jul 20 '17 at 23:31

0 Answers0