Я разрабатываю видеоплеер для iPhone. Я использую библиотеки ffmpeg для декодирования кадров видео и использую opengl 2.0 для рендеринга кадров на экран.
Но мой метод рендеринга очень медленный.
Пользователь сказал мне:
iOS 5 включает новый способ сделать это быстро. Хитрость заключается в том, чтобы использовать AVFoundation и связать пиксельный буфер Core Video непосредственно с текстурой 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];
}
Спасибо,