Size: a a a

2020 June 01

F

FPOHTMEH in Qt
Alex
а где гарантия, что это не access violation? Читаем следующий символ за границами буфера, он случайно оказался 0, и мы радуемся, что всё работает. А на самом деле нет.
Документация неубедительная?
источник

A

Alex in Qt
убедительна, но мне бы в голову никогда не пришло, что data() может так себя вести и что этот метод будет перевыделять данные
источник

A

Alex in Qt
спасибо за инфу
источник

A

Alex in Qt
бред какой-то
источник

M

Mr.Mait in Qt
https://doc.qt.io/qt-5/qbytearray.html#data там говорится про \0
источник

F

FPOHTMEH in Qt
Alex
убедительна, но мне бы в голову никогда не пришло, что data() может так себя вести и что этот метод будет перевыделять данные
я не думаю что он перевыделяет данные, это грубейший тупняк.
источник

F

FPOHTMEH in Qt
FPOHTMEH
я не думаю что он перевыделяет данные, это грубейший тупняк.
Видимо QByteArray уже хранит 0 в конце, для совместимости.
Всегда можно залезть в реализацию
источник

A

Alex in Qt
или так
источник

M

Mr.Mait in Qt
Там же по ссылке выше есть пример как не правильно и как правильно работать с char*
источник

A

Alex in Qt
Здравствуйте, вопрос по gstreamer.
Есть объект камеры, крутящийся в своём потоке, в котором инициализируется, настраивается работа с gstreamer. Необходимо видео с камеры вытянуть на виджет. В одном потоке,юзая  gst_video_overlay_set_window_handle  все работает нормально, а если камера в другом потоке, не даёт работать, как я понял, эта функция устанавливает qwidget родителем (или потомком) для gstelement'а.
Как можно это обойти? Может я вообще с архитектурной стороны не правильно подошёл и работу с gstream надо делать в одном потоке с гуишным?
P. S. К сожалению на данный момент под рукой ничего нет, чтоб накидать примерный код, а по памяти не помню как все точно реализовано, могу ошибиться
источник

d0

dOzeR 007 in Qt
Alex
Здравствуйте, вопрос по gstreamer.
Есть объект камеры, крутящийся в своём потоке, в котором инициализируется, настраивается работа с gstreamer. Необходимо видео с камеры вытянуть на виджет. В одном потоке,юзая  gst_video_overlay_set_window_handle  все работает нормально, а если камера в другом потоке, не даёт работать, как я понял, эта функция устанавливает qwidget родителем (или потомком) для gstelement'а.
Как можно это обойти? Может я вообще с архитектурной стороны не правильно подошёл и работу с gstream надо делать в одном потоке с гуишным?
P. S. К сожалению на данный момент под рукой ничего нет, чтоб накидать примерный код, а по памяти не помню как все точно реализовано, могу ошибиться
Как видео обновляется? По событию готов кадр или по таймеру? Скорее всего дело в том, что потоки имеют свои очереди обработки сообщений, самый, наверное, простой подход будет делать всю работу в основном потоке где гуи. В другом случае придется подробнее изучить как синхронизировать потоки в Qt.
источник

VK

Valentin Kornienko in Qt
Alex
Здравствуйте, вопрос по gstreamer.
Есть объект камеры, крутящийся в своём потоке, в котором инициализируется, настраивается работа с gstreamer. Необходимо видео с камеры вытянуть на виджет. В одном потоке,юзая  gst_video_overlay_set_window_handle  все работает нормально, а если камера в другом потоке, не даёт работать, как я понял, эта функция устанавливает qwidget родителем (или потомком) для gstelement'а.
Как можно это обойти? Может я вообще с архитектурной стороны не правильно подошёл и работу с gstream надо делать в одном потоке с гуишным?
P. S. К сожалению на данный момент под рукой ничего нет, чтоб накидать примерный код, а по памяти не помню как все точно реализовано, могу ошибиться
По хорошему вы должны готовить видео-кадр в отдельном потоке и атомарно его подсовывать на рендеринг в UI- поток
источник

A

Alex in Qt
dOzeR 007
Как видео обновляется? По событию готов кадр или по таймеру? Скорее всего дело в том, что потоки имеют свои очереди обработки сообщений, самый, наверное, простой подход будет делать всю работу в основном потоке где гуи. В другом случае придется подробнее изучить как синхронизировать потоки в Qt.
Все делает gstreamer. Я вот только вчера в него начал вникать немного, как там внутрях работает, не знаю
источник

A

Alex in Qt
dOzeR 007
Как видео обновляется? По событию готов кадр или по таймеру? Скорее всего дело в том, что потоки имеют свои очереди обработки сообщений, самый, наверное, простой подход будет делать всю работу в основном потоке где гуи. В другом случае придется подробнее изучить как синхронизировать потоки в Qt.
Вот вопрос, насколько это будет тормозить при работе в одном потоке? 🤔
источник

VK

Valentin Kornienko in Qt
Alex
Вот вопрос, насколько это будет тормозить при работе в одном потоке? 🤔
Основательно
источник

A

Alex in Qt
Valentin Kornienko
По хорошему вы должны готовить видео-кадр в отдельном потоке и атомарно его подсовывать на рендеринг в UI- поток
Можно поподробнее, как это реализуется, пожалуйста?
Я с видео на вы)
источник

VK

Valentin Kornienko in Qt
Код не напишу, с телефона. Если вкратце, вы заводите шеред указатель на вашу картинку. Рендерит ее UI поток. По готовности нового кадра видео и готовности канваса для отрисовки брать новый кадр- делаете atomic_store картинке, подменяя буфер, в который вы рисовали
источник

A

Alex in Qt
Valentin Kornienko
Код не напишу, с телефона. Если вкратце, вы заводите шеред указатель на вашу картинку. Рендерит ее UI поток. По готовности нового кадра видео и готовности канваса для отрисовки брать новый кадр- делаете atomic_store картинке, подменяя буфер, в который вы рисовали
Если я не ошибаюсь, так построена часто работа в opencv. Или ошибаюсь?
источник

VK

Valentin Kornienko in Qt
Alex
Если я не ошибаюсь, так построена часто работа в opencv. Или ошибаюсь?
Это в принципе обычный подход, достаточно
источник

A

Alex in Qt
Valentin Kornienko
Это в принципе обычный подход, достаточно
Спасибо, Почитаю, поразбираюсь.
источник