Exercise V1.0
平時(shí)做練習(xí)的時(shí)候,總要在
main
函數(shù)里面改來改去,而且做完的練習(xí)不好保存。練習(xí)了下一個(gè),又把上一個(gè)的抹掉了。Exercise
工具包提供了一個(gè)練習(xí)的環(huán)境,可以指定執(zhí)行某個(gè)函數(shù),而不用去修改其他的東西,您所要做的就是把一個(gè)練習(xí)做成一個(gè)函數(shù),想執(zhí)行那個(gè)就執(zhí)行哪個(gè),輸入那個(gè)函數(shù)的名字就
OK
了。可以把練習(xí)完整的保存下來,就這么簡(jiǎn)單。
sourceforge上下載xvid1.1.2源碼編譯。編譯需要nasm匯編器,拷貝到VCtool目錄下。
在VC6.0下,可以直接打開編譯
如果是VC7.0以上,需要修改所有匯編命令成如下所示
nasm -f win32 -DPREFIX -I$(InputDir) -o $(IntDir)\$(InputName).obj $(InputPath)
編譯成功。
另外在使用的時(shí)候老是碰到除零錯(cuò)誤。錯(cuò)誤發(fā)生在
libvidcore->decoder.c文件下面這個(gè)函數(shù)里面
static void
decoder_bframe(DECODER * dec,
??????? Bitstream * bs,
??????? int quant,
??????? int fcode_forward,
??????? int fcode_backward)
的 如下代碼處:
?case MODE_DIRECT_NONE_MV:
??????? for (i = 0; i < 4; i++) {
??????????? mb->mvs[i].x = last_mb->mvs[i].x*dec->time_bp/dec->time_pp + mv.x;
????????? mb->mvs[i].y = last_mb->mvs[i].y*dec->time_bp/dec->time_pp + mv.y;
????????? mb->b_mvs[i].x = (mv.x)
??????????? ?? mb->mvs[i].x - last_mb->mvs[i].x
??????????? : last_mb->mvs[i].x*(dec->time_bp - dec->time_pp)/dec->time_pp;
????????? mb->b_mvs[i].y = (mv.y)
??????????? ? mb->mvs[i].y - last_mb->mvs[i].y
??????????? : last_mb->mvs[i].y*(dec->time_bp - dec->time_pp)/dec->time_pp;
??????? }
??????? decoder_bf_interpolate_mbinter(dec, dec->refn[1], dec->refn[0],
??????????????????????? mb, x, y, bs, 1);
??????? break;
沒辦法,源碼也看不懂,但是又必須使用,加了一句:
if(dec->time_pp == 0)
????continue;
總算不出錯(cuò)了。
不知道那位兄弟碰到類似的問題,有什么更好的辦法請(qǐng)通知我一聲