You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
2.4 KiB
65 lines
2.4 KiB
![]()
2 years ago
|
//
|
||
|
// XHVideoOutputSampleBufferFactory.m
|
||
|
// MessageDisplayExample
|
||
|
//
|
||
|
// Created by 曾 宪华 on 14-5-25.
|
||
|
// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved.
|
||
|
//
|
||
|
|
||
|
#import "XHVideoOutputSampleBufferFactory.h"
|
||
|
|
||
|
@implementation XHVideoOutputSampleBufferFactory
|
||
|
|
||
|
+ (UIImage *)imageFromSampleBuffer:(CMSampleBufferRef)sampleBuffer {
|
||
|
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
|
||
|
size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer);
|
||
|
// Get the pixel buffer width and height
|
||
|
size_t width = CVPixelBufferGetWidth(imageBuffer);
|
||
|
size_t height = CVPixelBufferGetHeight(imageBuffer);
|
||
|
|
||
|
// Create a device-dependent RGB color space
|
||
|
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
|
||
|
if (!colorSpace) {
|
||
|
NSLog(@"CGColorSpaceCreateDeviceRGB failure");
|
||
|
return nil;
|
||
|
}
|
||
|
|
||
|
// Get the base address of the pixel buffer
|
||
|
void *baseAddress = CVPixelBufferGetBaseAddress(imageBuffer);
|
||
|
// Get the data size for contiguous planes of the pixel buffer.
|
||
|
size_t bufferSize = CVPixelBufferGetDataSize(imageBuffer);
|
||
|
|
||
|
// Create a Quartz direct-access data provider that uses data we supply
|
||
|
CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, baseAddress, bufferSize,
|
||
|
NULL);
|
||
|
// Create a bitmap image from data supplied by our data provider
|
||
|
CGImageRef cgImage =
|
||
|
CGImageCreate(width,
|
||
|
height,
|
||
|
8,
|
||
|
32,
|
||
|
bytesPerRow,
|
||
|
colorSpace,
|
||
|
kCGImageAlphaNoneSkipFirst | kCGBitmapByteOrder32Little,
|
||
|
provider,
|
||
|
NULL,
|
||
|
true,
|
||
|
kCGRenderingIntentDefault);
|
||
|
CGDataProviderRelease(provider);
|
||
|
CGColorSpaceRelease(colorSpace);
|
||
|
|
||
|
// Create and return an image object representing the specified Quartz image
|
||
|
UIImage *image = [UIImage imageWithCGImage:cgImage];
|
||
|
CGImageRelease(cgImage);
|
||
|
|
||
|
CVPixelBufferUnlockBaseAddress(imageBuffer, 0);
|
||
|
|
||
|
return image;
|
||
|
}
|
||
|
|
||
|
@end
|