x265-确定slice type-3

这篇博客详细解析了x265编码器中slicetypeDecide方法的调用流程,包括PreLookaheadGroup的创建、低分辨率图像的初始化和处理,以及不同自适应量化(AQ)模式的实现,如None、HEVC AQ、Auto Variance等。通过分析lowers的create方法和calcAdaptiveQuantFrame,展示了如何根据帧的活动度调整量化参数以优化编码质量。
摘要由CSDN通过智能技术生成

下面分析slicetypeDecide的方法的调用:

1.创建PreLookaheadGroup,主要的功能是

PreLookaheadGroup pre(*this);

下面是获取输入列表中,bframes+2个帧到list链表中:

int j;
        for (j = 0; j < m_param->bframes + 2; j++)
        {
            if (!curFrame) break;
            list[j] = curFrame;
            curFrame = curFrame->m_next;
        }
下面的这段代码的功能是:

frames数组中,第一个位置保持上一个非B帧,后续保存当前输入queue中,maxsearch个帧的低分辨率图像。

如果m_lowresInit为false的话,并把这些低分辨率的图像设置到了preLookahead中:

curFrame = m_inputQueue.first();
        frames[0] = m_lastNonB;
        for (j = 0; j < maxSearch; j++)
        {
            if (!curFrame) break;
            frames[j + 1] = &curFrame->m_lowres;

            if (!curFrame->m_lowresInit)
                pre.m_preframes[pre.m_jobTotal++] = curFrame;

            curFrame = curFrame->m_next;
        }

        maxSearch = j;

下面进行的PreLookaheadGroup中task的执行:

if (pre.m_jobTotal)
    {
        if (m_pool)
            pre.tryBondPeers(*m_pool, pre.m_jobTotal);
        pre.processTasks(-1);
        pre.waitForExit();
    }

processTasks其中的关键调用如下:

        preFrame->m_lowres.init(preFrame->m_fencPic, preFrame->m_poc);
        if (m_lookahead.m_bAdaptiveQuant)
            tld.calcAdaptiveQuantFrame(preFrame, m_lookahead.m_param);
     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值