I am using this code to create a cv::Mat from a CMSampleBufferRef. It works fine for AVCaptureSessionPreset's (High, Medium, Low) but when I use AVCaptureSessionPresetPhoto it outputs a garbled image.
- (cv::Mat) matFromSampleBuffer:(CMSampleBufferRef) sampleBuffer {
CVImageBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
CVPixelBufferLockBaseAddress( pixelBuffer, 0 );
int bufferWidth = CVPixelBufferGetWidth(pixelBuffer);
int bufferHeight = CVPixelBufferGetHeight(pixelBuffer);
unsigned char *pixel = (unsigned char *)CVPixelBufferGetBaseAddress(pixelBuffer);
cv::Mat mat(bufferHeight,bufferWidth,CV_8UC4,pixel);
CVPixelBufferUnlockBaseAddress( pixelBuffer, 0 );
return mat;
}
When I use AVCaptureSessionPresetPhoto it produces:
But other profiles create a cv:Mat just fine. Can someone help?