【记录一个问题】linux+opencv+cuvid解码1080P视频,当使用CUDA核函数的时候,必然崩溃...
生活随笔
收集整理的這篇文章主要介紹了
【记录一个问题】linux+opencv+cuvid解码1080P视频,当使用CUDA核函数的时候,必然崩溃...
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
崩潰的信息如下:
1 OpenCV(4.1.0-dev) Error: Gpu API call (invalid configuration argument) in videoDecPostProcessFrame, file /home/admin/opencv/opencv_contrib-master/modules/cudacodec/src/cuda/nv12_to_rgb.cu, line 203 2 terminate called after throwing an instance of 'cv::Exception' 3 what(): OpenCV(4.1.0-dev) /home/admin/opencv/opencv_contrib-master/modules/cudacodec/src/cuda/nv12_to_rgb.cu:203: error: (-217:Gpu API call) invalid configuration argument in function 'videoDecPostProcessFrame' 4 5 Aborted (core dumped)比較奇怪的點如下:
1. 同樣的程序,解碼720P視頻/480P視頻,并調用CUDA核函數做進一步處理,正常;
? ? 但是換1080P視頻就出現以上錯誤。
2.1080P視頻解碼第一幀,并計算,正常;
? ?但是第二幀的時候就發生以上錯誤。
3.寫一個空的核函數,什么也不錯,1080P視頻在解碼第二幀的時候仍然發生錯誤。
? ?如果完全不調用核函數,一切正常。
看起來不是我自己的代碼的鍋,要提交給OPENCV團隊才能解決。
==================================
2019-05-16 15:00 補充,問題已解決
關鍵問題是核函數中線程開太多了。我把代碼修改成了如下:
1 if (rows>500){ 2 _hsv_cacl_hist<<<1, rows/2>>>(data, cols, rows/2, step, channels, (uint32_t*)out->hist); 3 _hsv_cacl_hist<<<1, rows/2>>>(data+step*(rows/2), cols, rows/2, step, channels, (uint32_t*)out->hist); 4 } else { 5 _hsv_cacl_hist<<<1, rows>>>(data, cols, rows, step, channels, (uint32_t*)out->hist); 6 }(雖然很丑陋)以上代碼解決了崩潰的問題。
但是奇怪的是,為什么不在這個函數里崩潰,而要在視頻解碼里崩潰?
?
轉載于:https://www.cnblogs.com/ahfuzhang/p/10874883.html
總結
以上是生活随笔為你收集整理的【记录一个问题】linux+opencv+cuvid解码1080P视频,当使用CUDA核函数的时候,必然崩溃...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 对象的方法链式调用
- 下一篇: linux 其他常用命令