LINUX.ORG.RU

Проблемы с video4linux

 , ,


0

1

При захвате видео через ffmpeg c v4l2 через каждые несколько кадров начинают повторяться первые кадры. В результате изображение мерцает.
Камера sun4i_csi0, сенсор gc0308.
При получении видео через mplayer изображение нормальное, если частота 10fps или больше.
В dmesg при использовании mplayer появляется строка buffer count is invalid, set to 3.
В При использовании ffmpeg buffer count is invalid, set to 5, что скорее всего и является причиной. Процент использования времени процессора в обоих случаях небольшой. Как убрать мерцание? Со внешней usb камерой работает одинаково хорошо.

★★★★★

Последнее исправление: mittorn (всего исправлений: 1)

buffer count is invalid, set to 3

Это на ошибку (и тем более на причину проблемы) не похоже. ffmpeg по умолчанию предлагает драйверу использовать 256 буферов. Драйвер не согласен и выставляет свое значение. «Так всегда было, и так всегда будет». Необычное здесь только то, что драйвер обругал инвалидом. Все молчат, а sun4i_csi0 ругается.

А мерцание (повторение) - это от драйвера. Просто найди приемлемое сочетание параметров захвата и смирись с этим. Например, запусти родное (которое в комплекте к устройству поставлялось) приложение и посмотри (v4l2-ctrl) параметры захвата. И про экспозицию не забудь, тоже бывает...

fopen ★★
()
Ответ на: комментарий от fopen

Родное приложение под android (оно использует формат CSI_RAW). Нормально работает mplayer и окно предпросмотра в jitsi. Что характерно, они используют менее трёх буферов. После того. как я принудительно установил количество буферов в 2 в модуле мерцание стало чаще и изображение стало проще различить (ранее первые 2 кадра повторялись дольше текущего) А можно подробнее, как узнать параметры захвата?

mittorn ★★★★★
() автор топика
Ответ на: комментарий от mittorn

Узнать параметры захвата:

v4l2-ctrl -d /dev/video0 --all
Попробуй захватить в формате yuyv422:
ffmpeg -pix_fmt yuyv422 -i /dev/video0 ...
Или посмотри в каком формате mplayer захватывает и делай также. Смотри вывод программ (mplayer, ffmpeg) и сравнивай.

На количество буферов не обращай внимания. Этот драйвер хочет от 3 до 5 буферов. Если попросить мешьше 3, то он поднимет до 3. Если больше 5, снизит до 5. mplayer просит мало, а ffmpeg много. Но на работоспособность это не должно влиять.

CSI_RAW? Это внутренности драйвера. В пространство пользователя такого не доходит. Откуда ты такое взял?

fopen ★★
()
Ответ на: комментарий от fopen

Из исходников модуля и теста енкодера cedarx.
И количество буферов можно уменьшить до 2 (в исходниках модуля поправить). Меньше 2 не работает.
ffmpeg и mplayer используют yuv420.

mittorn ★★★★★
() автор топика
Ответ на: комментарий от fopen

Разнцы никакой. Драйвер выдаёт EBUSY, если устройство уже открыто. Для теста закомментировал эти строки, но вывод v4l2-ctl не отличался от того, какой он без захвата. при использовании 422 поведение ffmpeg такое же.

mittorn ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.