任務是從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 VS 3686432) videoFrame.mappedBytes()報告3686432個字節。我在這裏做錯了什麼?或者我應該如何計算m_lastFrame()的大小。
該代碼在Mac OS X 10.9.5 Qt 5.1.1上運行。
一些額外的代碼:
... 如果(videoFrame 地圖(QAbstractVideoBuffer ::只讀)){
m_lastFrame = QImage(videoFrame.width(),videoFrame.height(),QImage::Format_ARGB32);
memcpy(m_lastFrame.bits(), videoFrame.bits(),videoFrame.mappedBytes() - 32);
...
} ...
你打電話'videoFrame.map(QAbstractVideoBuffer ::只讀)'和檢查返回值?你確定視頻幀包含ARGB32數據嗎? – njahnke 2014-12-04 16:15:52
在調用'videoFrame.bits()'之前,您是否已成功將視頻幀的內容映射到系統內存(調用'map()')?在這種情況下,我認爲你的問題應該通過將像素格式正確轉換爲圖像格式來解決。 – mhcuervo 2014-12-04 16:21:27
是@njahnke。我正在根據上面的
– 2014-12-05 10:42:00