How to capture 48 MP Apple ProRAW?

Hello, We are developing to shoot 48MP Apple Pro Raw feature in my app, but we couldn't find any documentation on shooting 48MP Apple Pro Raw. Is it possible to shoot 48MP Apple ProRaw with a third-party app? Any help is much appreciated. Thanks.

Answered by DTS Engineer in 729419022

Hello,

Is it possible to shoot 48MP Apple ProRaw with a third-party app?

Yes!

Your capture configuration needs to meet a few requirements to do so:

  1. The AVCaptureDevice's activeFormat needs to be set to a format that contains a 48 MP resolution in its supportedMaxPhotoDimensions array. (you can loop over the supported formats of the device to find such a format, or you can just use the .photo preset for your capture session's sessionPreset.)

Note that the only AVCaptureDevice that has a format that supports a 48 MP resolution is the builtInWideAngleCamera of iPhone 14 Pro and iPhone 14 Pro Max.

  1. Your capture session needs to have an AVCapturePhotoOutput, and it needs to be configured as follows:
            photoOutput.isAppleProRAWEnabled = true
            photoOutput.maxPhotoDimensions = .init(width: 8064, height: 6048)
  1. Finally, when you go to capture the photo, you need configure the AVCapturePhotoSettings, specifying an Apple ProRAW pixel format, as well as the 48 MP dimensions:
        let query = photoOutput.isAppleProRAWEnabled ?
            { AVCapturePhotoOutput.isAppleProRAWPixelFormat($0) } :
            { AVCapturePhotoOutput.isBayerRAWPixelFormat($0) }

        // Retrieve the RAW format, favoring Apple ProRAW when it's in an enabled state.
        guard let rawFormat =
                photoOutput.availableRawPhotoPixelFormatTypes.first(where: query) else {
            fatalError("No RAW format found.")
        }

        let photoSettings = AVCapturePhotoSettings(rawPixelFormatType: rawFormat)
        photoSettings.maxPhotoDimensions = .init(width: 8064, height: 6048)
        
        photoOutput.capturePhoto(with: photoSettings, delegate: self)

With all of this, you should receive 48 MP Apple ProRAW photos in photoOutput(_:didFinishProcessingPhoto:error:)

Please let me know if these steps are not working for you!

Also hoping for any further infos as we would also would really like to use the full resolution in our app!

Accepted Answer

Hello,

Is it possible to shoot 48MP Apple ProRaw with a third-party app?

Yes!

Your capture configuration needs to meet a few requirements to do so:

  1. The AVCaptureDevice's activeFormat needs to be set to a format that contains a 48 MP resolution in its supportedMaxPhotoDimensions array. (you can loop over the supported formats of the device to find such a format, or you can just use the .photo preset for your capture session's sessionPreset.)

Note that the only AVCaptureDevice that has a format that supports a 48 MP resolution is the builtInWideAngleCamera of iPhone 14 Pro and iPhone 14 Pro Max.

  1. Your capture session needs to have an AVCapturePhotoOutput, and it needs to be configured as follows:
            photoOutput.isAppleProRAWEnabled = true
            photoOutput.maxPhotoDimensions = .init(width: 8064, height: 6048)
  1. Finally, when you go to capture the photo, you need configure the AVCapturePhotoSettings, specifying an Apple ProRAW pixel format, as well as the 48 MP dimensions:
        let query = photoOutput.isAppleProRAWEnabled ?
            { AVCapturePhotoOutput.isAppleProRAWPixelFormat($0) } :
            { AVCapturePhotoOutput.isBayerRAWPixelFormat($0) }

        // Retrieve the RAW format, favoring Apple ProRAW when it's in an enabled state.
        guard let rawFormat =
                photoOutput.availableRawPhotoPixelFormatTypes.first(where: query) else {
            fatalError("No RAW format found.")
        }

        let photoSettings = AVCapturePhotoSettings(rawPixelFormatType: rawFormat)
        photoSettings.maxPhotoDimensions = .init(width: 8064, height: 6048)
        
        photoOutput.capturePhoto(with: photoSettings, delegate: self)

With all of this, you should receive 48 MP Apple ProRAW photos in photoOutput(_:didFinishProcessingPhoto:error:)

Please let me know if these steps are not working for you!

Great info, super useful!

@gchiste, do you think it is possible to use the same settings for HEIC/JPG capture at 48 MP? I cannot try it yet, my iPhone 14 Pro is arriving soon.

Thanks!

@gchiste If it supports 48MP, what will be in supportedMaxPhotoDimensions array? I have no device yet, but I really want to know the specific value in array. and write code first with no device

@gchiste Thank you for the valuable information! I wrote the code as advised and was able to shoot 48MP Apple ProRaw photo.

I wanted to add that I could not get the 48MP image until I also set the photoSettings photoQualityPrioritization to the maximum value.

Something like this (Objective-C):

photoSettings.photoQualityPrioritization = photoOutput.maxPhotoQualityPrioritization;

Thank you for clarifying. I've made a report through Feedback Assistant. This seems like a really poor design decision. You literally cannot use the 48MP capture for time-lapse or stop motion because of this. It is also not documented, and seems counter to the fact that we already have to specify the maximum dimensions... which should be sufficient to trigger this feature.

I have a iPhone 15, I set the max dimensions 40mp on both photoOutput and photoSetting, then capture Bayer RAW, I still get 12mp photo. How to fix it?

I have iPhone 16 pro max,I set the max dimensions 40MP on both photoOutput and photoSetting but still getting the 12MP image. How to capture the 48MP image using .builtInDualWideCamera? since my requirement is to capture the depth and high quality image together. Any Help would be appreciated. Thanks in advance.

How to capture 48 MP Apple ProRAW?
 
 
Q