小编use*_*268的帖子

在iOS上显示CVImageBufferRef的最有效方法是什么?

我有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)

opengl-es core-graphics avfoundation ios video-toolbox

8
推荐指数
1
解决办法
2151
查看次数