【问题标题】:CVOpenGLESTextureCacheCreateTextureFromImage errorCVOpenGLESTextureCacheCreateTextureFromImage 错误
【发布时间】:2015-09-11 03:46:49
【问题描述】:

我正在处理应用程序的第二个版本更新。一切正常,但突然我开始收到此错误。我正在使用 GPUImage 库进行过滤。我正在 iPhone 6/iOS 8.3 上测试我的应用程序。我还检查了我的旧代码,但我开始遇到同样的错误。谁能帮我解决这个问题。

【问题讨论】:

  • 我们现在使用 Xcode 7/iOS 9 SDK 构建时看到的情况相同。我们发现使用带有 Xcode 6 的 iOS 8 SDK 没有崩溃。您也在使用 Xcode 7 吗? FWIW,8.2 上的 iPhone 5S 和 iPad 4 都可以正常工作。
  • 是的,我使用的是 Xcode7/iOS 9。你说得对,使用 Xcode 6 的 iOS 8 SDK 不会崩溃。但它只会在调试期间崩溃。实际上,安装后应用程序在移动设备上运行良好。
  • 我们应该打开雷达。我没有一个小的可重复案例可以这样做。你已经打开了我可以复制的雷达吗?
  • 没有。你可以打开它。
  • 我创建了一个小测试用例,传递与崩溃场景相同的参数,但它当然不会崩溃!在触发它之前必须有其他事情发生。我还没有缩小范围。

标签: ios xcode ios7 ios8


【解决方案1】:

我们有一些调用 CVPixelBufferCreate 的代码传递了错误的参数。 AFAIK 这来自一些示例代码,之后有一些错误的复制和粘贴,所以也许你的也有同样的错误。

CVPixelBufferCreate 采用属性字典。一些键,如kCVPixelBufferOpenGLESCompatibilityKey 采用CFBoolean,但我们传递的是字典。这种风格有效:

NSDictionary *attrs = @{ (NSString*)kCVPixelBufferIOSurfacePropertiesKey : @{},
                         (NSString*)kCVPixelBufferOpenGLESCompatibilityKey: @YES}; <-- we had @{} !

err = CVPixelBufferCreate(kCFAllocatorDefault, width, height, formatType, (__bridge CFDictionaryRef)attrs, &pixelBuffer);

【讨论】:

    【解决方案2】:

    我从 Brad Larsen 那里得到了这个解决方案,我认为他是对的。 “如果您直接从相机进行过滤,请不要使用 -imageByFilteringImage: 和中间 UIImages。这在内存消耗和性能方面都非常昂贵,因为您必须在 CPU 上与 UIImages 相互转换。相反,来自 GPUImageVideoCamera 实例的链过滤器。”

    【讨论】:

      【解决方案3】:

      我正在使用 GPUImage 1.6.0 并看到同样的问题。试图破解建议的提案 - 但它没有帮助。还有其他想法/建议吗?

      CFDictionarySetValue(attrs, kCVPixelBufferIOSurfacePropertiesKey, empty);
      CFDictionarySetValue(attrs, kCVPixelBufferOpenGLESCompatibilityKey, kCFBooleanTrue);
      
      CVReturn err = CVPixelBufferCreate(kCFAllocatorDefault, (int)_size.width, (int)_size.height, kCVPixelFormatType_32BGRA, attrs, &renderTarget);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-12
        • 1970-01-01
        • 2023-03-03
        • 1970-01-01
        • 2012-08-15
        • 1970-01-01
        • 2012-07-21
        • 1970-01-01
        相关资源
        最近更新 更多