记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

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