RubyMotion中的CVPixelBufferCreate

时间:2014-01-13 20:43:34

标签: ios rubymotion avassetwriter core-video

我正在尝试重新构建https://github.com/Lockerios/VideoFromImage中的一些功能,并在此帖中进行了讨论:ASSETWriterInput for making Video from UIImages on Iphone Issues

在pixelBufferFromCGImage:size方法中,到目前为止我有以下内容:

options = {KCVPixelBufferCGImageCompatibilityKey => 1, KCVPixelBufferCGBitmapContextCompatibilityKey => 1}

pxbuffer = nil
status = CVPixelBufferCreate(KCFAllocatorDefault, imageSize.width, imageSize.height, KCVPixelFormatType_32ARGB, options, pxbuffer)

其中imageSize.width == 640.0 和imageSize.height == 1136.0

但是,状态始终返回-6661。我有点困惑为什么会发生这种情况。使用以下方法在其他地方调用此方法:

buffer = pixelBufferFromCGImage(array.objectAtIndex(0).CGImage, size:CGSizeMake(640, 1136))

当我从pixelBufferFromCGImage函数中检查图像时,它看起来是“#< __ NSCFType:0x9ba7fa0>”类型我不确定这是否可能导致这个问题。

似乎我可能会根据https://developer.apple.com/library/ios/documentation/QuartzCore/Reference/CVConstantsRef/Reference/reference.html#//apple_ref/doc/uid/TP40010164-CH4g-BABIIDJJ将不正确的参数传递给CVPixelBufferCreate函数,其中最有可能是最后一个'pixelBufferOut'参数。

对此问题的任何见解将不胜感激。到目前为止,我对https://gist.github.com/naderhen/8407730

的全部代码有以下要点

谢谢!

1 个答案:

答案 0 :(得分:1)

看起来最后一个参数应该是指向CVPixelBufferRef对象的指针。你可以试试这个:

pxbuffer = Pointer.new(:object)

这样做,我的状态为0而不是-6661。

然后,要访问缓冲区,请使用pxbuffer[0]