60/120fps данные предварительного просмотра на устройстве Android?

Мы хотели бы обрабатывать данные предварительного просмотра камеры с частотой кадров в секунду (или 60 кадров в секунду) с использованием неоновых сборок или графических шейдеров для выполнения простой операции обработки изображений (например, свертки 3x3). Мы НЕ заинтересованы в отображении изображения на экране, поэтому данные камеры должны перейти непосредственно к SurfaceTexture.

Мы думали, что можем сделать это, используя Camera2 API на Nexus 5, используя CameraConstrainedHighSpeedCaptureSession, но не увенчались успехом.

В настоящее время нет функционального кода в Интернете (по крайней мере, часть, которую мы очистили), что позволяет это, и все же кажется вероятным, что функциональность существует.

Лучший пример использования Camera2 API для высокоскоростной записи: https://github.com/PkmX/lcamera

Чтобы попытаться побудить кого-то опубликовать решение, я помещаю щедрость на этот вопрос.

Ответ 1

Мы успешно модифицировали образец камеры2video, чтобы получить скорость передачи данных в 120 кадров в секунду на Samsung S6.

Код здесь.

Нам еще не удалось извлечь пиксели, но будет обновляться здесь, когда мы будем делать.

Ответ 2

Это выполняется в pjsip. Потяните репо на свою машину:

svn checkout -r 4687 https://svn.pjsip.org/repos/pjproject/trunk

Затем откройте папку pjmedia/src/swig для примера приложения, которое выводит видеоданные, входящие в провод, непосредственно на SurfaceTexture.

Я загрузил два наиболее важных исходных файла C (с первого взгляда - есть, конечно, другие) для вас, здесь:

Естественно, эти файлы содержат много ненужного кода для вас, но, надеюсь, у вас есть фрагмент, который вы ищете.

Вам может потребоваться сначала выполнить некоторые инструкции найденные здесь, чтобы сгенерировать файлы pjmedia/src/pjmedia-videodev/android/PjCamera*.java, которые обрабатывают минималистическую Java/C если вы не знаете, как это сделать. Я смог выполнить их инструкции - используя точно такие же версии для NDK (работает с 10d или 10e) и openssl (1.0.2a), и успешно создавайте видео и создавайте собственное приложение. Этот источник выполняет именно то, что вы ищете, если вы просто модифицируете захват видео C-уровня, чтобы использовать ваш API через крючки JNI так же, как и они.

Для примера использования JNI-перехватчиков для изменения API, посмотрите на свою папку audiodev в pjmedia.

Если вы строите свой проект, обязательно следуйте инструкциям в самом низу для новых версий NDK для построения openssl 1.0.2a. Обратите внимание на капитал "C" на. /Configure, поскольку выполнение стандартного. /configure может привести к неправильному процессу настройки. Я предлагаю копировать и вставлять их предоставленные команды в script. Вы можете пропустить openssl полностью для своих целей; Я только смог заставить мои устройства Android регистрировать учетные записи SIP последовательно, как только я включил поддержку openssl.