2016-03-25 11 views
1

[_videoOutput copyPixelBufferForItemTime:[_ playerItem currentTime] itemTimeForDisplay:nil]からCVPixelBufferを受信しました。そして、私はOpenGLES 2.0を使用する場合、それは働いたが、OpenGLES 3.0に変更し、それが失敗し、以下のようないくつかのエラーを表示しますOpenGLES 3 CVOpenGLESTextureCacheCreateTextureFromImageでエラー-6683

// Y-plane 
glActiveTexture(GL_TEXTURE0); 
err = CVOpenGLESTextureCacheCreateTextureFromImage(kCFAllocatorDefault,_videoTextureCache, pixelBuffer, NULL, GL_TEXTURE_2D, GL_RED_EXT,width, height, GL_RED_EXT, GL_UNSIGNED_BYTE, 0, &outTexture); 
if (err) { 
    NSLog(@"Error at CVOpenGLESTextureCacheCreateTextureFromImage %d", err); 
} 

ルマテクスチャやクロムテクスチャを作成するためにCVOpenGLESTextureCacheCreateTextureFromImage関数にこのpixelbufferを転送:

CVOpenGLESTextureCacheCreateTextureFromImage -6683 で

エラーIOSurface画像(テクスチャ)を作成できませんでした

OpenGLES 3.0/2.0コード:

_context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3]; 

if (!_context) { 
    _context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; 
    if (!_context) { 
     NSLog(@"Failed to create ES context"); 
    } 
    _openGLESVer = OpenGLESVersion2; 
} 

答えて

1

のOpenGL ES 3.0を使用して、あなたはそれが動作するはずです、(私は一年前に私のアプリでそれを使用しています)コードの下を検討し、GL_LUMINANCEGL_RED_EXTを交換する必要がある唯一のpixelBufferあるyuv420spかフルレンジかビデオ範囲CVOpenGLESTextureCacheCreateTextureFromImageはyuv420pでは動作しません。 // Y-plane glActiveTexture(GL_TEXTURE0); err = CVOpenGLESTextureCacheCreateTextureFromImage(kCFAllocatorDefault,_videoTextureCache, pixelBuffer, NULL, GL_TEXTURE_2D, GL_LUMINANCE,width, height, GL_LUMINANCE, GL_UNSIGNED_BYTE, 0, &outTexture);

+0

Core Videoのyuv420spの定数は何ですか? –

関連する問題