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

 
 
> Межкадровое вычитание в реальном времени
edren_baton
сообщение Mar 5 2014, 09:10
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 81
Регистрация: 13-10-08
Пользователь №: 40 915



Всем доброго времени суток!

Есть у меня задача: в видеосистеме реализовать межкадровое вычитание и результат этого вычитания выводить.

По моим представлениям, для этого потребуется три буфера в памяти:
1. Предыдущий кадр
2. Текущий кадр
3. Результат вычитания (используется для обеспечения непрерывности вывода данных)

На данный момент работает следующая система на шине Avalon-ST:

Clocked Video Input >> Всякие фильтры >> Frame Buffer (данные во внешней памяти RAM) >> Clocked Video Output

Есть мысли для решения применить SGDMA в следующем ключе:
- после "Всякие фильтры" устанавливаем SGDMA (stream to memory). Им заполняем 2 буфера памяти (два разных кадра).
- nios напрямую соединен с памятью, с его помощью происходит сравнение кадров и запись результата в 3й буфер.
- затем стоит SGMDA (memory to stream) и FIFO с выводом на clocked video output. Есть ли смысл вместо этой связки (SGDMA и FIFO) использовать Frame Buffer (можно ли этим компонентом напрямую из памяти читать, убрав вход Avalon Sink)?

Будет ли работать такая система? Насколько этот вариант оптимален?

Прошу помощи в определении направления дальнейших действий.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 5)
o_khavin
сообщение Mar 5 2014, 11:08
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 230
Регистрация: 29-08-09
Пользователь №: 52 094



Для начала имеет смысл посчитать, хватит ли производительности NIOS-а для этой задачи.
Кроме того, было бы весьма рационально считать разницу сразу с приходящим сигналом (и буфером предыдущего кадра), а не сначала сохранять данные в память, а потом уже их читать для сравнения. Т.е. приходящие данные используются для сравнения и тут же пишутся в буфер (который будет использован на следующем кадре). В таком варианте двух буферов действительно хватит, в отличии от Вашей идеи, которая не учитывает, что видео как правило идёт непрерывно.
Результат сравнения тоже имеет смысл сразу выводить на выход. По крайней мере совершенно не понятно, зачем его где-то хранить перед выводом, если речь идёт про поточные операции.
Go to the top of the page
 
+Quote Post
warrior-2001
сообщение Mar 5 2014, 11:35
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-08
Из: Таганрог, Ростовская обл.
Пользователь №: 40 792



Самое простое - на пролете делать вычисление/вычитание и по интерфейсу AvalonST подавать на вход Frame Buffer. В зависимости от его настроек он сам выделит в памяти 2-3 страницы и будет со скоростью выходного потока читать их из памяти и выдавать! И никакого ниоса!
Блоки Clocked Video Input, Frame Buffer и Clocked Video Output ненадёжны в версии 11.1 SP2. Есть косяки в формировании потока при срывах синхронизации!


--------------------
Глупцы игнорируют сложность. Прагматики терпят ее. Некоторые могут избегать ее. Гении ее устраняют.
Go to the top of the page
 
+Quote Post
boul
сообщение Mar 5 2014, 12:19
Сообщение #4





Группа: Участник
Сообщений: 11
Регистрация: 25-02-14
Пользователь №: 80 677



Цитата(o_khavin @ Mar 5 2014, 13:08) *
Для начала имеет смысл посчитать, хватит ли производительности NIOS-а для этой задачи.
Кроме того, было бы весьма рационально считать разницу сразу с приходящим сигналом (и буфером предыдущего кадра), а не сначала сохранять данные в память, а потом уже их читать для сравнения. Т.е. приходящие данные используются для сравнения и тут же пишутся в буфер (который будет использован на следующем кадре). В таком варианте двух буферов действительно хватит, в отличии от Вашей идеи, которая не учитывает, что видео как правило идёт непрерывно.
Результат сравнения тоже имеет смысл сразу выводить на выход. По крайней мере совершенно не понятно, зачем его где-то хранить перед выводом, если речь идёт про поточные операции.


Да, все верно, достаточно двух буферов. Я сам так и делаю.
Во время прихода пикселей текущего кадра подгружать соответствующие пиксели предыдущего. Приходящие пиксели кадра записывается на место тех же пикселей предыдущего кадра. Нужно учесть что скорость работы с памятью должна быть в 2 раза выше скорости входного потока. Результат операции вычитания на выход. Что, кстати, будет выходом? Запись в другую память? внешний интерфейс?
Go to the top of the page
 
+Quote Post
edren_baton
сообщение Mar 5 2014, 20:39
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 81
Регистрация: 13-10-08
Пользователь №: 40 915



Всем спасибо за ответы!

Цитата(o_khavin @ Mar 5 2014, 15:08) *
Для начала имеет смысл посчитать, хватит ли производительности NIOS-а для этой задачи.
...
Результат сравнения тоже имеет смысл сразу выводить на выход. По крайней мере совершенно не понятно, зачем его где-то хранить перед выводом, если речь идёт про поточные операции.


Если Nios не будет успевать, то третий буфер позволит выводить не битые кадры, пусть и повторяющиеся.

Цитата(warrior-2001)
Самое простое - на пролете делать вычисление/вычитание и по интерфейсу AvalonST подавать на вход Frame Buffer. В зависимости от его настроек он сам выделит в памяти 2-3 страницы и будет со скоростью выходного потока читать их из памяти и выдавать! И никакого ниоса!
Блоки Clocked Video Input, Frame Buffer и Clocked Video Output ненадёжны в версии 11.1 SP2. Есть косяки в формировании потока при срывах синхронизации!

На пролете эт, конечно, хорошо. =) А как правильно подгрузить информацию о предыдущем кадре? Если потребуются более сложные функции, та же корреляция, например, не слишком ли жестоко будет руками на HDL писать?
Через nios удобно управлять настройками отдельных блоков, так что совсем без него - тоже не очень )
Про 11.1 спасибо, но я 13й версией пользуюсь ) На моей памяти одна из самых стабильных была 9я версия, потом разом на 13ю перешел.

Цитата(boul)
Да, все верно, достаточно двух буферов. Я сам так и делаю.
Во время прихода пикселей текущего кадра подгружать соответствующие пиксели предыдущего. Приходящие пиксели кадра записывается на место тех же пикселей предыдущего кадра. Нужно учесть что скорость работы с памятью должна быть в 2 раза выше скорости входного потока. Результат операции вычитания на выход. Что, кстати, будет выходом? Запись в другую память? внешний интерфейс?


Подскажите, пожалуйста, механизм подгрузки предыдущих пикселей. =) Все эт хозяйство идет на Clocked Video Output, а там на монитор.
Go to the top of the page
 
+Quote Post
boul
сообщение Mar 6 2014, 07:04
Сообщение #6





Группа: Участник
Сообщений: 11
Регистрация: 25-02-14
Пользователь №: 80 677



Механизм это уже чисто схемотехническое решение, зависит, например, от типа памяти которую вы используете, у меня стоит DDR.
DDR controller -> FIFO -> Схема вычитания -> OUT
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 15:29
Рейтинг@Mail.ru


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