有人能解释(或指出相关的FM覆盖)这个功能吗?
Xcode2,iOS 5.0.0,Xcode4.2,带ARC的项目。
我的项目从相机获取输入,并将其与各种图像混合,最终将其呈现在屏幕上。
只要我没有收到内存警告,它就可以无限期地工作,不会有内存泄漏。
在纹理之后,前5次调用此函数都会失败,并显示“无法创建纹理图像( didReceiveMemoryWarning )”。在那之后,屏幕变黑,程序停止响应。我可以按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中的注释,这似乎没有真正的帮助。
有没有人知道其他文档?
-Ken
发布于 2012-01-11 10:48:45
当你不再需要你的CVOpenGLESTextureCacheRef和CVOpenGLESTextureRef时,你会调用CFRelease()吗?
Apple源代码:
发布于 2015-07-16 01:41:19
我不想重复一个老问题,但我已经花了几天的时间试图弄清楚同样的问题(尽管是在ios 8.4上),并在谷歌搜索时不断遇到这个问题。
我终于明白了,至少对我来说,internalFormat应该是GL_RGBA。我使用GL_BGRA是很愚蠢的,因为这是IOS使用的内部格式,我将我的视频解码为BGRA,文档上说“这就是如何解码GL_BGRA”,但后来我意识到他们在文档/标题注释中使用了GL_RGBA。
像素格式与GL_RGBA或GL_BGRA一样好用(只是颜色适当翻转)
https://stackoverflow.com/questions/8709730
复制相似问题