Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2223830
  • 博文数量: 668
  • 博客积分: 10016
  • 博客等级: 上将
  • 技术积分: 8588
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-29 19:22
文章分类

全部博文(668)

文章存档

2011年(1)

2010年(2)

2009年(273)

2008年(392)

分类:

2009-08-14 10:57:02

3)销毁解码器实例

对应创建编码器工作,释放申请的所有内存,删除解码器句柄。

int decoder_destroy(DECODER * dec)
{
xvid_free(dec->last_mbs);           //释放宏块结构体
xvid_free(dec->mbs);                 //释放宏块结构体
image_destroy(&dec->refn[0], dec->edged_width, dec->edged_height);
//释放参考帧0的空间
image_destroy(&dec->refn[1], dec->edged_width, dec->edged_height);
//释放参考帧1的空间
image_destroy(&dec->tmp, dec->edged_width, dec->edged_height);
//释放临时帧的空间
image_destroy(&dec->cur, dec->edged_width, dec->edged_height);
//释放当前帧的空间
xvid_free(dec);                        //释放、删除解码器
return 0;
}
XviD的MPEG-4视频编/解码算法结构清晰、定点算法,非常适合硬件平台来实现。可以说XviD是目前MPEG-4算法开源代码中最优秀的工程实现。一方面XviD已经针对主流的CPU做了汇编优化,另一方面为其他平台移植提供了技术方向。如表14-1所示是XviD MPEG-4视频编/解码算法的底层模块。

表14-1  XviD MPEG-4视频CODEC底层模块

核心模块

编码

解码

功能描述

transfer_8to16copy

×

 

图像精度扩展,816

transfer_16to8copy

×

×

图像像素嵌位8位(0255

transfer_8to16sub

×

 

图像块相减,并扩展精度

transfer_16to8add

×

×

差值加到图像,并嵌位到8

transfer8x8_copy

×

 

块复制

quant_h263_intra

×

 

Intra块的h263方式量化

quant_h263_inter

×

 

Intrer块的h263方式量化

dequant_h263_intra

×

×

Intra块的h263方式反量化

dequant_h263_inter

×

×

Intrer块的h263方式反量化

Fdct

×

 

前向DCT

Idct

×

×

反向DCT

interpolate8x8_halfpel_h

×

×

水平1/2像素差值

interpolate8x8_halfpel_v

×

×

垂直1/2像素差值

interpolate8x8_halfpel_hv

×

×

斜角1/2像素差值

sad16

×

 

计算图像宏块的SAD

sad8

×

 

计算图像块的SAD

dev16

×

 

计算图像宏块的平均值的偏差

calc_cbp

×

 

计算6个块的CBP

从表14-1分析可以清晰地看出,编码器的工作包含了解码器的任务。为提高CODEC的执行效率,这些底层模块必须进行汇编优化,下面就介绍底层模块的优化方法。

阅读(830) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~