Задача состоит в том, чтобы скопировать кадр с QVideoFrame и, возможно, сделать что-то с этим изображением и отобразить управляемое изображение в QML.Как QVideoFrame для QImage
...
m_lastFrame = QImage(videoFrame.width(), videoFrame.height(), QImage::Format_ARGB32);
memcpy(m_lastFrame.bits(), videoFrame.bits(),videoFrame.mappedBytes());
...
Приведенный выше код вызывает сбой, поскольку m_lastFrame не хватает 32 байт (3686400 против 3686432) videoFrame.mappedBytes() сообщает 3686432 байт. Что я здесь делаю неправильно? Или как мне рассчитать размер m_lastFrame().
Код работает на Mac OSx 10.9.5 Qt 5.1.1.
Некоторый дополнительный код:
... если (VideoFrame карта (QAbstractVideoBuffer :: ReadOnly).) {
m_lastFrame = QImage(videoFrame.width(),videoFrame.height(),QImage::Format_ARGB32);
memcpy(m_lastFrame.bits(), videoFrame.bits(),videoFrame.mappedBytes() - 32);
...
} ...
Вы называли 'videoFrame.map (QAbstractVideoBuffer :: ReadOnly)' и проверил возвращаемое значение? Вы уверены, что видеокадр содержит данные ARGB32? – njahnke
Вы успешно сопоставляете (с вызовом 'map()') содержимое видеокадра в системную память перед вызовом 'videoFrame.bits()'? В этом случае я думаю, что ваша проблема должна быть решена путем правильного преобразования из формата пикселя в формат изображения. – mhcuervo
Да @njahnke. Я нахожу карту() в соответствии с вышеизложенным
–