我有一個Theora視頻解碼器庫和應用程序在Windows(Intel x86架構)上使用VS-2008編譯。我使用這個設置來解碼theora比特流(* .ogg文件)。此解碼器庫的源代碼在FFMPEG v0.5源碼包中使用,並進行了一些修改,以便在windows-VS-2008組合中進行編譯。Linux-gcc編譯的C代碼輸出和MS-VS2008編譯輸出之間輸出1位差異的原因是什麼?
現在,當我解碼相同的theora比特流使用ffmpeg(V0.5)應用程序在Linux(Intel x86架構),我已經使用gcc構建,並獲得一些解碼輸出yuv文件,此輸出文件有1位差異從windows-VS2008安裝程序獲得的輸出,以及輸出文件的幾個字節的輸出,並非全部。我預計2個輸出是位匹配的。
我懷疑以下因素:
a)所述兩個編譯gcc和MS-VS2008之間的某些數據類型不匹配。?
b)我已經驗證代碼沒有使用像log,pow,exp,cos等任何運行時數學庫函數......但我的代碼仍然有一些操作,如(a + b + c)/3.這可能是一個問題嗎?
這個「除以三」或任何其他數字的實現可以在兩個設置中不同。
c。)某種舍入/截斷效應的發生方式不同嗎?
d。)我可以在Linux中將缺少的任何宏作爲makefile/configure選項丟失嗎?
但我不能縮小問題和修復它。
1.)我的懷疑是否有效,或者是否還有其他問題可能導致這兩種不同設置產生的輸出1位差異。
2.)我該如何調試和解決這個問題?
我想,這種情況下的差異在linux-gcc的設置和Windows MS編譯器之間的輸出,甚至可以是任何通用的代碼真正的(不一定是專門針對我的視頻解碼器應用的情況下)
任何指針將對此有幫助。
感謝,
〜AD
是我的回答有幫助嗎?你是否解決了這個問題?怎麼樣? – osgx 2010-03-03 18:25:59
@osgx:你的回答給了我指針,在配置ffmpeg時禁用mmx優化。構建完成後,它爲我工作。謝謝。 – goldenmean 2010-03-04 05:02:34