Rotation in Depth Data Filtering

I am having an issue where the Depth Data for the `.builtInDualCamera` appears to be rotated 90 degrees when `isFilteringEnabled = true`



Here is my code:


    fileprivate let session = AVCaptureSession()

    fileprivate let meta = AVCaptureMetadataOutput()
    fileprivate let video = AVCaptureVideoDataOutput()
    fileprivate let depth = AVCaptureDepthDataOutput()

    fileprivate    let camera: AVCaptureDevice
    fileprivate    let input: AVCaptureDeviceInput

    fileprivate let synchronizer: AVCaptureDataOutputSynchronizer

    init(delegate: CaptureSessionDelegate?) throws {
        self.delegate = delegate
        session.sessionPreset = .vga640x480

        // Setup Camera Input
        let discovery = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInDualCamera], mediaType: .video, position: .unspecified)
        if let device = discovery.devices.first {
            camera = device
        } else {
            throw SessionError.CameraNotAvailable("Unable to load camera")
        }

        input = try AVCaptureDeviceInput(device: camera)
        session.addInput(input)

        // Setup Metadata Output (Face)
        session.addOutput(meta)
        if meta.availableMetadataObjectTypes.contains(AVMetadataObject.ObjectType.face) {
            meta.metadataObjectTypes = [ AVMetadataObject.ObjectType.face ]
        } else {
            print("Can't Setup Metadata: \(meta.availableMetadataObjectTypes)")
        }

        // Setup Video Output
        video.videoSettings = [kCVPixelBufferPixelFormatTypeKey as String: kCVPixelFormatType_32BGRA]
        session.addOutput(video)
        video.connection(with: .video)?.videoOrientation = .portrait

        // ****** THE ISSUE IS WITH THIS BLOCK HERE ******
        // Setup Depth Output
        depth.isFilteringEnabled = true
        session.addOutput(depth)
        depth.connection(with: .depthData)?.videoOrientation = .portrait

        // Setup Synchronizer
        synchronizer = AVCaptureDataOutputSynchronizer(dataOutputs: [depth, video, meta])

        let outputRect = CGRect(x: 0, y: 0, width: 1, height: 1)
        let videoRect = video.outputRectConverted(fromMetadataOutputRect: outputRect)
        let depthRect = depth.outputRectConverted(fromMetadataOutputRect: outputRect)

        // Ratio of the Depth to Video
        scale = max(videoRect.width, videoRect.height) / max(depthRect.width, depthRect.height)

        // Set Camera to the framerate of the Depth Data Collection
        try camera.lockForConfiguration()
        if let fps = camera.activeDepthDataFormat?.videoSupportedFrameRateRanges.first?.minFrameDuration {
            camera.activeVideoMinFrameDuration = fps
        }
        camera.unlockForConfiguration()

        super.init()
        synchronizer.setDelegate(self, queue: syncQueue)
    }


The original Video Looks like this: (For reference)

Original Video Image


When the values are:

   depth.isFilteringEnabled = false
    depth.connection(with: .depthData)?.videoOrientation = .portrait

The Image looks like this: (you can see the closer jacket is white, the farther jacket is grey, and the distance is dark grey - as expected)

Filtering=False, Orientation=Portrait


When the values are:

    depth.isFilteringEnabled = true
    depth.connection(with: .depthData)?.videoOrientation = .portrait

The image looks like this: (You can see the color values appear to be in the right places, but the shapes in the smoothing filter appear to be rotated)

Filtering=True, Orientation=Portrait


When the values are:

    depth.isFilteringEnabled = true
    depth.connection(with: .depthData)?.videoOrientation = .landscapeRight

The image looks like this: (Both the colors and the shapes appear to be horizontal)

Filtering=True, Orientation=Landscape_Right


Am I doing something wrong to get these incorrect values?


I have tried re-ordering the code

    depth.connection(with: .depthData)?.videoOrientation = .portrait
    depth.isFilteringEnabled = true

But that does nothing.


I think this is an issue related to iOS 12, because I remember this working just fine under iOS 11 (although I don't have any images saved to prove it)


Any Help is appreciated, thanks!