x264中Encode_frame函数解析

2019-04-15 17:46发布

点击打开链接
[cpp] view plaincopy
  1. static int  Encode_frame( x264_t *h, hnd_t hout, x264_picture_t *pic )  
  2. {  
  3.     x264_picture_t pic_out; //!< 待编码帧  
  4.     x264_nal_t *nal;    //!< NAL打包指针  
  5.     int i_nal, i; //!< NAL包数目  
  6.     int i_file = 0;  
  7.   
  8.     if( x264_encoder_encode( h, &nal, &i_nal, pic, &pic_out ) < 0 ) //!< 编码一帧图像  
  9.     {   
  10.         fprintf( stderr, "x264 [error]: x264_encoder_encode failed " ); //!< 编码失败,输出当前信息  
  11.     }  
  12.   
  13.     for( i = 0; i < i_nal; i++ ) //!< NAL层循环打包  
  14.     {  
  15.         int i_size; //!< 当前的打包空间大小  
  16.   
  17.         if( mux_buffer_size < nal[i].i_payload * 3/2 + 4 ) //!< 确保足够大的打包空间  
  18.         {  
  19.             mux_buffer_size = nal[i].i_payload * 2 + 4; //!< 2倍VCL长度+4  
  20.             x264_free( mux_buffer ); //!< 释放前面申请的mux_buffer缓冲区  
  21.             mux_buffer = x264_malloc( mux_buffer_size ); //!< 申请缓冲区  
  22.         }  
  23.   
  24.         i_size = mux_buffer_size;  
  25.         x264_nal_encode( mux_buffer, &i_size, 1, &nal[i] ); //!< NAL打包  
  26.         i_file += p_write_nalu( hout, mux_buffer, i_size ); //!< NAL包写入文件  
  27.     }  
  28.     if (i_nal)  
  29.         p_set_eop( hout, &pic_out ); //!< 存储当前帧编码码流结束标记eop  
  30.   
  31.     return i_file;  
  32. }