LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1187|回复: 3

realtang,请教一些xvid的问题。

[复制链接]
发表于 2006-11-27 15:46:13 | 显示全部楼层 |阅读模式
从xvid.org下载了xvid最新版的源码。想用它对视频数据进行编解码。按照example包里的程序,我照着试了一下。
我用的是qcif(176x144,YUV420,90帧)的标准的测试序列,我用xvid_encore(调用enc_main)对序列进行编码(这个倒是很顺利的,也不知道对不对,源文件是3421440字节,压缩后变成了272688字节,我在每帧解出来的数据前自己加了一个头),然后再用xvid_decore(调用dec_main)进行解码,这儿就出问题了。
dec_main(unsigned char *istream, unsigned char *ostream, int istream_size,xvid_dec_stats_t *xvid_dec_stats )
这儿我应该理解的不对,我依次将前面压缩出来的每一帧及其长度作为istream,和istream_size,结果却发现dec_main的返回值竟然比istream_size还要小,我本来认为解出来的值应该是原始YUV一帧数据的大小(38016字节),大概是概念性的错误吧。我又看了一下它的代码,输出格式好像是pnm或者tag格式的。搞不清楚怎么回事情了。

想问一下我对dec_main三个参数的理解是否有误,这个函数的返回值是什么意思,如果我想用前面经过我压缩的数据从新解回yuv数据该怎么做?
发表于 2006-11-28 09:25:11 | 显示全部楼层
istream是压缩后的帧的首地址,ostream是解压缩后YUV或者RGB数据的首地址,至于输出的具体image format是受某个参数控制的(抱歉时间太久,忘记了),stream_size是指输入的压缩帧的数据字节长度。
还有,最好不要自己在压缩后的数据上再加头,不如另外开个文件,把你的meta信息填进去为好。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-28 09:43:17 | 显示全部楼层
这样看来我的理解是正确的,不知道为什么出错。难道前面压缩时就压缩错了,再看看。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-28 15:20:25 | 显示全部楼层
呵呵!是我搞错了。我还以为解码也是跟编码一样一帧一帧地来的呢!其实人家是要一下子好几帧的数据才解出一帧的。不仅有帧内压缩,还有帧间压缩,缺乏编解码常识啊。我还奇怪你为什么叫我压缩的时候不要加自己的头呢,哈哈。也是自己懒。现在正常了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表