最近做的项目需要实现多线程播放多路视频,但是代码经常会报insufficient thread locking around avcodec_open/close()的错误,因为在机子上貌似也能跑,就暂时没理。
今天换成在服务器上测试,因为cup速度加快,线程冲突加剧,cvCreateFileCapture((char*)pName)经常返回空指针。opencv官方并没有保证函数都是线程安全的,我估计cvCreateFileCapture的内部实现可能使用了全局变量或者静态变量,需要对cvCreateFileCapture实现同步:
EnterCriticalSection(&m_cs);
CvCapture* pcapture = cvCreateFileCapture((char*)pName);
LeaveCriticalSection(&m_cs);
insufficient thread locking around avcodec_open/close()的错误就消失了。