1、函數的輸出型參數用&修飾。
經典案例 swap(a,b),如果把b當做輸出型參數,這個函數不會改變b。因爲值傳遞深拷貝。參考我博客c++筆記2(參考learncpp.com) - 夕西行 - 博客園 (cnblogs.com)的1部分標籤內容。
我在相機幀轉爲QImage格式時犯了這個錯誤。
在其他地方調用
這個img是空的,因爲對象img本身不會被改變。
2、圖像格式轉換爲QImage後,emit這個QImage可能出現的問題
情況一:轉換後直接emit
情況二:先調用封裝的轉換函數,再emit
這種情況可能出現 QPixmap::fromImage(img)訪問衝突,在轉換函數內用深拷貝解決。
OutImage = QImage(buffer, width, height, QImage::Format_RGB888).copy();
3、成功採集的幀指針建議深拷貝後使用。
幀指針指向的空間持續被相機清空、賦值。當採集成功時,如果讓自定義的指針 m_ptr_success 指向這個成功採集的幀指針。那麼在使用 m_ptr_success 的過程中可能造成內存讀寫衝突。
當然,也可以通過加鎖方式解決。
4、推薦使用官方相機SDK中的回調函數
當然也可以自己創建線程,將拉流死循環放在線程中執行。
5、connect不應該放在頻繁觸發函數中
如,按鈕繼續、暫停來回頻繁按下。
可以打開相機時connect,關閉相機時disconnect。