Kae*_*ure 3 image capture avfoundation
我有一个Cocoa应用程序,旨在从USB显微镜捕获静态图像,然后对它们进行一些后处理,然后将它们保存到图像文件中.目前,我被困在试图从CMSampleBufferRef传递给我的completionHandler块的那个,NSImage或者其他一些我可以使用熟悉的Cocoa API操作和保存的表示.
我imageFromSampleBuffer()在AVFoundation文档中找到了这个函数,它声称将a转换CMSampleBuffer为a UIImage(叹气),并适当地修改它以返回一个NSImage.但它在这种情况下不起作用,作为对CMSampleBufferGetImageBuffer()返回的调用nil.
这是一个显示CMSampleBuffer传递给我的完成块的日志:
2012-01-21 19:38:36.293 LabCam[1402:cb0f] CMSampleBuffer 0x100335390 retainCount: 1 allocator: 0x7fff8c78620c
invalid = NO
dataReady = YES
makeDataReadyCallback = 0x0
makeDataReadyRefcon = 0x0
buffer-level attachments:
com.apple.cmio.buffer_attachment.discontinuity_flags(P) = 0
com.apple.cmio.buffer_attachment.hosttime(P) = 79631546824089
com.apple.cmio.buffer_attachment.sequence_number(P) = 42
formatDescription = <CMVideoFormatDescription 0x100335220 [0x7fff782fff40]> {
mediaType:'vide'
mediaSubType:'jpeg'
mediaSpecific: {
codecType: 'jpeg' dimensions: 640 x 480
}
extensions: {<CFBasicHash 0x100335160 [0x7fff782fff40]>{type = immutable dict, count = 5,
entries =>
1 : <CFString 0x7fff773dff48 [0x7fff782fff40]>{contents = "Version"} = <CFNumber 0x183 [0x7fff782fff40]>{value = +1, type = kCFNumberSInt32Type}
2 : <CFString 0x7fff773dff68 [0x7fff782fff40]>{contents = "RevisionLevel"} = <CFNumber 0x183 [0x7fff782fff40]>{value = +1, type = kCFNumberSInt32Type}
3 : <CFString 0x7fff7781ab08 [0x7fff782fff40]>{contents = "CVFieldCount"} = <CFNumber 0x183 [0x7fff782fff40]>{value = +1, type = kCFNumberSInt32Type}
4 : <CFString 0x7fff773dfdc8 [0x7fff782fff40]>{contents = "FormatName"} = <CFString 0x7fff76d35fb0 [0x7fff782fff40]>{contents = Photo - JPEG"}
5 : <CFString 0x7fff773dff88 [0x7fff782fff40]>{contents = "Vendor"} = <CFString 0x7fff773dffa8 [0x7fff782fff40]>{contents = "appl"}
}
}
}
sbufToTrackReadiness = 0x0
numSamples = 1
sampleTimingArray[1] = {
{PTS = {2388943236/30000 = 79631.441, rounded}, DTS = {INVALID}, duration = {3698/30000 = 0.123}},
}
sampleSizeArray[1] = {
sampleSize = 55911,
}
dataBuffer = 0x100335300
Run Code Online (Sandbox Code Playgroud)
它显然似乎包含JPEG数据,但我如何得到它?(最好保持相关的元数据以便骑行...)
我最终在另一个代码示例的帮助下解决了这个问题 CMSampleBufferGetImageBuffer仅返回相机可用的未压缩本机图像格式的有效结果.因此,为了使我的程序工作,我必须配置AVCaptureStillImageOutput要使用的实例k32BGRAPixelFormat而不是其默认(JPEG)压缩格式.
session = [[AVCaptureSession alloc] init];
session.sessionPreset = AVCaptureSessionPresetPhoto;
imageOutput = [[AVCaptureStillImageOutput alloc] init];
// Configure imageOutput for BGRA pixel format [#2].
NSNumber * pixelFormat = [NSNumber numberWithInt:k32BGRAPixelFormat];
[imageOutput setOutputSettings:[NSDictionary dictionaryWithObject:pixelFormat
forKey:(id)kCVPixelBufferPixelFormatTypeKey]];
[session addOutput:imageOutput];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2088 次 |
| 最近记录: |