CVImageBufferRef imageBuffer =
CMSampleBufferGetImageBu
ffer(sampleBuffer);
CVPixelBufferLockBaseAdd
ress(imageBuffer, 0);
void *baseAddress = CVPixelBufferGetBaseAddr
ess(imageBuffer);
size_t width = CVPixelBufferGetWidth(imageBuffer);
size_t height = CVPixelBufferGetHeight(imageBuffer);
size_t bufferSize = CVPixelBufferGetDataSize
(imageBuffer);
size_t bytesPerRow = CVPixelBufferGetBytesPer
RowOfPlane(imageBuffer, 0);
CGColorSpaceRef rgbColorSpace = CGColorSpaceCreateDevice
RGB();
CGDataProviderRef provider = CGDataProviderCreateWith
Data(NULL, baseAddress, bufferSize, NULL);
CGImageRef cgImage = CGImageCreate(width, height, 8, 32, bytesPerRow, rgbColorSpace, kCGImageAlphaNoneSkipFir
st|kCGBitmapByteOrder32Litt
le, provider, NULL, true, kCGRenderingIntentDefaul
t);
UIImage *image = [UIImage imageWithCGImage:cgImage];
CGImageRelease(cgImage);
CGDataProviderRelease(provider);
CGColorSpaceRelease(rgbColorSpace);
NSData* imageData = UIImageJPEGRepresentatio
n(image, 1.0);
image = [UIImage imageWithData:imageData];
CVPixelBufferUnlockBaseA
ddress(imageBuffer, 0);
return image;