Искаженный результат с MediaCode c при использовании пользовательских разрешений с кодеками Qualcomm - PullRequest
0 голосов
/ 15 февраля 2020

Я кодирую набор JPEG в mp4 с помощью MediaCode c API. Фотографии могут иметь любое разрешение, но я настраиваю все фотографии кратными 16, чтобы обеспечить их совместимость с MediaCode c и убедиться, что они соответствуют поддерживаемым размерам, возвращаемым кодом c Возможности видео.

Я обнаружил, что на некоторых старых устройствах, использующих OMX.qcom.video.encoder.av c код c, некоторые разрешения воспроизводят искаженное видео, как видно на следующие образцы с другим аспектом крыса ios. Проблема не возникает при использовании стандартных форматов крыс ios, таких как 16: 9, 4: 3 и др. c, только при использовании пользовательских.

Оригинал

enter image description here

Результат

enter image description here

Оригинал

enter image description here

Результат

enter image description here

Изучая эту проблему, я обнаружил через вопрос другого пользователя, что это может быть связано с тем фактом, что старые устройства Qualcomm требуют выравнивания плоскости Y данных YUV на границе 2К. Но я вообще не работаю с данными YUV напрямую, вместо этого я использую поверхность ввода и выполняю рендеринг через OpenGL.

Я предполагаю, что, возможно, базовая система Code c для поверхности ввода работает в любом случае с буферами YUV и кодом Qualcomm c обрабатывает все преобразования, это только предположение. Но если да, то есть ли какая-нибудь формула, которую я мог бы использовать для настройки разрешения и приведения его в соответствие с таким граничным требованием, даже если это приведет к некоторому кадрированию? Или если я заблуждаюсь по поводу своего предположения, то что может быть причиной такой проблемы? См. Следующий принятый ответ для утверждения о выравнивании границ 2K.

Как получить значения выравнивания шага и плоскости Y для MediaCode c encoder

...