之前代码学习1里有提到主要编码循环( while (frame_avail || got_data))里的函数encode_frame, 这个函数会做一些放缩的工作,以及计时器的启动,会把stream->encoder传入函数aom_codec_encode进行下一步工作,并判断返回值是否有error。需要注意的是av1默认是two-pass encoding,所以第一次编码是在大QP和低码率的限制下进行编码,主要目的是在不显著提高复杂度的情况下,收集一些信息,比如编码的决策,运动矢量等信息,从而加速第二次编码。
主要流程是:
static void encode_frame(struct stream_state *stream,
struct AvxEncoderConfig *global, struct aom_image *img,
unsigned int frames_in) {
aom_codec_pts_t frame_start, next_frame_start;
struct aom_codec_enc_cfg *cfg = &stream->con