Как кодировать полнодиапазонное видео на Android с помощью MediaCodec при использовании поверхностного ввода?C++

Программы на C++. Форум разработчиков
Anonymous
Как кодировать полнодиапазонное видео на Android с помощью MediaCodec при использовании поверхностного ввода?

Сообщение Anonymous »


Я пытаюсь закодировать полнодиапазонное видео bt709 с помощью MediaCodec. При использовании поверхности в качестве входных данных установка свойства COLOR_RANGE в MediaFormat приводит к странному поведению на телефонах Qualcomm: закодированные видео кажутся размытыми (возможно, RGBA преобразовано с неправильной матрицей). Есть идеи, что мне следует сделать, чтобы обеспечить правильность преобразования rgba2yuv? Я использую собственный код C++ и JNI для вызова методов Java.

Кроме того, я пытался использовать буфер в качестве входных данных, однако, поскольку мне нужно получить результат рендеринга при редактировании видео, glReadPixels вызывает ужасную задержку. Даже после того, как я использую шейдер для преобразования RGBA в yuv и использую PBO для получения данных, кодирование с помощью буферов по-прежнему происходит ужасно медленно, примерно в два раза быстрее, чем поверхностный ввод, что практически непригодно для моего сценария.

Вернуться в «C++»