记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