Я работаю над приложением, которое кодирует фильм с помощью кодировщика h.264 для галереи и других целей. Это приложение поддерживает различные соотношения сторон на выходе (1:1, 2:3, 3:2, 16:9, 3:4, 4:3). Я использую поверхностные входы для ввода/вывода из API 4.3.
Приложение нормально работает на многих устройствах (проверено на S3, Motorola G, Nexus 7 2012, Motorola X), однако я столкнулся с проблемой при запуске его на Nexus 7 2013.
В принципе, некоторые выходные разрешения работают, некоторые нет. 3:4 (720x960), 2:3 (720x1080) и 16:9 (1280x720) работают как положено, но остальные (1:1 (960x960), 3:2 (1080x720) и 4:3 (960x720)) выдают такой вывод:
http://imageshack.com/a/img811/7984/dtgh.png
Я предполагаю, что в кодировщике есть какое-то значение, жестко закодированное в кодировщике, которое рассматривает свою входную поверхность как имеющую другую ширину, чем она есть на самом деле - пиксельные линии кажутся «неправильными». Тем не менее, я в недоумении, что может вызвать это и как это обойти.
Ошибок в логе нет и кодек видеокодера выводит в лог правильную ширину и высоту поверхности при выводе медиаформата.
обновление: кажется, нет проблем при кодировании с шириной 360, 720 или 1280, при этом высота не влияет. Я не нашел другой ширины ниже 1280, которая бы работала.
update2: кажется, есть и другие ширины, которые работают: 180, 240, 640, 700. Не удалось найти никакой корреляции между ними.