我有我生命中最奇怪的错误。我已经使用自制软件安装了 ffmpeg。我从 dll 中使用它。我设置了一个锁管理器,因为我使用来自多个线程的 ffmpeg。
在 Engine.h 中:
class EXPORT_LIB Engine
{
public:
static int initEngine();
static int closeEngine();
};
在 Engine.cpp 中:
static int ff_lockmgr(void **mutex, enum AVLockOp op)
{
if (NULL == mutex)
return -1;
switch(op)
{
case AV_LOCK_CREATE:
{
*mutex = NULL;
boost::mutex * m = new boost::mutex();
*mutex = static_cast<void*>(m);
break;
}
case AV_LOCK_OBTAIN:
{
boost::mutex * m = static_cast<boost::mutex*>(*mutex);
m->lock();
break;
}
case AV_LOCK_RELEASE:
{
boost::mutex * m = static_cast<boost::mutex*>(*mutex);
m->unlock();
break;
}
case AV_LOCK_DESTROY:
{
boost::mutex * m = static_cast<boost::mutex*>(*mutex);
delete m;
break;
}
default:
break;
}
return 0;
}
int Engine::initEngine()
{
int res = -1;
res = av_lockmgr_register(&ff_lockmgr);
av_register_all();
av_log_set_level(AV_LOG_QUIET); // ERROR, PANIC
// Av lock manager success
if( res == 0 ) {
res = MULTITHREAD;
}
else {
res = SINGLETHREAD;
}
return res;
}
int Engine::closeEngine()
{
int res = 0;
res = av_lockmgr_register(NULL);
return res;
}
到目前为止一切顺利,一切都按预期工作。
当我使用 CMake fix_bundle 部署我的应用程序时。我有一条错误消息
avcodec_open/close() 周围的线程锁定不足
如果我在自定义位置手动编译 ffmpeg,当我部署应用程序时,一切都会按预期工作。自制软件有什么问题?