x264中Encode_frame函数解析

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;
}

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值