Название: некорректная отрисовка Отправлено: bra1ss от Февраль 16, 2012, 14:23 Имеется камера, подключенная по Ethernet. В отдельном потоке с камеры граббятся кадры
Код: void Camera::run() соответственно в классе виджета Код: connect(&camera, SIGNAL(frameReady()), this, SLOT(update())); при отображении наблюдаются "проскоки" кадров (скрин (http://i29.fastpic.ru/big/2012/0216/93/c99ea720a1a68cbea4ea30c68e61d493.jpg)) кроме того, демонстрационная программа, поставляемая с камерой (написана тоже на Qt), имеет те же самые проблемы, техподдержка ничем не помогла пробовал выводить видео средствами OpenCV - то же самое разбирал сетевой трафик - пакеты не теряются, доходят в полном объеме изменение разрешения/частоты кадров не влияет но при этом если кадры сохранять например в jpg, то они сохраняются так как надо, целыми, так что проблема именно в отображении грешу на оконную систему (Xorg), как-нибудь можно поднять ее производительность? ОС - Ubuntu 10.04, x64. Название: Re: некорректная отрисовка Отправлено: Bepec от Февраль 16, 2012, 14:29 Такое чуйство, что у вас просто смешиваются кадры ;) Попробуйте поставить задержку между передачей/грабом кадров.
Название: Re: некорректная отрисовка Отправлено: bra1ss от Февраль 16, 2012, 14:58 задержку в несколько миллисекунд ставил - результат тот же
Название: Re: некорректная отрисовка Отправлено: Rem Norton от Февраль 16, 2012, 15:04 Покажи, как создаешь поток и запускаешь.
Название: Re: некорректная отрисовка Отправлено: bra1ss от Февраль 16, 2012, 15:22 класс Camera унаследован от QThread, переопределен метод virtual void run()
В mainwidget.h объявлен объект данного класса Код: Camera camera; В конструкторе MainWidget производится инициализация камеры и запуск потока Код: camera.init(); // в init происходят вызовы методов API камеры, необходимые для запуска повторюсь, если кадры сохранять в файл вызовом camera.getImage().save, то никаких проблем нет, кадр сохраняется таким, каким он и должен быть, что-то не то с отображением Название: Re: некорректная отрисовка Отправлено: Bepec от Февраль 16, 2012, 15:28 Задержка в несколько миллисекунд????
Поставь хотя бы секунду и тогда уже смотри. Возможно у тебя наложение уже в памяти идёт? по 10 раз в 1 переменную данные не сбрасываешь? Название: Re: некорректная отрисовка Отправлено: Rem Norton от Февраль 16, 2012, 15:48 Попробуй так:
Код
Название: Re: некорректная отрисовка Отправлено: Bepec от Февраль 16, 2012, 15:51 Вообще приведи полный код потока, который у тебя принимает кадры.
Название: Re: некорректная отрисовка Отправлено: BRE от Февраль 16, 2012, 15:58 2 bra1ss
Так а "проскоки" эти постоянно происходят, каждый кадр? Или иногда проскакивают? Название: Re: некорректная отрисовка Отправлено: bra1ss от Февраль 17, 2012, 07:37 Задержка в несколько миллисекунд???? нужно хотя бы 25 кадров в секунду иметь, задержку в секунду нельзя позволитьПоставь хотя бы секунду и тогда уже смотри. 2 bra1ss не постоянно, но достаточно часто, может раз в 50 кадровТак а "проскоки" эти постоянно происходят, каждый кадр? Или иногда проскакивают? код потока camera.h Код: public: camera.cpp Код: while (capture) Название: Re: некорректная отрисовка Отправлено: Bepec от Февраль 17, 2012, 07:44 ничего даже сказать не могу, но:
"нельзя позволить задержку в секунду" - Это не для релизной версии программы!!!! А чтобы определить, есть ли ошибка в твоём коде. Я бы на твоём месте сделал проще - буфер на 50-150 изображений. В него записывать и скидывать раз в секунду в виде коллекции изображений. Потом просмотреть и понять, на каком и где и чем вызвано изменение ;) Название: Re: некорректная отрисовка Отправлено: Rem Norton от Февраль 17, 2012, 10:08 ТС, давай весь код показывай. По отпечатку левой пятки никто диагноз не ставит.
|