X264视频编码分析(2):libx264编码库

    x264编码库libx264实现真正的视频编解码,该编解码算法是基于块的混合编码技术,即帧内/帧间预测,然后对预测值变换、量化,最后熵编码所得。    编码帧的类型分为I帧(x264_type_i)、P帧(x264_type_p)、B帧(x264_type_b),在H264中叫做图像片Slice。X264把整帧图像看作一个Slice,片中有slice_type_i、slice_type_p...
摘要由CSDN通过智能技术生成

    x264编码库libx264实现真正的视频编解码,该编解码算法是基于块的混合编码技术,即帧内/帧间预测,然后对预测值变换、量化,最后熵编码所得。

    编码帧的类型分为I帧(x264_type_i)、P帧(x264_type_p)、B帧(x264_type_b),在H264中叫做图像片Slice。X264把整帧图像看作一个Slice,片中有slice_type_i、slice_type_p、slice_type_b之分。I帧只有slice_type_i,P帧有slice_type_i、slice_type_p,B帧三种片都有。

    x264的H264视频编码过程可以分为三个步骤:首先根据规则判定当前帧的编码类型,如果是B帧,要缓冲存放、获取;然后对待编码图像进行帧内预测、帧间预测、整数DCT变换、量化和熵编码;最后把压缩的H264数据进行NAL层打包输出。


    x264编码器有关的重要结构体:

    x264_image_t:实际参与编码的编码帧图像信息。

typedef struct
{
	int i_csp;          //图像空间颜色
	int i_plane;        //图像平面数目
	int i_stride[4];    //每个图像平面的跨度,也就是每一行数据的字节数
	uint8_t *plane[4];  //每个图像平面存放数据的起始地址,plane[0]是Y平面,plane[1]是U平面,plane[2]是V平面
}x264_image_t;          //待编码的图像

    x264_picture_t:x264编码器定义便于控制的图像帧,描述一帧的特征。包含x264_image_t和x264_param_t结构体。

typedef struct
{
	int   i_type;            //帧的类型,初始化为auto,在编码过程自行控制
	int   i_qpplus1;         //此参数减1代表当前帧的量化参数值
	int   i_pic_struct;      //帧的结构类型
	int   b_keyframe;        //输出是否是关键帧
	int64_t   i_pts;         //一帧的显示时间戳
	int64_t   i_dts;         //输出解码时间戳

	x264_param_t    *param;          
	x264_image_t     img;           
	x264_image_properties_t    prop;
	x264_hrd_t    hrd_timing;      
	void    *opaque;               
} x264_picture_t;            //x264编码视频帧
    

    x264_param_t:初始化编码器。

typedef struct
{
	unsigned int cpu;       //CPU 标志位 
	int  i_threads;         //并行编码多帧
	int  b_sliced_threads;  //如果设置为false,一个slice只编码成一个NALU,默认值是true
	int  b_deterministic;   //是否允许非确定性时线程优化
	int  b_cpu_independent; //强制采用典型行为,而不是采用独立于CPU的优化算法
	int  i_sync_lookahead;  //线程超前缓存帧数
	int  i_width;           //视
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值