【问题标题】:CVOpenGLESTextureCacheCreateTextureFromImage reporting "Failed to create IOSurface image (texture)"CVOpenGLESTextureCacheCreateTextureFromImage 报告“无法创建 IOSurface 图像(纹理)”
【发布时间】:2015-07-16 01:41:19
【问题描述】:

谁能解释(或指出相关的 FM 覆盖)这个功能?

iPad 2、iOS 5.0.0、Xcode 4.2、ARC 项目。

我的项目从相机获取输入并将其与各种图像混合,最后将其全部渲染到屏幕上。

只要我没有收到内存警告,它就可以无限期地正常工作,不会出现内存泄漏。

didReceiveMemoryWarning 之后,调用此函数的前 5 次失败,提示“无法创建 IOSurface 图像(纹理)”。之后,屏幕变黑,程序停止响应。我可以按 Home 键然后关闭应用程序。

我的电话是这样的:

    err = CVOpenGLESTextureCacheCreateTextureFromImage(kCFAllocatorDefault, 
                                                   _videoTextureCache,
                                                   pixelBuffer,
                                                   NULL,
                                                   GL_TEXTURE_2D,
                                                   GL_RED_EXT,
                                                   _textureWidth,
                                                   _textureHeight,
                                                   GL_RED_EXT,
                                                   GL_UNSIGNED_BYTE,
                                                   0,
                                                   &_lumaTexture);

_videoTextureCache 最初是用这个创建的:

    //-- Create CVOpenGLESTextureCacheRef for optimal CVImageBufferRef to GLES texture conversion.
    CVReturn err = CVOpenGLESTextureCacheCreate(kCFAllocatorDefault, NULL, (__bridge void *)_context, NULL, &_videoTextureCache);
    if (err) 
    {
        NSLog(@"Error at CVOpenGLESTextureCacheCreate %d", err);
        return;
    }

_videoTextureCache 是这样定义的:

CVOpenGLESTextureCacheRef _videoTextureCache;    

当我收到内存警告时,是否需要调用某些东西来释放分配的内存? 我可以nil_videoTextureCache(这样ARC可以清理内存),然后重新创建吗?

到目前为止,我发现的唯一文档是声明函数的 .h 中的 cmets,这似乎并没有帮助。

有人知道其他文档吗?

-肯

【问题讨论】:

标签: ios


【解决方案1】:

当您不再需要 CVOpenGLESTextureCacheRefCVOpenGLESTextureRef 时,您是否在拨打 CFRelease()

苹果源代码:

【讨论】:

    【解决方案2】:

    不想复活一个老问题,但我花了几天时间试图找出同样的问题(尽管是在 ios 8.4 上),并且在谷歌搜索时不断遇到这个问题。

    我终于发现[至少对我而言]internalFormat 需要是GL_RGBA。我使用 GL_BGRA 很愚蠢,因为这是 IOS 上使用的内部格式,并且我正在将我的视频解码为 BGRA,并且文档说“这是如何解码 GL_BGRA”,但后来我意识到他们在文档/标题 cmets 中使用了 GL_RGBA。

    像素格式为 GL_RGBA 或 GL_BGRA(只是颜色适当翻转)

    【讨论】:

    • 感谢您的帮助,您的观察很有用
    猜你喜欢
    • 1970-01-01
    • 2016-11-08
    • 2016-07-08
    • 2021-06-19
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    • 2014-09-23
    相关资源
    最近更新 更多