我正在开发一个iPhone视频播放器。我正在使用ffmpeg库解码视频帧,并使用opengl 2.0将帧渲染到屏幕上。
但我的渲染方法很慢。
用户告诉我: iOS 5包括一种新的快速处理方式。诀窍是使用AVFoundation,并将核心视频像素缓冲区直接链接到OpenGL纹理。
现在我的问题是,我的视频播放器将uint8_t *类型发送到渲染方法中,然后我使用glTexSubImage2D。但是,如果我想使用CVOpenGLESTextureCacheCreateTextureFromImage,则需要具有帧的CVImageBufferRef。
问题是:我如何从uint8_t缓冲区创建CVImageBufferRef?
这是我的渲染方法:
但我的渲染方法很慢。
用户告诉我: iOS 5包括一种新的快速处理方式。诀窍是使用AVFoundation,并将核心视频像素缓冲区直接链接到OpenGL纹理。
现在我的问题是,我的视频播放器将uint8_t *类型发送到渲染方法中,然后我使用glTexSubImage2D。但是,如果我想使用CVOpenGLESTextureCacheCreateTextureFromImage,则需要具有帧的CVImageBufferRef。
问题是:我如何从uint8_t缓冲区创建CVImageBufferRef?
这是我的渲染方法:
- (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];
感谢您的提问。
谢谢,