Как визуализировать изображения из разных потоков в режиме реального времени? - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть 4 объекта камеры.Каждый объект камеры обновляет кадры независимо.Я хотел бы визуализировать эти кадры в моем классе видеостены.По сути, моя видеостена - это просто дочерний элемент сетки с методами Draw Widget.

Каждый объект камеры имеет виджет imageHolder.Виджет ImageHolder является дочерним по отношению к qOpenglWidget с

void OpenGLImageHolder::display(const QImage* img)
{
    m_image = img;
    this->update();
}

void OpenGLImageHolder::paintEvent(QPaintEvent*)
{

    QPainter painter(this);
    painter.drawImage(this->rect(), *m_image);
}

Каждый держатель изображений имеет QTimer, а QTimer :: timeOut () подключен к OpenGLImageHolder :: display ().

К сожалению, с этой настройкой я могу одновременно визуализировать только 3 камеры.Если я добавлю 4-ую камеру, одна из трех (или двух) зависнет.Я знаю, что было вызвано отображение, потому что, когда я изменяю размер виджета, я получаю правильное обновление изображения.

Как правильно сделать videoWall?Должен ли я сделать один openglWidget с собственным окном, а затем рисовать изображения непосредственно на этом openglWidget?Какие инструменты можно использовать для профилирования поведения (кажется, что стандартного профилировщика msvs недостаточно).

1 Ответ

0 голосов
/ 21 сентября 2018

Мой дизайн:

Каждая камера использует поток, который подготавливает изображение.Изображение создается при необходимости или по таймеру.Когда он готов, поток сигнализирует основной поток.

Основной поток обрабатывает сигнал.Загружает изображение в графический процессор как текстуру и рисует его простым квадом.

Хитрость заключается в том, чтобы использовать уникальное окно, но разные glViewport для каждой камеры.


Другим решением является использование текстуры для всего окна и обновление прямоугольника, используемого каждой камерой.

...