一、概述
实际测试时,会发现输入编码器的是一组分辨率,但是编码出来的是另外一组分辨率。比如使用NV硬编码时,发现输入编码器的是1280*720的分辨率,但是实际输出的是1280*728的分辨率。这里面是为了模式遍历、模式选择,进行了扩边操作。
因为硬件的内存一般都是64对齐,NV为了硬件解码的方便,按照64倍数对齐的。软件编码会按照标准协议约束进行扩边操作。
下面走读X264代码,查看扩边的具体实现。
二、实现
1、x264_sps_init确定一个宏块的宽和高
2、x264_encoder_encode函数在每次编码前会判断是否需要扩边
3、x264_frame_expand_border_mod16,对分辨率不是16倍数的帧,增加pad位进行扩边