x265 mctf代码逻辑分析

x265源码中mctf参考帧构建

//检查是否启用时域滤波并且当前需要滤波(根据切片类型配置)

if (m_param->bEnableTEmporalFilter && isFilterThisFrame(frameEnc[0]->m_mcstf->m_sliceTypConfig, frameEnc[0]->m_lowres.sliceType))

{

//遍历所有参考帧(m_numRef 是参考帧数量, 循环为每个参考帧配置滤波所需要的信息)

for (int i = 0; i < frameEnc[0]->m_mcstf->m_numRef; i++)

//遍历所有参考帧

//m_numRef 当前参考帧数量

//循环每个参考帧配置滤波所需要信息

TemporalFilterRefPicInfo* ref = &frameEnc[0]->m_mcstfRefList[i];

//ref 指向当前处理的参考帧信息结构体

//Resetting the reference picture buffer from mcstfpiclist

Frame* iterFrame = frameEnc[0]->m_encData->m_slice->m_mcstfRefFrameList[1][i];

//参考帧列表获取i参考帧对象

ref->picBuffer = iterFrame->m_mcstffencPic;//存储用于滤波像素数据

//通过lookahead 模块预测类型

//计算参考帧POC当前参考帧POC偏移量

ref->slicetype = m_lookahead->findSliceType(frameEnc[0]->m_poc + ref->origOffset);

Frame* dpbframePtr = m_dpb->m_picList.getPOC(frameEnc[0]->m_poc + ref->origOffset, 0);//解码图像缓冲区DPB按照POC 查找已经重建

if (dpbframePtr != NULL)

{

if (dpbframePtr->m_encData->m_slice->m_sliceType == B_SLICE)

ref->slicetype = X265_TYPE_B;

else if (dpbframePtr->m_encData->m_slice->m_sliceType == P_SLICE)

ref->slicetype = X265_TYPE_P;

else

ref->slicetype = X265_TYPE_I;

}

}

//如果找到了就用最终实际编码帧类型配置时域滤波参考帧信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值