ccd_capture

Dec 21, 2023 17:16

Для использования ccd_capture в качестве сервера сбора изображений для нового автогида, пришлось его прилично переработать. Теперь сервер всегда хранит последнее изображение в разделяемой памяти, а клиент по умолчанию (если на том же хосте запущен, понятное дело) пытается именно из SHM изображения забирать. А если не получится, либо пользователь форсировал работу по сокету, то через сеть. Ну и сокет для изображений, т.к. он - readonly, я сделал обычным сетевым (чтобы не париться с пробросом через ssh аж двух сокетов, если хочется удаленно работать). Еще я наконец разобрался с разной битностью: изображения до 8 бит включительно хранятся в uint8_t, а с 9 до 16 - uint16_t (раньше все было в uint16_t, что для 8-биток требовало дополнительных преобразований как на сервере, так и на клиенте).
Теперь значительно веселей стало: одна-две миллисекунды - и изображение получено клиентом. Еще хочу проверить: не ускорится ли процесс, если не запрашивать состояние у сервера, а просто timestamp изображения в SHM проверять - как изменился, можно качать (т.к. эта метка изменяется уже после того, как изображение полностью считано в буфер и установлены параметры - размеры и т.п.).
Для опытов использую libdevdummy - камеру-заглушку, генерирующую синусообразный сигнал. Оказалось, что как-то недетерминировано время генерирования очередного кадра: то за 2мс формируется кадр в 1Мпикс, то аж за 25мс! Надеюсь, с реальной камерой все будет более детерминировано.
Еще бы было неплохо клиента заставлять изображения сохранять, а не сервер - чтобы не было проблем с правами (когда запускает сервер один пользователь, а другой пытается в свою директорию файлики посохранять).

всячина, c

Previous post Next post
Up