X264支持输入NV12格式
一般编码器(例如JM)输入格式是YUV420(YV12),H.264标准也介绍的是YUV420的输入。X264编码器的输入也一般是YUV420格式,但是在内部帧的存储方式上x264采用的是NV12。因为一般编码器对U,V两通道的处理方式是相同的,例如他们有相同的QP,宏块划分,参考帧ID,运动矢量。因此对于U,V两通道的数据读取是一致的,这样NV12 UV两通道交织存储比YV12 UV两通道分别存储在数据访问上具有更高的效率。基于这样的考虑,x264内部帧(包括输入编码帧,参考帧)采用了NV12的存储方式。对于YUV422的输入采用NV16的格式
函数 int x264_frame_copy_picture( x264_t *h, x264_frame_t *dst, x264_picture_t *src )里面会将src->img.i_csp 转换成NV12等相对应的存储格式。
输入 输出
NV12, I420, YV12 => NV12
NV16, I422, YV16, V210 => NV16
I444, YV24,BGR,BGRA,RGB => I444
因此x264可以直接输入NV12的视频数据格式(一些移动端摄像头的输出为NV12),并且比输入YUV420的效率还更高一些。
具体代码为:
x264_picture_init( &pH264Enc->pic );
if(chroma_fmt == X264_CSP_NV12){
pH264Enc->pic
一般编码器(例如JM)输入格式是YUV420(YV12),H.264标准也介绍的是YUV420的输入。X264编码器的输入也一般是YUV420格式,但是在内部帧的存储方式上x264采用的是NV12。因为一般编码器对U,V两通道的处理方式是相同的,例如他们有相同的QP,宏块划分,参考帧ID,运动矢量。因此对于U,V两通道的数据读取是一致的,这样NV12 UV两通道交织存储比YV12 UV两通道分别存储在数据访问上具有更高的效率。基于这样的考虑,x264内部帧(包括输入编码帧,参考帧)采用了NV12的存储方式。对于YUV422的输入采用NV16的格式
函数 int x264_frame_copy_picture( x264_t *h, x264_frame_t *dst, x264_picture_t *src )里面会将src->img.i_csp 转换成NV12等相对应的存储格式。
输入 输出
NV12, I420, YV12 => NV12
NV16, I422, YV16, V210 => NV16
I444, YV24,BGR,BGRA,RGB => I444
因此x264可以直接输入NV12的视频数据格式(一些移动端摄像头的输出为NV12),并且比输入YUV420的效率还更高一些。
具体代码为:
x264_picture_init( &pH264Enc->pic );
if(chroma_fmt == X264_CSP_NV12){
pH264Enc->pic