私はiPhone用のビデオプレーヤーを開発しています。私はビデオのフレームを解読するためにffmpegライブラリを使用しています、そして、私はフレームをスクリーンにレンダリングするためにOpenGL 2.0を使用しています。uint8_tバッファーからのCVOpenGLESTextureCacheCreateTextureFromImage
しかし、私のレンダリング方法は非常にゆっくりです。
ユーザーは私に言った: iOS 5にはこれを高速に実行する新しい方法が含まれています。このトリックは、AVFoundationを使用してCore VideoピクセルバッファをOpenGLテクスチャに直接リンクすることです。
私の問題は、私のビデオプレーヤーが、glTexSubImage2Dで使用していたuint8_t *タイプをレンダリングメソッドに送信することです。
私はCVOpenGLESTextureCacheCreateTextureFromImageを使用したいのですが、フレームでCVImageBufferRefが必要です。
質問:どのようにuint8_tバッファからCVImageBufferRefを作成できますか?
これは私のrenderメソッドです:
- (void) render: (uint8_t*) buffer
{
のNSLog(@ "レンダリング");
[EAGLContext setCurrentContext:context];
glBindFramebuffer(GL_FRAMEBUFFER, defaultFramebuffer);
glViewport(0, 0, backingWidth, backingHeight);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// OpenGL loads textures lazily so accessing the buffer is deferred until draw; notify
// the movie player that we're done with the texture after glDrawArrays.
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, mFrameW, mFrameH, GL_RGB,GL_UNSIGNED_SHORT_5_6_5, buffer);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
[moviePlayerDelegate bufferDone];
glBindRenderbuffer(GL_RENDERBUFFER, colorRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER];
}
おかげで、