Как повысить производительность растрового рисования на Android

Я создал проигрыватель фильмов на основе FFmpeg. Это работает нормально. Декодирование довольно быстрое, на LG P970 (Cortex A8 с Neon) у меня в среднем 70 кадров в секунду с видеопотоком с разрешением 640 x 424, включая преобразование YUV2RGB. Однако есть одно узкое место. Это рисование на холсте.

Я использую нативную библиотеку jnigraphics для заполнения данных изображения в растровое изображение на нативной стороне, а затем рисую это растровое изображение на Canvas в SurfaceView. Это довольно простой и распространенный подход, но отрисовка занимает 44 мс для растрового изображения с разрешением 640 x 424, что снижает частоту кадров до 23 и делает эту технику непригодной... Это занимает намного больше времени, чем декодирование всего A/V кадра!

Есть ли способ значительно ускорить отрисовку растровых изображений? Я бы предпочел полностью отображать исходный код с помощью OpenGLES 2, но я читал, что это также может быть медленным. И что теперь?...

Как сделать растровые изображения максимально быстрыми?

7
задан Community 23 May 2017 в 11:50
поделиться