openh264编码器执行过程
openh264中主要的编码过程在函数WelsEncoderEncodeExt中,这个函数主要调用以下几个:
BuildSpatialPicList (pCtx, pSrcPic):确定空间层数,如果是多层,则进行下采样确定每层的像素值。
PrepareEncodeFrame (pCtx, pLayerBsInfo, iSpatialNum, iCurDid, iCurTid, iLayerNum, iFrameSize, pFbi->uiTimeStamp):确定帧类型,这里只有IDR帧和P帧、Skip帧类型。‘
InitFrameCoding (pCtx, eFrameType, iCurDid):确定编码帧的POC、FrameNum和frameIndex.
WelsInitCurrentLayer (pCtx, iCurWidth, iCurHeight):初始化当前层的数据。
MarkPic():对参考图像进行标记。
BuildRefList (pParamInternal->iPOC, 0):创建参考图像列表。
PrefetchReferencePicture (pCtx, eFrameType):确定参考图像,由于重排序,这里的参考图像总是取参考图像列表中的第一个。
pfRc.pfWelsRcPictureInit (pCtx, pFbi->uiTimeStamp):这是个函数指针,具体取哪个函数根据RCMode来确定,确定QP和目标比特。
WelsCodeOneSlice (pCtx, pCurSlice, eNalType):真正的编码从这里开始。
UpdateRefList():更新参考图像列表。
WelsEncoderEncodeExt函数前面的调用过程如下: