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.

Accepted Reply

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!

Replies

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

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!

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

Add a Comment

@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

  • If it supports 48 MP, the array will contain a CMVideoDimensions with width 8064 and height 6048.

Add a Comment

@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;
  • Hello, this is expected behavior. That is, when you attempt to take a 48MP photo with the speed quality prioritization, the system delivers 12MP.

    I understand that the implication here is that you cannot capture 48 MP with custom exposure settings, please file an enhancement request using Feedback Assistant for API that would enable custom exposure settings for 48 MP captures!

Add a Comment

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?