首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > 多媒体 >

如何用 x264 解码

2012-08-07 
怎么用 x264 解码?[color#3366FF][/color][size12px][/size]我想用 x264 的库对 yuv 文件进行压缩和解压

怎么用 x264 解码?
[color=#3366FF][/color][size=12px][/size]我想用 x264 的库对 yuv 文件进行压缩和解压,现在就是编码还凑合着,但是解码不会,请有经验的人指导一下。

[解决办法]
公司规定,源代码没办法给你,不过给你提供下思路吧。
我用的是FFMpeg的H264解码器,大概的实现过程如下:
1、引入avcodec.h、avformat.h、swscale.h
2、用av_register_all()注册下,当然,你也可以根据需要仅注册自己需要用到的部分(如:avcodec_init()、avcodec_register_all())
3、在真正进行解码前你有几项准备工作要作:
(1)你需要一个缓冲池,用以存放等待解码的数据,我推荐以环状队列的方式组织这些数据,以帧为单位,提供一个读指针和一个写指针
(2)你还需要一个缓冲区,用来存放解码后的数据。
(3)pCodec = avcodec_find_decoder(CODEC_ID_H264)
(4)pCodecCtx = avcodec_alloc_context()
(5)pFrame = avcodec_alloc_frame()
(6)picture = avcodec_alloc_frame()
(7)avcodec_open(pCodecCtx, pCodec)
(以上是大概的解码前的准备工作,具体函数的意义就不再赘述,相信你可以找到很多此类的信息)
(8)读取一帧数据,调用avcodec_decode_video()解码并根据相应的数据头信息(即解码器上下文结构里的信息)利用avpicture_fill()、img_convert_ctx()建立解码框架。(当然,这里主要指的是分辨率信息,倘若前一帧与后一帧数据的分辨率不同,则需要重新建立框架,否则只需要建立一次。你也可以每次都建立,但是这样代码的执行效率会大打折扣)
(9)sws_scale()对帧数据进行重排列并放到事先申请好缓冲区,用于显示或干些别的什么
希望会对你有所帮助!

热点排行