2012-07-14 56 views
2

我编写了解码许多.flv视频文件的代码。每个视频文件都由一个单独的线程解码。 当我尝试1线程时,一切正常。但是当我尝试使用2个以上的线程时,总会出现错误“avcodec_open/close()周围的线程锁定不足”。使用带多线程的FFMPEG解码h264文件时出错?

我已搜查,我知道()avcodec_open的功能和avcodec_close()不是线程安全的。 之后,我将互斥锁锁定在两个函数被调用的地方。

lockObj.Lock(); 
avcodec_open/close(); 
lockObj.UnLock(); 

但是仍然发生错误“围绕avcodec_open/close()的线程锁定不足”。

有人能告诉我该如何解决?

非常感谢,

牛逼& T组

回答

0

lockObj在每一个线程相同的对象?

互斥的点是从在同一时间打电话avcodec_open()停止多个线程。其他线程应停止并等待lockObj.Lock()语句,直到第一个线程调用lockObj.UnLock()。这是不可能的,如果每个线程都有自己的lockObj

我已经使用QMutex(来自Qt)这种方法,所以我知道这是可能的。

+0

感谢您的回复,niahnke! 我确定lockObj是每个线程中的同一个对象,因为lockObj和所有线程都在同一个文件中声明。 – TTGroup 2013-09-15 03:16:26