Last active
November 13, 2024 02:49
-
-
Save jebai/8108270 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Create a UIImage from sample buffer data | |
- (UIImage *) imageFromSampleBuffer:(CMSampleBufferRef) sampleBuffer | |
{ | |
// Get a CMSampleBuffer's Core Video image buffer for the media data | |
CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); | |
// Lock the base address of the pixel buffer | |
CVPixelBufferLockBaseAddress(imageBuffer, 0); | |
// Get the number of bytes per row for the pixel buffer | |
void *baseAddress = CVPixelBufferGetBaseAddress(imageBuffer); | |
// Get the number of bytes per row for the pixel buffer | |
size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer); | |
// Get the pixel buffer width and height | |
size_t width = CVPixelBufferGetWidth(imageBuffer); | |
size_t height = CVPixelBufferGetHeight(imageBuffer); | |
NSLog(@"w: %zu h: %zu bytesPerRow:%zu", width, height, bytesPerRow); | |
// Create a device-dependent RGB color space | |
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); | |
// Create a bitmap graphics context with the sample buffer data | |
CGContextRef context = CGBitmapContextCreate(baseAddress, | |
width, | |
height, | |
8, | |
bytesPerRow, | |
colorSpace, | |
kCGBitmapByteOrder32Little | |
| kCGImageAlphaPremultipliedFirst); | |
// Create a Quartz image from the pixel data in the bitmap graphics context | |
CGImageRef quartzImage = CGBitmapContextCreateImage(context); | |
// Unlock the pixel buffer | |
CVPixelBufferUnlockBaseAddress(imageBuffer,0); | |
// Free up the context and color space | |
CGContextRelease(context); | |
CGColorSpaceRelease(colorSpace); | |
// Create an image object from the Quartz image | |
//UIImage *image = [UIImage imageWithCGImage:quartzImage]; | |
UIImage *image = [UIImage imageWithCGImage:quartzImage | |
scale:1.0f | |
orientation:UIImageOrientationRight]; | |
// Release the Quartz image | |
CGImageRelease(quartzImage); | |
return (image); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
It is very useful. Thank you.