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.
66 lines
2.3 KiB
66 lines
2.3 KiB
// |
|
// XHVideoOutputSampleBufferFactory.m |
|
// MessageDisplayExample |
|
// |
|
// Created by 曾 宪华 on 14-5-25. |
|
// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. |
|
// |
|
|
|
#import "XHVideoOutputSampleBufferFactory.h" |
|
|
|
#import <UIKit/UIKit.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
|
|
|