相关疑难解决方法(0)

从CVImageBufferRef获取内存的所有权

我正在创建一个简单的管道,从AVCaptureSession获取图像,在OpenCV中处理它们,然后在OpenGL中呈现它们.它基于RosyWriter但没有音频和录制功能.OpenCV处理看起来像

- (void)processPixelBuffer: (CVImageBufferRef)pixelBuffer 
{
CVPixelBufferLockBaseAddress( pixelBuffer, 0 );
int bufferWidth = CVPixelBufferGetWidth(pixelBuffer);
int bufferHeight = CVPixelBufferGetHeight(pixelBuffer);
unsigned char *pixel = (unsigned char *)CVPixelBufferGetBaseAddress(pixelBuffer);

cv::Mat image = cv::Mat(bufferWidth,bufferHeight,CV_8UC4,pixel);
//do any processing
[self setDisplay_matrix:image];
CVPixelBufferUnlockBaseAddress( pixelBuffer, 0 );
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,在这个功能中我没有复制任何内存,我想保持这种方式.问题是pixelBuffer可能仍然拥有display_image中包含的内存.处理代码可以分配或不分配新的存储器并将其存储在图像中.如果处理没有分配新内存,我必须使用display_matrix传递pixelBuffer以防止数据被擦除.有没有办法让我拥有记忆的所有权?我想破坏pixelBuffer而不破坏它指向的内存.

在相关的说明中,LockBaseAddress究竟做了什么?如果我传递一个cv :: Mat,CVImageBufferRef对我每次想用cv :: Mat修改/使用数据时都要锁定基地址吗?

memory-management objective-c ios avcapturesession

5
推荐指数
1
解决办法
1697
查看次数

AVCaptureSession仅在iPhone 3G上返回空白图像

我正在使用Apple的AVCaptureSession示例代码,并且创建的UIImage完全空白.这只发生在iPhone 3G上,还有一个独特的错误显示在控制台上,上面写着 -

错误:CGDataProviderCreateWithCopyOfData:vm_copy失败:状态2.

我已经在线研究了错误,发现了这个StackOverflow的答案,它摆脱了错误......但是图像仍然是空白的.

有没有其他人经历过这个并知道如何修复它?

提前致谢.

我的代码 -

CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); 
CVPixelBufferLockBaseAddress(imageBuffer, 0); 

void *baseAddress = CVPixelBufferGetBaseAddress(imageBuffer); 
size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer); 
size_t width = CVPixelBufferGetWidth(imageBuffer); 
size_t height = CVPixelBufferGetHeight(imageBuffer); 

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 

CGContextRef context = CGBitmapContextCreate(baseAddress, width, height, 8, bytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst); 
CGImageRef quartzImage = CGBitmapContextCreateImage(context); 
CVPixelBufferUnlockBaseAddress(imageBuffer,0);

CGContextRelease(context); 
CGColorSpaceRelease(colorSpace);

UIImage *image = [UIImage imageWithCGImage:quartzImage];

CGImageRelease(quartzImage);

return image;
Run Code Online (Sandbox Code Playgroud)

iphone ios4 avcapturesession

3
推荐指数
1
解决办法
2373
查看次数