[转]xvid 代码的几个小bug
来源:互联网 发布:车刀几何角度测量数据 编辑:程序博客网 时间:2024/04/30 09:47
转自 http://ffmpeg.blogbus.com/logs/570942.html 作者:不详
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;
/* read 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里可以修改
- [转]xvid 代码的几个小bug
- 发现Delphi 2005的几个小Bug
- xvid的学习[转]
- xvid的学习[转]
- 关于mysql5.6 decimal 类型的几个小bug
- 关于单元格编辑模式的几个小BUG
- 关于mysql5.6 decimal 类型的几个小bug
- 几个JS小代码
- 几个bug的原因
- ZLGGUI的几个BUG
- 关于H264,X264,DivX,Xvid的小知识(转载)
- 关于H264,X264,DivX,Xvid的小知识
- 关于H264,X264,DivX,Xvid的小知识 fr net
- IE6下几个小BUG解决方法
- bootstrap对于自己的小bug(需要调整的代码)
- java的数组的几个小代码程序
- vc6.0代码想vs2008转换的几个小问题
- 分享几个响应式开发的代码小技巧
- 无线宽带网卡便宜转让
- 各种字符编码方式详解及由来(ANSI,UNICODE,UTF-8,GB2312,GBK)
- [转]rmp4包简单介绍
- 为什么我没有在工作中使用Grails?
- ASP.NET 页面中 滚动当前系统时间
- [转]xvid 代码的几个小bug
- GB2312字符集显示
- Qt3和Qt4版本差异带来的问题和解决方法
- 华中Ⅰ型车削数控系统
- 实现模拟鼠标点击
- [转]读取码流的函数
- UML正日薄西山的13个理由
- 使用Qt Style Sheet(2)
- 右键菜单调用命令行