static int Encode_frame( x264_t *h, hnd_t hout, x264_picture_t *pic )
{
x264_picture_t pic_out; //!< 待编码帧
x264_nal_t *nal; //!< NAL打包指针
int i_nal, i; //!< NAL包数目
int i_file = 0;
if( x264_encoder_encode( h, &nal, &i_nal, pic, &pic_out ) < 0 ) //!< 编码一帧图像
{
fprintf( stderr, "x264 [error]: x264_encoder_encode failed\n" ); //!< 编码失败,输出当前信息
}
for( i = 0; i < i_nal; i++ ) //!< NAL层循环打包
{
int i_size; //!< 当前的打包空间大小
if( mux_buffer_size < nal[i].i_payload * 3/2 + 4 ) //!< 确保足够大的打包空间
{
mux_buffer_size = nal[i].i_payload * 2 + 4; //!< 2倍VCL长度+4
x264_free( mux_buffer ); //!< 释放前面申请的mux_buffer缓冲区
mux_buffer = x264_malloc( mux_buffer_size ); //!< 申请缓冲区
}
i_size = mux_buffer_size;
x264_nal_encode( mux_buffer, &i_size, 1, &nal[i] ); //!< NAL打包
i_file += p_write_nalu( hout, mux_buffer, i_size ); //!< NAL包写入文件
}
if (i_nal)
p_set_eop( hout, &pic_out ); //!< 存储当前帧编码码流结束标记eop
return i_file;
}
x264中Encode_frame函数解析
最新推荐文章于 2022-04-25 12:06:04 发布