Я разрабатываю видеопроигрыватель для iPhone. Я использую библиотеки ffmpeg для декодирования кадров видео, и я использую opengl 2.0 для рендеринга кадров на экран.CVOpenGLESTextureCacheCreateTextureFromImage из буфера uint8_t
Но мой метод визуализации очень медленно.
Пользователь сказал мне: iOS 5 включает в себя новый способ сделать это быстро. Хитрость заключается в использовании AVFoundation и привязки буфера основного видеосигнала непосредственно к тексту OpenGL.
Моя проблема теперь в том, что мой видеопроигрыватель отправляет методу визуализации тип uint8_t *, который я использую затем с glTexSubImage2D.
Но если я хочу использовать CVOpenGLESTextureCacheCreateTextureFromImage, мне нужен CVImageBufferRef с фреймом.
Вопрос: Как я могу создать CVImageBufferRef из буфера uint8_t?
Это мой метод визуализации:
- (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];
}
Спасибо,