2012-01-03 21 views
3

任何人都可以解釋(或指出相關的FM覆蓋)這個功能嗎?CVOpenGLESTextureCacheCreateTextureFromImage報告「無法創建IOSurface圖像(紋理)」

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

這是相關的? https://開頭github上。com/BradLarson/GPUImage/issues/220 – Abhinit 2012-10-10 16:28:57

回答

3

你打電話CFRelease()CVOpenGLESTextureCacheRefCVOpenGLESTextureRef當你不需要他們了?

蘋果源代碼:

1

不想要恢復一個老問題,但我剛剛花了好幾天,試圖找出同樣的問題(雖然上ios 8.4),並且在使用Google時遇到這個問題。

我終於想通了[至少對我] internalFormat需要是GL_RGBA。我愚蠢地使用GL_BGRA,因爲這是在IOS上使用的內部格式,而且我正在將我的視頻解碼爲BGRA,並且文檔說「這是如何解碼GL_BGRA」,但後來我意識到他們在文檔/標題註釋中使用了GL_RGBA。

像素格式是高興,因爲GL_RGBA或GL_BGRA(只是顏色適當翻轉)

+0

感謝您的幫助,您的觀察非常有用 – 2017-01-17 12:13:24