реклама на сайте
подробности

 
 
> Синхронизация вывода видео на VGA монитор, Как синхронизировать отмасштабированное видео c VGA монитором
Flip-fl0p
сообщение Aug 20 2018, 08:01
Сообщение #1


В поисках себя...
****

Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Приверствую уважаемые посетители форума !
Возник вопрос про синхронизацию вывода изображения на VGA.
Поскольку альтеровское ядро scaler II"платное" - пришлось разработать собственный scaler в основе которого лежит алгоритм билинейной интерполяции.
Особых проблем при написании scaler у меня не возникло и моделирование показывает - что все работает правильно.
Но я столкнулся с тем, что никак не могу придумать как правильно синхронизировать вывод отмасштабированного видео с новым разрешением.
Чуть подробнее про проблему:
Допустим что scaler понижает масштаб видео с 800х600х60hz (Vertical refresh 37.878787878788 kHz) до 640х480х60Hz (Vertical refresh 31.46875 kHz). Так вот у нас получается, что не совпадают периоды Vertical refresh на этих разрешениях. И это несовпадение периодов приводит к тому, что выходной видеобуффер либо постоянно переполняется, либо слишком быстро опустошается, в зависимости от того какое разрешение масштабируется. Вот и сижу ломаю голову как правильно синхронизировать новый отмасштабированный видеопоток с выходным разрешением. Очень хотелось бы услышать подсказку от более опытных коллег !
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Flip-fl0p
сообщение Aug 22 2018, 07:45
Сообщение #2


В поисках себя...
****

Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Итак господа, провел вчера весь вечер за эксперементами. В качестве эксперемента был применен обычный синхрогенератор и генератор цветных полос. Выводы таковы:
Цитата(_4afc_ @ Aug 21 2018, 12:07) *
1. Back porch 48 pixel - может быть хоть 148
2. Back porch 33 lines - может быть хоть 133
3. pixel_clk не 25.175 MHz, а 25 175 000 импульсов в секунду, с довольно свободной скважностью.

Данное утвержение мной не совсем подтвердилось. Собственно произошло ровно то, о чем я говорил : изменение любого из параметров Back porch в небольших пределах приводит к тому что изображение смещается. Если же изменять это значение в больших пределах - то матрица не определяет синхронизациию и изображение не выводится вообще...
Но ! Если изменить соотношение Back porch и Front porch таким образом, чтобы суммарная длина строки оставалась одинаковой (для разрешения 640 x 480 длина линии равна 800 pix) - то изображение нормальное т.е. если мы увеличили значение Back porch на 50 то должны и уменьшить Front porch на 50. В случае если длина строки изменяется: Back porch увеличили на 50 а Front porch не трогали - требуется пререрасчет частоты и в этом случа мы фактиески получаем новое разрешение, которое совместимо с большинством VGA мониторов.
Думаю, можно попробовать применить данный способ в качестве синхронизации с источником. Но надо проверять на живой матрице, поймет ли она тайминги, не совпадающие с теми, что указаны в datasheet на неё. Похоже на очень и очень грязный хак. Но может и сработает !
Цитата(_4afc_ @ Aug 21 2018, 12:07) *
у меня покупной видеодатчик, когда из 1600х1200 делает 640х480 выдаёт 4 строчных синхры - потом пропуск. Его что тоже никуда не подключишь?

А можно узнать параметры выходных синхросигналов которые выдает датчик:
Какая частота pixel_clk
Каковы параметры Back porch, Front porch, sync pulse, полярность импульсов ?
Неужто он выдает 4 строчки с параметрами VESA 640х480, затем делает пропуск в одну строчку. затем опять выдает 4 строчки ? И все это делает с частотой pixel_clk разрешения 1600х1200 ?

Цитата(_4afc_ @ Aug 21 2018, 12:07) *
Почему сразу не на ЖК матрице 1024х768?

А у меня матрица такова, что она работает в точности как монитор. Пока не подашь на неё правильные тайминги - фиг вам, а не работа.

Цитата(Plain @ Aug 21 2018, 12:59) *
Итого, никакой синхронизации нет вообще, тогда как тема именно о ней.

Тема была о том, как сделать такую синхронизацию...

Цитата(Plain @ Aug 21 2018, 12:59) *
Для работы с вышеописанными минимального размера буферами Вам надо синхронизировать начала видимых областей, т.е. сбрасывать автомат по этому событию на входе.

А не будет так работать, поскольку формируя сигнал сброса по началу данных от источника - мы фактически искажаем периоды front_porch нашего выходного сигнала со всеми вытекающими последствиями в виде сдвига изображения. И пока мы передаем сигнал из домена source_data в домен Vga_sync_gen для формирования сброса - мы натыкаемся на 1 такт нестабильности - что приводит к неравномерному периоду front_porch - что приводит к дерганию изображения и сильнейшему искажению. Если интересно могу фотографию сделать, ибо этот вариант я сразу попытался применить.

Как мне кажется без буфферизации кадров во внешнем буффере не обойтись. Хотя как в IP ядрах Altera без внешнего буффера работает - пока загадка. Проведу ещё пару экспериментов и скорее всего начну делать двойную или тройную буфферизацию.
Go to the top of the page
 
+Quote Post
lembrix
сообщение Aug 24 2018, 07:07
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 13-04-17
Из: Зеленоград
Пользователь №: 96 508



Цитата(Flip-fl0p @ Aug 22 2018, 10:45) *
Данное утвержение мной не совсем подтвердилось. Собственно произошло ровно то, о чем я говорил : изменение любого из параметров Back porch в небольших пределах приводит к тому что изображение смещается. Если же изменять это значение в больших пределах - то матрица не определяет синхронизациию и изображение не выводится вообще...

Странно. Я тоже думаю, что вот эти неактивные интервалы между строками и кадрами (front porch, back porch) допускается менять в определенных пределах. Разумеется pixel clock при этом тоже плавает. Но на параметры изображения это не должно влиять, разрешение и частота кадра остаются постоянными (частота строк может при этом совпадать, а может и нет).
Я делал вывод изображения на промышленную матрицу, в спецификации на нее было указаны разрешенные диапазоны для всех этих porch-ей. Например, Vertical front porch: min = 7, recomended = 51, max = 100. Правда, horizontal back porch и vertictal back porch по спецификации менять не разрешалось, они были заданы строго.
А по задаче, самое универсальное решение это буфер на весь кадр в DDR-памяти.

Сообщение отредактировал lembrix - Aug 24 2018, 07:12
Go to the top of the page
 
+Quote Post
Alexey_Rostov
сообщение Aug 28 2018, 15:02
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312



Цитата(lembrix @ Aug 24 2018, 10:07) *
Странно. Я тоже думаю, что вот эти неактивные интервалы между строками и кадрами (front porch, back porch) допускается менять в определенных пределах. Разумеется pixel clock при этом тоже плавает. Но на параметры изображения это не должно влиять, разрешение и частота кадра остаются постоянными (частота строк может при этом совпадать, а может и нет).
Я делал вывод изображения на промышленную матрицу, в спецификации на нее было указаны разрешенные диапазоны для всех этих porch-ей. Например, Vertical front porch: min = 7, recomended = 51, max = 100. Правда, horizontal back porch и vertictal back porch по спецификации менять не разрешалось, они были заданы строго.
А по задаче, самое универсальное решение это буфер на весь кадр в DDR-памяти.


Решаю аналогичную задачу, только интерфейс HDMI. Действительно porch можно менять в определенных пределах. Масштабирование получилось только если выдавать синхросигналы все на своих местах (кроме datavalid), изменять только datavalid сигнал, причем сначала необходимо выдавать все активные пиксели.

Цитата(_4afc_ @ Aug 20 2018, 14:40) *
Возьмите картинку 800x600 отскалируйте её до 640x480 и выведите в левом верхнем углу экрана 800х600.


Можно поподробней про "отскалируйте". Как я понимаю делаем следующее: прореживаем каждую линию видео кадра, буферизируем полученный масштабированный кадр и выдаем его на экран 800х600. А если необходимо обойтись без внешней памяти для буферизации? менять пиксельклок?
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Aug 28 2018, 15:53
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Цитата(Alexey_Rostov @ Aug 28 2018, 18:02) *
Можно поподробней про "отскалируйте". Как я понимаю делаем следующее: прореживаем каждую линию видео кадра, буферизируем полученный масштабированный кадр и выдаем его на экран 800х600. А если необходимо обойтись без внешней памяти для буферизации? менять пиксельклок?


Если без внешней памяти, то нужна внутренняя память на как минимум на 4*640 точек (может две таких для буферизации двойной)

Тогда 800*5 валидных клоков надо заменить на 640*4. Т.е. на каждые 25 входящих выдать 16 наружу.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Flip-fl0p   Синхронизация вывода видео на VGA монитор   Aug 20 2018, 08:01
- - warrior-2001   Берем 3 буффера. В один пишем, из другого читаем, ...   Aug 20 2018, 08:43
|- - Flip-fl0p   Цитата(warrior-2001 @ Aug 20 2018, 11...   Aug 20 2018, 09:08
- - prostoRoman   Цитата(Flip-fl0p @ Aug 20 2018, 11:0...   Aug 20 2018, 09:34
|- - Flip-fl0p   Цитата(prostoRoman @ Aug 20 2018, 12:34) ...   Aug 20 2018, 09:50
|- - _4afc_   Цитата(Flip-fl0p @ Aug 20 2018, 13:5...   Aug 20 2018, 11:40
|- - Flip-fl0p   Цитата(_4afc_ @ Aug 20 2018, 14:40) С как...   Aug 20 2018, 12:11
|- - _4afc_   Цитата(Flip-fl0p @ Aug 20 2018, 16:1...   Aug 20 2018, 13:56
|- - _4afc_   Цитата(Flip-fl0p @ Aug 20 2018, 16:1...   Aug 21 2018, 09:24
- - _4afc_   Цитата(Flip-fl0p @ Aug 20 2018, 12:0...   Aug 20 2018, 09:38
- - Plain   1080 / 768 = 1,4 строки FIFO, округляется до 2, пл...   Aug 20 2018, 20:51
- - warrior-2001   Я вот так и не понять сути проблемы. Указал выше, ...   Aug 21 2018, 07:16
- - Flip-fl0p   Мне стыдно признаться, но даже сейчас я не совсем ...   Aug 21 2018, 08:01
|- - _4afc_   А я считаю, что 1. Back porch 48 pixel - може...   Aug 21 2018, 08:45
||- - warrior-2001   Цитата(_4afc_ @ Aug 21 2018, 11:45) у мен...   Aug 21 2018, 08:48
||- - ikm   Цитата(_4afc_ @ Aug 21 2018, 11:45) у мен...   Aug 21 2018, 09:02
|- - _4afc_   Цитата(Flip-fl0p @ Aug 21 2018, 12:0...   Aug 21 2018, 09:07
|- - prostoRoman   Цитата(Flip-fl0p @ Aug 21 2018, 11:0...   Aug 21 2018, 09:14
||- - Flip-fl0p   Цитата(prostoRoman @ Aug 21 2018, 12:14) ...   Aug 21 2018, 09:32
|- - Plain   Цитата(Flip-fl0p @ Aug 21 2018, 11:0...   Aug 21 2018, 09:59
- - Sergey_Bekrenyov   По-моему, у TC в голове все смешалось. Scaler толь...   Aug 21 2018, 19:39
|- - Flip-fl0p   Цитата(Sergey_Bekrenyov @ Aug 21 2018, 22...   Aug 22 2018, 03:51
|- - Sergey_Bekrenyov   Цитата(Flip-fl0p @ Aug 22 2018, 06:5...   Aug 23 2018, 13:45
|- - Flip-fl0p   Цитата(Sergey_Bekrenyov @ Aug 23 2018, 16...   Aug 23 2018, 15:33
|- - Sergey_Bekrenyov   Цитата(Flip-fl0p @ Aug 23 2018, 18:3...   Aug 23 2018, 18:52
|- - Flip-fl0p   Цитата(Sergey_Bekrenyov @ Aug 23 2018, 21...   Aug 23 2018, 19:07
|- - Sergey_Bekrenyov   Цитата(Flip-fl0p @ Aug 23 2018, 22:0...   Aug 24 2018, 11:37
|- - Plain   Цитата(Flip-fl0p @ Aug 22 2018, 10:4...   Aug 22 2018, 18:17
|- - Flip-fl0p   Цитата(Alexey_Rostov @ Aug 28 2018, 18:02...   Aug 29 2018, 05:12
|- - _4afc_   Цитата(Flip-fl0p @ Aug 29 2018, 08:1...   Aug 29 2018, 05:49
|- - Alexey_Rostov   Цитата(Flip-fl0p @ Aug 29 2018, 08:1...   Aug 29 2018, 06:05
|- - Plain   Цитата(Alexey_Rostov @ Aug 29 2018, 09:05...   Aug 29 2018, 06:21
||- - Alexey_Rostov   Цитата(Plain @ Aug 29 2018, 09:21) Надо у...   Aug 29 2018, 09:47
||- - Flip-fl0p   Цитата(Alexey_Rostov @ Aug 29 2018, 12:47...   Aug 29 2018, 10:26
||- - Alexey_Rostov   Цитата(Flip-fl0p @ Aug 29 2018, 13:2...   Aug 29 2018, 10:46
||- - Flip-fl0p   Цитата(Alexey_Rostov @ Aug 29 2018, 13:46...   Aug 29 2018, 10:51
|- - Flip-fl0p   Цитата(Alexey_Rostov @ Aug 29 2018, 09:05...   Aug 29 2018, 06:23
|- - _4afc_   Цитата(Alexey_Rostov @ Aug 29 2018, 09:05...   Aug 29 2018, 10:21
|- - Alexey_Rostov   Цитата(_4afc_ @ Aug 29 2018, 13:21) Вот п...   Aug 29 2018, 10:29
- - warrior-2001   Ну я же скинул ссылку на проект рабочий от Альтеры...   Aug 22 2018, 08:33
|- - Flip-fl0p   Цитата(warrior-2001 @ Aug 22 2018, 11...   Aug 22 2018, 09:02
- - Plain   Цитата(Alexey_Rostov @ Aug 29 2018, 12:47...   Aug 29 2018, 10:40
|- - Alexey_Rostov   Цитата(Plain @ Aug 29 2018, 13:40) Суммир...   Aug 29 2018, 10:53
|- - Plain   Цитата(Alexey_Rostov @ Aug 29 2018, 13:53...   Aug 29 2018, 12:31
|- - Alexey_Rostov   Цитата(Plain @ Aug 29 2018, 15:31) Нет, в...   Aug 29 2018, 13:23
|- - Plain   Цитата(Alexey_Rostov @ Aug 29 2018, 16:23...   Aug 29 2018, 13:48
|- - Alexey_Rostov   Цитата(Plain @ Aug 29 2018, 16:48) С чего...   Aug 30 2018, 05:05
- - Plain   Извлечение из поступающих сигналов полезной информ...   Aug 30 2018, 05:31
- - Flip-fl0p   Цитата(Plain @ Aug 30 2018, 08:31) Извлеч...   Aug 31 2018, 07:47
|- - Plain   Цитата(Flip-fl0p @ Aug 31 2018, 10:4...   Aug 31 2018, 09:37
|- - Flip-fl0p   Цитата(Plain @ Aug 31 2018, 12:37) Огром...   Sep 18 2018, 08:19
- - Plain   Для любой синхронизации естественно должен быть за...   Sep 18 2018, 09:29


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th August 2025 - 03:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.02144 секунд с 7
ELECTRONIX ©2004-2016