ffmpeg的mpeg2编码I帧代码解读(三)

1.完整的初始化过程,函数调用关系如下:
   encode_init
   MPV_encode_init:里面要根据不同的Codec_ID来配置一些数据
   MPV_common_init:基本的结构体的初始化,在此之前,高度宽度等变量已经设置好了
   dsputil_init初始化了fdct而MPV_encode_init紧接着,执行前面提到的dct_quantize的初始化。
然而,这个时候量化表并没有初始化,量化表的初始化是用函数ff_set_qscale进行的。而这个函数的调用关系,在第二点中讲到
 
2.编码器运行的函数调用关系如下:
   MPV_encode_picture:顶层函数
   encode_picture:编码一副图像,这个时候首先要编码图像头,调用mpeg1_encode_picture_header函数,然后在2912行,通过s指针调用了encode_thread函数,开始编码
   encode_thread里面,调用了ff_set_qscale,进行qscale的初始化,然后调用encode_mb_hq进行编码
   encode_mb_hq调用encode_mb进行宏块编码
   encode_mb调用encode_mb_internal进行帧内编码
   encode_mb_internal调用mpeg1_encode_mb进行编码
   mpeg1_encode_mb调用mpeg1_encode_mb_internal进行编码
   mpeg1_encode_mb_internal调用mpeg1_encode_block进行16x16的块编码
 
3.关于header
   mpeg1_encode_picture_header调用了mpeg1_encode_sequence_header写入了序列的头
   mpeg1_encode_sequence_header调用了ff_write_quant_matrix这里面,包括了要填的量化表的写入,这个量化表是用户自定义的。在后面又调用了ff_mpeg1_encode_slice_header。
   ff_mpeg1_encode_slice_header又调用了写header,写qscale的函数,写文件头。

posted on 2009-09-14 15:32  vincenzo.lai  阅读(2491)  评论(0编辑  收藏  举报

导航