多个线程中创建 cuvid 解码器,为其主线程中创建的CUcontext ,结束时在主线程中释放后会导致其他线程中的cuvid解码过程出错,错误函数在HandlePictureDisplay 中的cudaGraphicsSubResourceGetMappedArray处,错误码为709 cudaErrorContextIsDestroyed 。这是偶尔出现的,原因不明。
解决办法,在子线程中为其创建CUcontext对象。并且在子线程中释放。
吐槽下,cuvid(自己用cuvid sdk开发的)相对于D3d11va(ffmpeg中的D3d11va) 差很多,cuvid添加一个1920*1080 的decode显存就两百多M,2226*1252 达到400多M。关键解码时间效率还远比D3d11va 差(成倍的)。可能是自己代码问题,也没有拿ffmpeg中的cuvid来做对比。