Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 当图像数据样本用于渲染OpenGL纹理时,捕获静态图像失败_Ios_Opengl Es_Opengl Es 2.0_Avfoundation - Fatal编程技术网

Ios 当图像数据样本用于渲染OpenGL纹理时,捕获静态图像失败

Ios 当图像数据样本用于渲染OpenGL纹理时,捕获静态图像失败,ios,opengl-es,opengl-es-2.0,avfoundation,Ios,Opengl Es,Opengl Es 2.0,Avfoundation,我必须使用AVCaptureStillImageOutput captureStillImageAsynchronouslyFromConnection:捕获一组图像,并使用OpenGL作为纹理在屏幕上渲染它们,为此,我从捕获输出的CMSampleBufferRef传递CVPixelBufferRef。第一次捕获成功,但对于后续捕获,我得到了一个错误 Error Domain=AVFoundationErrorDomain code=-11801“无法完成操作” 代码如下 dispatch_as

我必须使用
AVCaptureStillImageOutput captureStillImageAsynchronouslyFromConnection:
捕获一组图像,并使用OpenGL作为纹理在屏幕上渲染它们,为此,我从捕获输出的CMSampleBufferRef传递CVPixelBufferRef。第一次捕获成功,但对于后续捕获,我得到了一个错误

Error Domain=AVFoundationErrorDomain code=-11801“无法完成操作”

代码如下

dispatch_async(dispatch_get_main_queue(), ^{
    if (self.videoConnection) {
        [self.imageOutput captureStillImageAsynchronouslyFromConnection:self.videoConnection completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) {
            if (!imageDataSampleBuffer) {
                return ;
            }
            if (imageDataSampleBuffer) {
                CVPixelBufferRef pxBuff = CMSampleBufferGetImageBuffer(imageDataSampleBuffer);
                if ([self.captureDelegate respondsToSelector:@selector(didCaptureBufferRef:)]) {
                    [_captureDelegate didCaptureBufferRef:pxBuff];
                }
            }
        }];
    }});

最终调用此函数(我跳过了中间调用,因为pxBuff没有在任何地方使用,只是传递了它)

我做错了什么?当我移除

[_captureDelegate didCaptureBufferRef:pxBuff];

事情进展顺利,成功发生

[\u captureDelegate didCaptureBufferRef:pxBuff]内部发生了什么?@SAKrisT,很抱歉耽搁了(必须旅行一个小时才能回家)。我已经添加了def。对于使用CVPixelBufferRef的函数。谢谢
- (void)textureFromBufferRef:(CVPixelBufferRef)pixelBuffer
{
size_t width = CVPixelBufferGetWidth(pixelBuffer);
size_t height = CVPixelBufferGetHeight(pixelBuffer);

glActiveTexture(GL_TEXTURE0);

CVReturn err  = CVOpenGLESTextureCacheCreateTextureFromImage(kCFAllocatorDefault, _textureCacheRef, pixelBuffer, NULL, GL_TEXTURE_2D, GL_RED_EXT, (GLsizei)width, (GLsizei)height, GL_RED_EXT, GL_UNSIGNED_BYTE, 0, &_captureImageTextureRef);
glBindTexture(CVOpenGLESTextureGetTarget(_captureImageTextureRef), CVOpenGLESTextureGetName(_captureImageTextureRef));
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
}
[_captureDelegate didCaptureBufferRef:pxBuff];