Exercise V1.0
平时做练习的时候,总要在
main
函数里面改来改去,而且做完的练习不好保存。练习了下一个,又把上一个的抹掉了。Exercise
工具包提供了一个练习的环境,可以指定执行某个函数,而不用去修改其他的东西,您所要做的就是把一个练习做成一个函数,想执行那个就执行哪个,输入那个函数的名字就
OK
了。可以把练习完整的保存下来,就这么简单。
sourceforge上下载xvid1.1.2源码编译。编译需要nasm汇编器,拷贝到VCtool目录下。
在VC6.0下,可以直接打开编译
如果是VC7.0以上,需要修改所有汇编命令成如下所示
nasm -f win32 -DPREFIX -I$(InputDir) -o $(IntDir)\$(InputName).obj $(InputPath)
编译成功。
另外在使用的时候老是碰到除零错误。错误发生在
libvidcore->decoder.c文件下面这个函数里面
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;
总算不出错了。
不知道那位兄弟碰到类似的问题,有什么更好的办法请通知我一声