Depth map is always in hdis format instead of hdep. Unable to capture depth map in kCVPixelFormatType_DepthFloat format even after setting the activeDepthDataFormat for AVCapture device

I'm trying to capture the depth map image using true depth camera in iPhone 15 plus. I was able to setup the AVCapture session with AVCaptureDeviceInput as builtInTrueDepthCamera and AVCapturePhotoOutput with isDepthDataDeliveryEnabled set as true. I also manually made the activeDepthDataFormat of AVCapture device to kCVPixelFormatType_DepthFloat16 or kCVPixelFormatType_DepthFloat32. Finally I have enabled isDepthDataDeliveryEnabled, embedsDepthDataInPhoto , embedsPortraitEffectsMatteInPhoto and embedsSemanticSegmentationMattesInPhoto in AVCapturePhotoSettings before capturing the photo using capturePhoto(with: photoSettings, delegate: self) method.

I have checked manually printing the activeDepthDataFormat of AVCapture device. First before setting it by default it is

Optional('dpth'/'hdis'  640x 480, { 2- 30 fps}, photo dims:{}, fov:73.699, system exposure bias range:-2.0-2.0)

After forcing it to kCVPixelFormatType_DepthFloat16 or kCVPixelFormatType_DepthFloat32 the format is

Optional('dpth'/'hdep'  160x 120, { 2- 30 fps}, photo dims:{}, fov:73.699, system exposure bias range:-2.0-2.0)

But when I receive the captured photo in

  func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: (any Error)?) 

The depth map is

Optional(hdis 640x480 (high/abs) calibration:{intrinsicMatrix: [2723.07 0.00 2016.00 | 0.00 2723.07 1512.00 | 0.00 0.00 1.00], extrinsicMatrix: [1.00 0.00 0.00 0.00 | 0.00 1.00 0.00 0.00 | 0.00 0.00 1.00 0.00] pixelSize:0.001 mm, distortionCenter:{2016.00,1512.00}, ref:{4032x3024}})

Here it shows hdis instead of hdep, why is it capturing disparity map instead of true depth map.

The depth quality is high and depth data accuracy is absolute.

Here is my code

import UIKit
import AVKit
import AVFoundation

class ViewController: UIViewController, AVCapturePhotoCaptureDelegate {

    @IBOutlet weak var previewView: UIView!
    @IBOutlet weak var resultLbl: UILabel!
    private var  session = AVCaptureSession()
    private var captureDevice: AVCaptureDevice?
    private var inputDevice: AVCaptureDeviceInput?
    private var photoOutput: AVCapturePhotoOutput?
    private var photoSettings: AVCapturePhotoSettings?
    private var cameraPreviewLayer: AVCaptureVideoPreviewLayer?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        self.setupCaptureSession()
        
    }
    
    
    func setupCaptureSession(){
       
        
        captureDevice = AVCaptureDevice.default(.builtInTrueDepthCamera, for: .video, position: .unspecified)
        guard let captureDevice else{
            print("ERROR::UNABLE TO SET TRUE DEPTH CAMERA ")
            return }
        session.beginConfiguration()
        do{
            inputDevice = try AVCaptureDeviceInput(device: captureDevice)
            guard let inputDevice else{
                print("ERROR: UNABLE TO SET UP INPUT DEVICE")
                return }
            if session.canAddInput(inputDevice){
                
                session.addInput(inputDevice)
            }
        }
        catch{
            print(error)
        }
        photoOutput = AVCapturePhotoOutput()
        guard let photoOutput else{
            print("ERROR: UNABLE TO SET UP PHOTO OUTPUT")
            return }
        if session.canAddOutput(photoOutput){
            session.addOutput(photoOutput)
        }
        session.sessionPreset = .photo
        photoOutput.isDepthDataDeliveryEnabled = photoOutput.isDepthDataDeliverySupported
        print("IS DEPTH ENABLED:: \(photoOutput.isDepthDataDeliveryEnabled)")
        
        session.commitConfiguration()
        
        let availableFormats = captureDevice.activeFormat.supportedDepthDataFormats


        let depthFormat = availableFormats.filter { format in
            let pixelFormatType =
                CMFormatDescriptionGetMediaSubType(format.formatDescription)
            
            return (pixelFormatType == kCVPixelFormatType_DepthFloat16 ||
                    pixelFormatType == kCVPixelFormatType_DepthFloat32)
        }.first
        session.beginConfiguration()
        try! captureDevice.lockForConfiguration()
        captureDevice.activeDepthDataFormat = depthFormat
        captureDevice.unlockForConfiguration()
        session.commitConfiguration()
        self.setupPreviewLayer()
    }
    
    func setupPreviewLayer(){
        cameraPreviewLayer = AVCaptureVideoPreviewLayer(session: session)
        cameraPreviewLayer?.videoGravity = .resizeAspectFill
        if let cameraPreviewLayer{
            self.previewView.layer.addSublayer(cameraPreviewLayer)
            cameraPreviewLayer.frame = self.previewView.bounds
            
        }
        DispatchQueue.global(qos: .userInteractive).async {
            self.session.startRunning()
        }
    }

    @IBAction func captureBtnPressed(_ sender: Any) {
        photoSettings = AVCapturePhotoSettings(format: [AVVideoCodecKey:AVVideoCodecType.jpeg])
        guard let photoSettings else{
            print("ERROR: UNABLE TO SETUP PHOTO SETTINGS")
            return
        }
        guard let photoOutput else{
            print("ERROR: UNABLE TO SET UP PHOTO OUTPUT")
            return
        }
        photoSettings.isDepthDataDeliveryEnabled = photoOutput.isDepthDataDeliverySupported
        photoSettings.embedsDepthDataInPhoto = true
        photoSettings.embedsPortraitEffectsMatteInPhoto = true
        photoSettings.embedsSemanticSegmentationMattesInPhoto = true
        photoOutput.capturePhoto(with: photoSettings, delegate: self)
    }
    
    func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: (any Error)?) {
        print(photo.depthData)
        
        switch photo.depthData?.depthDataQuality {
        case .low:
            print("Depth quality is low")
        case .high:
            print("Depth quality is high")
        case nil:
            print("Depth quality is nil")
        }
        switch photo.depthData?.depthDataAccuracy {
        case .relative:
            print("Depth accuarcy is relative")
        case .absolute:
            print("Depth accuarcy is absolute")
        case nil:
            print("Depth accuarcy is nil")
        }
        if let imageData = photo.fileDataRepresentation(){
            if let image = UIImage(data: imageData){
                UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
            }
        }
    }
}
Depth map is always in hdis format instead of hdep. Unable to capture depth map in kCVPixelFormatType_DepthFloat format even after setting the activeDepthDataFormat for AVCapture device
 
 
Q