iOS12 portraitEffectsMatte is still nil with pixel format output?

Hey guys, I just start to use the API AVPortraitEffectsMatte. I often work around the AVDepthData. But I'm confused with the return value of portrait matte.

I want to capture the photo also get the portrait effect matte in the same time. When I use the fileDataRepresentationWithCustomizer, the matte works fine. I can get matte from photos just toke, and the callback photo.portraitEffectsMatte ISN'T nil. But when I want to capture the photo with pixelformat, and also set the setPortraitEffectsMatteDeliveryEnabled correctly, the photo.portraitEffectsMatte in callback is always nil. Why?


I tested it on my iPhone X with iOS 12. Here is the code I use.


First I enable the depth and portrait matte in AVCapturePhotoOutput.


if (photoOutput.isDepthDataDeliverySupported)
{
     [photoOutput setDepthDataDeliveryEnabled:YES];
}

if (@available(iOS 12.0, *))
{
     if (photoOutput.isPortraitEffectsMatteDeliverySupported)
     {
          [photoOutput setPortraitEffectsMatteDeliveryEnabled:YES];
     }
}



And I wrote this when I press the capture button.

AVCapturePhotoSettings * photoSettings = [AVCapturePhotoSettings photoSettingsWithFormat:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:kCVPixelFormatType_32BGRA], kCVPixelBufferPixelFormatTypeKey, nil]];
if (photoOutput.isDepthDataDeliverySupported)
{
     [photoSettings setDepthDataDeliveryEnabled:YES];
     photoSettings.embedsDepthDataInPhoto = NO;
 }
if (@available(iOS 12.0, *))
 {
     if (photoOutput.isPortraitEffectsMatteDeliverySupported)
      {
          [photoSettings setPortraitEffectsMatteDeliveryEnabled:YES];
          photoSettings.embedsPortraitEffectsMatteInPhoto = NO;
     }
 }

[photoOutput capturePhotoWithSettings:photoSettings delegate:self];


Finally get this callback.

- (void)captureOutput:(AVCapturePhotoOutput *)output didFinishProcessingPhoto:(AVCapturePhoto *)photo error:(nullable NSError *)error
{
     if (@available(iOS 12.0, *))
     {
          NSLog(@"%@", photo.portraitEffectsMatte ? @"Matte": @"nil");
     }
}



But it's still nil.

How can I get the correct portrait matte with the pixelformat output?


Thank you.

I've discovered this as well and it appears to be a bug. I submitted a radar for this (45061334).

I really regret this problem should be exposed during the beta version. I didn't test it in the past two months. It seems I have to use the file saving interface to get protrait matte not the pixel format output.

Thank you, brainfevermedia, for the bug report. We're investigating.

iOS12 portraitEffectsMatte is still nil with pixel format output?
 
 
Q