我有CMSampleBufferRef(s),我使用VTDecompressionSessionDecodeFrame解码,在帧的解码完成后导致CVImageBufferRef,所以我的问题是......
在UIView中显示这些CVImageBufferRefs最有效的方法是什么?
我已经成功地CVImageBufferRef转换为CGImageRef和显示那些由设置CGImageRef作为CALayer的内容但随后DecompressionSession已配置@ {(ID)kCVPixelBufferPixelFormatTypeKey:[NSNumber的numberWithInt:kCVPixelFormatType_32BGRA]};
这是示例/代码我如何将CVImageBufferRef转换为CGImageRef(注意:cvpixelbuffer数据必须是32BGRA格式才能使用)
CVPixelBufferLockBaseAddress(cvImageBuffer,0);
// get image properties
uint8_t *baseAddress = (uint8_t *)CVPixelBufferGetBaseAddress(cvImageBuffer);
size_t bytesPerRow = CVPixelBufferGetBytesPerRow(cvImageBuffer);
size_t width = CVPixelBufferGetWidth(cvImageBuffer);
size_t height = CVPixelBufferGetHeight(cvImageBuffer);
/*Create a CGImageRef from the CVImageBufferRef*/
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef cgContext = CGBitmapContextCreate(baseAddress, width, height, 8, bytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst);
CGImageRef cgImage = CGBitmapContextCreateImage(cgContext);
// release context and colorspace
CGContextRelease(cgContext);
CGColorSpaceRelease(colorSpace);
// now CGImageRef can be displayed either by setting CALayer content
// or by creating a [UIImage withCGImage:geImage] that can …Run Code Online (Sandbox Code Playgroud)