09年9月10日记--Xvid与闷热的成都

    昨天上完这个星期的最后一节计算机体系结构,因为实在忍受不了学校寝室的闷热,我搬回了家。临近夜幕中的三环,天阴蒙蒙的,不过却是个下雨的好征兆。行驶间天空下起了雨,一颗一颗的水滴穿过车窗打在了我身上。久违的雨啊,在9月成都的闷热中,让我感觉到一丝兴奋。

    其实9月的成都也算是个多雨的季节,不过和南京相比,也许就不值得一提了吧。就像成都的我与南京的她一样。

    今早醒来,奶奶已经回来了。所以我也开始摸索Xvid的应用。

    我不太清楚Xvid与H264在编解码方面的差异,不过今天的我,更愿意看看Xvid的代码,是如何实现的。在网上下了个linux的xvid1.2.2版本,里面自带了一个encraw的例子,今天大部分的时间也用在了对其代码结构的理解上。

    对于我这个不懂音视频数据编码的人来说,Xvid是比较复杂的,不过我想,这也是种机遇,因为之前实现过YUV格式的摄像头数据采集与传输,所以养成了个习惯:不管代码内容有多复杂难懂,只关心几个方面,1就是encode前的数据类型与size,2就是encoded过的数据类型与size,3就是参数。粗略看了下,Xvid需要init操作的参数有很多,有些可以通过命名猜到意思,有些让我很费解的就忽略过去。可能我一开始只是想浅尝辄止的缘故,所以我宁愿花更多的时间研究怎样对代码进行移植,而不是注重对程序的优化。

    今天收获的Xvid编码流程大概如下:

   /*------------------------------------------------------------------------
      * XviD core initialization
    *----------------------------------------------------------------------*/
    xvid_gbl_init_t xvid_gbl_init;
    memset(&xvid_gbl_init, 0sizeof(xvid_gbl_init));
    xvid_gbl_init.version = XVID_VERSION;
    xvid_gbl_init.cpu_flags = XVID_CPU_FORCE;
     /* Initialize XviD core -- Should be done once per __process__ */
    xvid_global(NULL, XVID_GBL_INIT, &xvid_gbl_init, NULL);

  /*------------------------------------------------------------------------
     * XviD encoder initialization
    *----------------------------------------------------------------------*/
    memset(&xvid_enc_create, 0sizeof(xvid_enc_create));
    xvid_enc_create.version = XVID_VERSION;
    /* Width and Height of input frames */
    xvid_enc_create.width = 320;(实现的QT程序中视频输出大小)

    xvid_enc_create.height = 240;(实现的QT程序中视频输出大小)

    xvid_enc_create.profile = XVID_PROFILE_AS_L4;  //不清楚什么意思

    ..........

    ..........

    然后是encode。特别注意的是malloc的内存大小

 

    与之前单纯的YUV转RGB不同,Xvid支持很多种格式到mpeg4或avi的转换,所以可以封装一个简单的视频编码的类以便今后调用。

    ps:今天看了零秒出手第9集有点小郁闷...

   

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值