2012-07-14 110 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