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函数解析
最新推荐文章于 2024-10-02 10:12:26 发布
本文详细介绍了使用x264库进行视频编码的过程,包括初始化编码器、准备输入图像、调用编码函数以及NAL单元的打包和写入等步骤。通过具体的代码示例,展示了如何实现视频帧的编码及NAL单元的处理。
738

被折叠的 条评论
为什么被折叠?



