LibAv/FFMpeg的线程安全性?

use*_*512 5 c c++ ffmpeg thread-safety libav

LibAV/FFMpeg线程安全吗?例如.我可以从一个线程使用AVFormatContext*文件读取,而在另一个与互斥的简单的加法解码读取包时,它或者是"不知道不关心"的交易类型库的线程safetyness?我知道libav对编码器线程有基本的支持,但我正在尝试更多的黑盒类型方法,我将其分解为多个线程(源 - >解码器 - >过滤器 - >编码器 - >接收器)并试图了解并发症这样的.

任何对ffmpeg和线程有任何经验的人都希望与任何其他与此相关的信息相互关联,也将非常感激.

pog*_*kiy 8

您可以注册自己的锁管理器.ffmpeg库将控制线程安全性.

例:

 ::av_lockmgr_register(&my_lockmgr_cb);


 //// ..........

 int my_lockmgr_cb(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;
Run Code Online (Sandbox Code Playgroud)

}