任何人都可以解释(或指出相关的FM覆盖)这个功能吗?
iPad 2,iOS 5.0.0,Xcode 4.2,ARC项目。
我的项目从相机中获取输入并将其与各种图像混合,最后在屏幕上呈现所有图像。
只要我没有得到内存警告,它就可以无限期地正常工作,没有内存泄漏。
在didReceiveMemoryWarning
之后,调用此函数的前5次失败说“无法创建IOSurface
图像(纹理)”。之后,屏幕变黑,程序停止响应。我可以按主页键然后终止该应用程序。
我的电话如下:
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
中声明函数的注释,这似乎没有帮助。
有人知道其他文件吗?
-Ken
答案 0 :(得分:3)
当您不再需要CFRelease()
和CVOpenGLESTextureCacheRef
时,您是否正在呼叫CVOpenGLESTextureRef
?
Apple源代码:
答案 1 :(得分:1)
不想重复旧问题,但我花了好几天时间试图找出同样的问题(虽然在ios 8.4上),并在谷歌搜索时不断遇到这个问题。
我终于发现[至少对我来说] internalFormat
需要GL_RGBA
。我使用GL_BGRA
是愚蠢的,因为它是IOS上使用的内部格式,而我正在将我的视频解码为BGRA而文档说"这是如何解码GL_BGRA"但后来我意识到他们在docs / header评论中使用了GL_RGBA。
像素格式很高兴GL_RGBA或GL_BGRA(只是颜色适当翻转)