本文整理汇总了C++中TComSlice::getWpScaling方法的典型用法代码示例。如果您正苦于以下问题:C++ TComSlice::getWpScaling方法的具体用法?C++ TComSlice::getWpScaling怎么用?C++ TComSlice::getWpScaling使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TComSlice
的用法示例。
在下文中一共展示了TComSlice::getWpScaling方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getWpScaling
/** derivation of wp tables
* \param TComDataCU* cu
* \param refIdx0
* \param refIdx1
* \param wpScalingParam *&wp0
* \param wpScalingParam *&wp1
* \param ibdi
* \returns void
*/
void TComWeightPrediction::getWpScaling(TComDataCU* cu, int refIdx0, int refIdx1, wpScalingParam *&wp0, wpScalingParam *&wp1)
{
TComSlice* slice = cu->getSlice();
const TComPPS* pps = cu->getSlice()->getPPS();
bool wpBiPred = pps->getWPBiPred();
wpScalingParam* pwp;
bool bBiDir = (refIdx0 >= 0 && refIdx1 >= 0);
bool bUniDir = !bBiDir;
if (bUniDir || wpBiPred)
{ // explicit --------------------
if (refIdx0 >= 0)
{
slice->getWpScaling(REF_PIC_LIST_0, refIdx0, wp0);
}
if (refIdx1 >= 0)
{
slice->getWpScaling(REF_PIC_LIST_1, refIdx1, wp1);
}
}
else
{
X265_CHECK(0, "unexpected wpScaling configuration\n");
}
if (refIdx0 < 0)
{
wp0 = NULL;
}
if (refIdx1 < 0)
{
wp1 = NULL;
}
if (bBiDir)
{ // Bi-Dir case
for (int yuv = 0; yuv < 3; yuv++)
{
wp0[yuv].w = wp0[yuv].inputWeight;
wp0[yuv].o = wp0[yuv].inputOffset * (1 << (X265_DEPTH - 8));
wp1[yuv].w = wp1[yuv].inputWeight;
wp1[yuv].o = wp1[yuv].inputOffset * (1 << (X265_DEPTH - 8));
wp0[yuv].shift = wp0[yuv].log2WeightDenom;
wp0[yuv].round = (1 << wp0[yuv].log2WeightDenom);
wp1[yuv].shift = wp0[yuv].shift;
wp1[yuv].round = wp0[yuv].round;
}
}
else
{ // Unidir
pwp = (refIdx0 >= 0) ? wp0 : wp1;
for (int yuv = 0; yuv < 3; yuv++)
{
pwp[yuv].w = pwp[yuv].inputWeight;
pwp[yuv].offset = pwp[yuv].inputOffset * (1 << (X265_DEPTH - 8));
pwp[yuv].shift = pwp[yuv].log2WeightDenom;
pwp[yuv].round = (pwp[yuv].log2WeightDenom >= 1) ? (1 << (pwp[yuv].log2WeightDenom - 1)) : (0);
}
}
}