Аппаратное ускорение FFmpeg на Android?

#android #ffmpeg #live-wallpaper #hardware-acceleration #video-codecs

#Android #ffmpeg #живые обои #аппаратное ускорение #видео-кодеки

Вопрос:

Я скомпилировал более старую версию FFmpeg для Android (если я правильно помню, это было 0.6.X). FFmpeg декодирует видеокадр, масштабирует его, затем я использую OpenGL для его отображения на экране. Насколько я могу судить, проблема заключается в декодировании и масштабировании — они не ускоряются аппаратно.

Мой вопрос:

  1. Является ли последняя версия аппаратного ускорения FFmpeg для процессоров ARM (Android)?
  2. Я неправильно это делаю? т. Е. есть ли лучший способ сделать это? Где «это» воспроизводит видео h264 HD в качестве живых обоев для видео — частота кадров должна быть высокой, поэтому аппаратное ускорение желательно, когда оно доступно.

Ответ №1:

  1. Я так думаю, да. смотрите : http://ffmpeg.org/#pr9 . основной версией, в которой аппаратно ускоренное декодирование h264 на Android, является Harmony 0.9

  2. если вы используете декодер, который использует аппаратное ускорение, когда оно доступно, я не вижу, как вы можете добиться большего…

Ответ №2:

Что вам нужно, так это ffmpeg, скомпилированный для ARM NEON. Смотрите: https://groups.google.com/forum /#!тема/android-ndk/mGF6t3uWZ4U

Комментарии:

1. не совсем. Это позволяет запускать ffmpeg на ARM NEON (что я уже сделал). Но это не позволяет аппаратное ускорение (разные вещи). спасибо за ответ

2. подождите. что вы подразумеваете под аппаратным ускорением для FFMPEG? FFMPEG «аппаратное ускорение» не имеет смысла (если вы не имеете в виду NEON). или вы имели в виду аппаратное ускорение для OpenGL? Я надеюсь, что вы рендерите свое видео с использованием объектов vertex buffer (VBO) или шейдеров (для получения аппаратного ускорения). Я думаю, что ваша точка отсечки — это рендеринг OpenGL, а не ffmpeg.

Ответ №3:

Вы также можете попробовать скомпилировать ffmpeg с помощью libstagefright_h264, я смог заставить его компилировать и считывать свойства видеофайла, но не смог заставить avcodec_open работать с ним… Это было бы аппаратное ускорение, предполагающее, что оно поддерживается устройством.