您好,欢迎光临本网站![请登录][注册会员]  
文件名称: xvid 代码的几个小bug
  所属分类: C
  开发工具:
  文件大小: 94kb
  下载次数: 0
  上传时间: 2010-04-29
  提 供 者: shamo******
 详细说明: 1. idct.c中void idct_int32(short *const block)函数 定义了几个中间变量 X0,X1,X2,X3,X4,X5...X8 变量类型使用了 static long 结果虽然不会出错,但是影响性能,因为static 变量在退出函数后还需要保留该变量的值,增加了运算量,而非static变量,则可以通过编译 器优化,能使该变量为寄存器变量,减少内存访问的时间。本人测试了2000帧QVGA(320x240)图像,其中static变量的idct耗时8.6s,而非 static的只要5.3s,可见对效率影响挺大。 不过,俺刚看了xvid 1.03版本已经将这个代码改过来了,xvid 1.01和0.91都是static的。 2.xvid_decraw.c中main函数中 if (already_in_buffer > 0) memcpy(mp4_buffer, mp4_ptr, already_in_buffer); /* Update mp4_ptr */ mp4_ptr = mp4_buffer; /* r ead new data */ if(feof(in_file)) break; 这段代码将导致,码流没有结束而提前退出程序的情况 因为在读文件的时候,文件结束并不代表,缓冲区中的数据也被读完了,缓冲区大小为 #define BUFFER_SIZE (2*1024*1024) //2兆啊 所以,即使遇到文件结束,也应该继续解码,直道already_in_buffer的值为0 3.bitstream.h中的static void __inline BitstreamInit()函数 ptr_t adjbitstream = (ptr_t)bitstream; /* * Start the stream on a uint32_t boundary, by rounding down to the * previous uint32_t and skipping the intervening bytes. */ bitpos = ((sizeof(uint32_t)-1) & (size_t)bitstream); adjbitstream = adjbitstream - bitpos; bs->start = bs->tail = (uint32_t *) adjbitstream; 该段代码,直接将位流指针设置成整型,在x86处理器下可以正常运行,而有些处理器是不支持在非32位对齐的地址做字(32bits)读取的,除非编译器做额外处理。 可以做改动的是,在传入参数时,就将其设置为字对齐的。如果是一个地址为addr,将其改为 addr&-4,低两位强制设0。这在xvid_decraw.c里可以修改 ...展开收缩
(系统自动生成,下载前可以参看下载内容)

下载文件列表

相关说明

  • 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
  • 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度
  • 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
 相关搜索: xvid 代码\小bug
 输入关键字,在本站1000多万海量源码库中尽情搜索: