【记录一个问题】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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值