В моем собственном потоке FFMpeg получает и декодирует кадры, а затем ставит их в очередь.
На стороне Java у меня есть GLSurfaceView
и из Renderer.onDrawFrame
я вызываю собственный код, передавая растровое изображение (это растровое изображение я создаю только один раз, а затем передаю его каждый раз). время).
В нативном коде я получаю начало очереди, копирую данные в растровое изображение Java с помощью функций AndroidBitmap_xxx
, а затем визуализирую это растровое изображение на стороне Java в виде текстуры.
Интересно, есть ли более быстрый способ рендеринга видео? Делать это полностью в нативном коде, если да, то почему так будет быстрее?
Изменить: Теперь я не копирую пиксели кадра RGB в заблокированные пиксели растрового изображения, а декодирую кадр YUV непосредственно в заблокированные пиксели растрового изображения. Это делает рендеринг значительно быстрее (потому что больше нет ненужного memcpy), но вопрос остается.