2006 07 08 12 04 編譯 xvidcore.dll

之前在看Eureka Seven時,老是看幾十分鐘,xvidcore.dll便掛掉。今天比較有空抓xvid的source code下來,自己來編譯。還算蠻順利的,除了要去抓nasm下來,把nasmw.exe rename成 nasm.exe,還有把uint64_t改成int64_t的型態,因為VC6似乎無法做型別轉換(從uint64_t轉成double),還改了一下.dsw裡面的nasm.exe(指定成完整路徑)。剩下的就很順利的編譯完成。不過,似乎只是變好一些些。沒有之前掛得那麼誇張。似乎還是有問題。只好自己來debug。根據掛掉的assembler的位置,找到是在srcbitstreammbcoding.c 裡面的 get_intra_block()

#ifdef _DEBUG
if(coeff>=64) {
DPRINTF(XVID_DEBUG_ERROR,"error: overflow in coefficient indexn");
return;
}
#endif
+ if(coeff>=64) {
+ return;
+ }
block[scan[coeff]] = level;

增加了一段程式碼,讓 Xvid 發生 overflow 的時候,直接跳開不要繼續。到目前為止,似乎沒有甚麼問題了。還在繼續觀察中....

PS: 後來還是有再發生crash的情形,還是發生在 mbcoding.c 這個檔案裡,關於overflow 的情況,似乎原作者都把overflow用_DEBUG去定義,這導致當在build Release版時,遇到overflow時,都會直接當掉。目前只好見一個改一個。