Я попытаюсь уточнить и обобщить ответы здесь на основе моего собственного опыта.
Почему openGL
Когда люди думают о рендеринге видео сopenGL, Большинство пытаются использовать графический процессор для преобразования цветового пространства и альфа-смешения.
Например, преобразование видеокадров YV12 в RGB.Преобразования цветового пространства, такие как YV12 -> RGB, требуют, чтобы вы рассчитывали значение каждого пикселя в отдельности.Представьте для кадра 1280 x 720 пикселей, сколько операций в итоге получается.
То, что я только что описал, на самом деле предназначено для SIMD - выполнение одной и той же операции с несколькими частями данных параллельно.Графический процессор идеально подходит для преобразования цветового пространства.
Почему! OpenGL
Недостатком является процесс, с помощью которого вы получаете текстурные данные в графический процессор.Учтите, что для каждого кадра вам нужно загрузить данных текстуры в память (операция ЦП), а затем вам нужно скопировать этих данных текстуры в графический процессор (операция ЦП).Именно эту загрузку / копирование может сделать с использованием openGL медленнее, чем альтернативы.
Если вы воспроизводите видео с низким разрешением, то, я полагаю, возможно, вы не увидите разницу в скорости, потому что ваш процессорне будет узким местомОднако, если вы попробуете с HD, вы, скорее всего, добьетесь этого узкого места и заметите существенное снижение производительности.
Способ, которым это узкое место традиционно обходилось, заключается в использовании Pixel Buffer Objects (выделение памяти GPU для хранения текстурных загрузок).К сожалению, в GLES2 нет объектов Pixel Buffer.
Другие параметры
По указанным выше причинам многие решили использовать программное декодирование в сочетании с доступными расширениями ЦП, такими как NEON, для преобразования цветового пространства.Реализация YUV 2 RGB для NEON существует здесь .Средства, с помощью которых вы рисуете кадры, SDL против openGL не должны иметь значения для RGB, поскольку вы копируете одинаковое количество пикселей в обоих случаях.
Вы можете определить, поддерживает ли ваше целевое устройство улучшения NEON, запустив cat /proc/cpuinfo
из оболочки adb и ищет NEON в выводе функций.