記NVIDIA多路視頻解碼處理的幾個問題和解決方案

背景

當前項目需求是使用GPU進行多路視頻解碼處理,解碼幀繼續進行ORB特徵提取,然後生成vlad聚合特徵,最後對其數據進行檢索

問題

  • NVIDIA Video Codec庫提供的解碼實例中對於頭部有些許問題的視頻無法處理

這個還沒有解決 想要從ffmpeg入手看看能否搞定 因爲解封裝的操作是ffmepg庫的接口調用實現

  • NVIDIA多線程處理結束後從GPU取出cv::cuda::GpuMat時發生內存錯誤

這個已經解決
1、多線程中每個線程需要使用獨立的一個CuContext cuda上下文進行處理 之前沒有注意到這個問題
2、使用全局變量stl的容器進行緩存時,vector的push_back操作是淺拷貝 導致出現問題
push_back的 參數使用 GpuMat.clone() 函數進行深拷貝 解決

  • ORB處理數據使用的是灰度圖像,所以當Video Codec庫解碼數據是NV12類型時,直接提取Y分量即可,不用做YUV–>RGB的轉換,前期浪費了一個星期研究這個用不到的轉換

需求開發的時候有時候需要兼顧前後流程,不然白白浪費時間

參考

1、NVIDIA Video Codec 9.1
2、Opencv 3.4.4
3、DBoW3
4、Faiss 1.5.3
5、Cuda 10.1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章