Чаще всего, для OSD необходим отдельный детектор синхросигналов. На самом деле, для выделения синхросигналов достаточно скорости АЦП и вычислительной мощности STM32F103 (даже STM32F100 должно хватить).
Я занялся этим вопросом и набросал небольшой проект: github.com/delfer/pOSD
Так как синхросигналы имеют отрицательный потенциал (почти всегда), видео сигнал подается через делитель к Vcc, а резистор 75 Ом к земеле - только если камера не подключена ни к какому потребителю видео сигнала: raw.githubusercontent.com/delfer/…/README.md
После включения программа определяет уровень синхросигнала (достаточно долго перебирает), затем в глобальные переменные пишется:
Формат сигнала (PAL/NTSC)
Тип текущего кадра (четный/нечетный)
Число строк в кадре
Длина строки (в тиках таймера)
Номер текущей строки
По таймеру можно определить положение в текущей строке
Теперь достаточно реализовать знакогенератор и дергать ножной (MOSI SPI) в подходящий момент. Таким образом получим OSD на одном чипе, ценой 100-200 рублей. Можно будет выводить напряжение, время, температуру со встроенного датчика. Высоту/крен/тангаж/ток и прочее, конечно, придется реализовывать дополнительными датчиками.
Я же этот проект бросил в состоянии детектора синхросигналов, так как решил перейти на цифровые камеры.
Надеюсь эта информация кому-то поможет.
Цифровые камеры - это те, что кадр в виде оцифрованной/сжатой картинки передают? Какой протокол по воздуху используется? Если не сложно, киньте, пожалуйста, ссылку на какой-нибудь пример такого видео канала.
Цифровые только камера и наложение OSD. Передача же по аналоговому тракту, в качестве резервного канала - GPRS.
Передавать видео необходимо по аналоговым каналам, так как задержки минимальны, а сильные помехи все равно позволят продолжить управление. В то время как потеря базового кадра в цифровом видеопотоке приводит к потере изображения на несколько секунд.
Касательно ссылки - вот. А камера - любая с HDMI выходом, так же GoPro, например.
Я правильно понимаю, что Вы собираетесь декодировать HDMI, накладывать OSD и опять кодировать уже в PAL/NTSC, который и передавать по радио?
Нет. Родная камера на клоне Raspberry Pi (odroid-w), интерфейс MIPI-CSI. Видео пишется на флешку в full hd, превью выводится на RCA. На превью накладывается оверлей с графикой или текстом.
Круто! И как задержка получается?
{"assets_hash":"a8b26fa7f6e768b07a72c8c9aadb9422","page_data":{"users":{"4b98340f3df9550077763668":{"_id":"4b98340f3df9550077763668","hid":62554,"name":"Vovets","nick":"Vovets","avatar_id":null,"css":""},"5368be8a3df9550077729744":{"_id":"5368be8a3df9550077729744","hid":201260,"name":"delfer","nick":"delfer","avatar_id":null,"css":""}},"settings":{"can_see_ip":false,"can_report_abuse":false,"can_see_hellbanned":false,"forum_can_view":true,"forum_can_reply":false,"forum_edit_max_time":30,"forum_can_close_topic":false,"forum_show_ignored":false,"forum_mod_can_delete_topics":false,"forum_mod_can_hard_delete_topics":false,"forum_mod_can_see_hard_deleted_topics":false,"forum_mod_can_edit_posts":false,"forum_mod_can_pin_topic":false,"forum_mod_can_edit_titles":false,"forum_mod_can_close_topic":false,"can_vote":false,"forum_mod_can_add_infractions":false,"forum_topic_title_min_length":10,"forum_reply_old_post_threshold":30,"votes_add_max_time":168,"forum_show_post_interval":7,"can_see_deleted_users":false},"section":{"_id":"61c9a54c3df9550077bb50ba","hid":8,"title":"Самодельная электроника, компьютерные программы","parent":"61c9a54c3df9550077bb50f3","description":"Софт для моделирования и черчения, самодельные электронные устройства.","is_category":false,"is_votable":true,"is_writable":true,"cache":{"topic_count":2667,"post_count":48274,"last_post":"6757f71af9bb00ab89de832d","last_topic":"6757f71af9bb00ab89de832c","last_topic_hid":572572,"last_topic_title":"DVB-T2 для FPV видео","last_ts":"2024-12-10T08:08:58.227Z","last_user":"5b0062d13df95500776fe377"}},"topic":{"_id":"5415b5453df955007701c963","hid":378338,"title":"OSD на STM32 - задел","views_count":11309,"last_post_counter":6,"cache":{"post_count":6,"first_post":"5415b5453df955007701cc29","first_ts":"2014-09-14T15:33:25.000Z","first_user":"5368be8a3df9550077729744","last_post":"541b41053df955007701cc33","last_post_hid":6,"last_ts":"2014-09-18T20:31:01.000Z","last_user":"4b98340f3df9550077763668"},"st":1,"section":"61c9a54c3df9550077bb50ba"},"subscription":null,"pagination":{"total":6,"per_page":25,"chunk_offset":0},"posts_list_before_post":["paginator","datediff"]},"locale":"en-US","user_id":"000000000000000000000000","user_hid":0,"user_name":"","user_nick":"","user_avatar":null,"is_member":false,"settings":{"can_access_acp":false,"can_use_dialogs":false,"hide_heavy_content":false},"unread_dialogs":false,"footer":{"rules":{"to":"common.rules"},"contacts":{"to":"rco-nodeca.contacts"}},"navbar":{"tracker":{"to":"users.tracker","autoselect":false,"priority":10},"forum":{"to":"forum.index"},"blogs":{"to":"blogs.index"},"clubs":{"to":"clubs.index"},"market":{"to":"market.index.buy"}},"recaptcha":{"public_key":"6LcyTs0dAAAAADW_1wxPfl0IHuXxBG7vMSSX26Z4"},"layout":"common.layout"}