Thanks, pushed. On Tue, Dec 23, 2014 at 2:13 PM, Satoshi Nakagawa <[email protected]> wrote:
> # HG changeset patch > # User Satoshi Nakagawa <[email protected]> > # Date 1419324053 -32400 > # Tue Dec 23 17:40:53 2014 +0900 > # Node ID 36bde0fab6510684879e6ad996ab7d5acab86a5e > # Parent 9fdab427a1918939293539f07b49ce77c5104912 > rdcost: unify scaleChromaDist*() > > diff -r 9fdab427a191 -r 36bde0fab651 source/encoder/rdcost.h > --- a/source/encoder/rdcost.h Tue Dec 23 12:17:08 2014 +0530 > +++ b/source/encoder/rdcost.h Tue Dec 23 17:40:53 2014 +0900 > @@ -37,15 +37,12 @@ > /* all weights and factors stored as FIX8 */ > uint64_t m_lambda2; > uint64_t m_lambda; > - uint64_t m_cbDistortionWeight; > - uint64_t m_crDistortionWeight; > + uint32_t m_chromaDistWeight[2]; > uint32_t m_psyRdBase; > uint32_t m_psyRd; > int m_qp; > > void setPsyRdScale(double scale) { m_psyRdBase = > (uint32_t)floor(256.0 * scale * 0.33); } > - void setCbDistortionWeight(uint16_t weightFix8) { > m_cbDistortionWeight = weightFix8; } > - void setCrDistortionWeight(uint16_t weightFix8) { > m_crDistortionWeight = weightFix8; } > > void setQP(const Slice& slice, int qp) > { > @@ -62,7 +59,7 @@ > qpCb = X265_MIN(qp + slice.m_pps->chromaQpOffset[0], > QP_MAX_SPEC); > int chroma_offset_idx = X265_MIN(qp - qpCb + 12, > MAX_CHROMA_LAMBDA_OFFSET); > uint16_t lambdaOffset = m_psyRd ? > x265_chroma_lambda2_offset_tab[chroma_offset_idx] : 256; > - setCbDistortionWeight(lambdaOffset); > + m_chromaDistWeight[0] = lambdaOffset; > > if (slice.m_sps->chromaFormatIdc == X265_CSP_I420) > qpCr = Clip3(QP_MIN, QP_MAX_MAX, (int)g_chromaScale[qp + > slice.m_pps->chromaQpOffset[0]]); > @@ -70,7 +67,7 @@ > qpCr = X265_MIN(qp + slice.m_pps->chromaQpOffset[0], > QP_MAX_SPEC); > chroma_offset_idx = X265_MIN(qp - qpCr + 12, > MAX_CHROMA_LAMBDA_OFFSET); > lambdaOffset = m_psyRd ? > x265_chroma_lambda2_offset_tab[chroma_offset_idx] : 256; > - setCrDistortionWeight(lambdaOffset); > + m_chromaDistWeight[1] = lambdaOffset; > } > > void setLambda(double lambda2, double lambda) > @@ -82,7 +79,7 @@ > inline uint64_t calcRdCost(uint32_t distortion, uint32_t bits) const > { > X265_CHECK(bits <= (UINT64_MAX - 128) / m_lambda2, > - "calcRdCost wrap detected dist: %d, bits %d, lambda: > %d\n", distortion, bits, (int)m_lambda2); > + "calcRdCost wrap detected dist: %u, bits %u, lambda: > "X265_LL"\n", distortion, bits, m_lambda2); > return distortion + ((bits * m_lambda2 + 128) >> 8); > } > > @@ -107,22 +104,15 @@ > inline uint64_t calcRdSADCost(uint32_t sadCost, uint32_t bits) const > { > X265_CHECK(bits <= (UINT64_MAX - 128) / m_lambda, > - "calcRdSADCost wrap detected dist: %d, bits %d, > lambda: "X265_LL"\n", sadCost, bits, m_lambda); > + "calcRdSADCost wrap detected dist: %u, bits %u, > lambda: "X265_LL"\n", sadCost, bits, m_lambda); > return sadCost + ((bits * m_lambda + 128) >> 8); > } > > - inline uint32_t scaleChromaDistCb(uint32_t dist) const > + inline uint32_t scaleChromaDist(uint32_t plane, uint32_t dist) const > { > - X265_CHECK(dist <= (UINT64_MAX - 128) / m_cbDistortionWeight, > - "scaleChromaDistCb wrap detected dist: %d, lambda: > "X265_LL"\n", dist, m_cbDistortionWeight); > - return (uint32_t)(((dist * m_cbDistortionWeight) + 128) >> 8); > - } > - > - inline uint32_t scaleChromaDistCr(uint32_t dist) const > - { > - X265_CHECK(dist <= (UINT64_MAX - 128) / m_crDistortionWeight, > - "scaleChromaDistCr wrap detected dist: %d, lambda: > "X265_LL"\n", dist, m_crDistortionWeight); > - return (uint32_t)(((dist * m_crDistortionWeight) + 128) >> 8); > + X265_CHECK(dist <= (UINT64_MAX - 128) / m_chromaDistWeight[plane > - 1], > + "scaleChromaDist wrap detected dist: %u, lambda: > %u\n", dist, m_chromaDistWeight[plane - 1]); > + return (uint32_t)((dist * (uint64_t)m_chromaDistWeight[plane - 1] > + 128) >> 8); > } > > inline uint32_t getCost(uint32_t bits) const > diff -r 9fdab427a191 -r 36bde0fab651 source/encoder/search.cpp > --- a/source/encoder/search.cpp Tue Dec 23 12:17:08 2014 +0530 > +++ b/source/encoder/search.cpp Tue Dec 23 17:40:53 2014 +0900 > @@ -813,7 +813,6 @@ > > primitives.calcresidual[sizeIdxC](fenc, pred, residual, > stride); > uint32_t numSig = m_quant.transformNxN(cu, fenc, stride, > residual, stride, coeffC, log2TrSizeC, ttype, absPartIdxC, false); > - uint32_t tmpDist; > if (numSig) > { > m_quant.invtransformNxN(cu.m_tqBypass[0], residual, > stride, coeffC, log2TrSizeC, ttype, true, false, numSig); > @@ -827,8 +826,7 @@ > cu.setCbfPartRange(0, ttype, absPartIdxC, > tuIterator.absPartIdxStep); > } > > - tmpDist = primitives.sse_pp[sizeIdxC](reconQt, reconQtStride, > fenc, stride); > - outDist += (ttype == TEXT_CHROMA_U) ? > m_rdCost.scaleChromaDistCb(tmpDist) : m_rdCost.scaleChromaDistCr(tmpDist); > + outDist += m_rdCost.scaleChromaDist(chromaId, > primitives.sse_pp[sizeIdxC](reconQt, reconQtStride, fenc, stride)); > > if (m_rdCost.m_psyRd) > psyEnergy += m_rdCost.psyCost(sizeIdxC, fenc, stride, > picReconC, picStride); > @@ -932,7 +930,7 @@ > cu.setCbfPartRange(0, ttype, absPartIdxC, > tuIterator.absPartIdxStep); > } > uint32_t tmpDist = primitives.sse_pp[sizeIdxC](recon, > reconStride, fenc, stride); > - tmpDist = (ttype == TEXT_CHROMA_U) ? > m_rdCost.scaleChromaDistCb(tmpDist) : m_rdCost.scaleChromaDistCr(tmpDist); > + tmpDist = m_rdCost.scaleChromaDist(chromaId, tmpDist); > > cu.setTransformSkipPartRange(useTSkip, ttype, > absPartIdxC, tuIterator.absPartIdxStep); > > @@ -2442,8 +2440,8 @@ > interMode.distortion = primitives.sse_pp[part](fencYuv->m_buf[0], > fencYuv->m_size, reconYuv->m_buf[0], reconYuv->m_size); > // Chroma > part = partitionFromSizes(cuSize >> m_hChromaShift, cuSize >> > m_vChromaShift); > - interMode.distortion += > m_rdCost.scaleChromaDistCb(primitives.sse_pp[part](fencYuv->m_buf[1], > fencYuv->m_csize, reconYuv->m_buf[1], reconYuv->m_csize)); > - interMode.distortion += > m_rdCost.scaleChromaDistCr(primitives.sse_pp[part](fencYuv->m_buf[2], > fencYuv->m_csize, reconYuv->m_buf[2], reconYuv->m_csize)); > + interMode.distortion += m_rdCost.scaleChromaDist(1, > primitives.sse_pp[part](fencYuv->m_buf[1], fencYuv->m_csize, > reconYuv->m_buf[1], reconYuv->m_csize)); > + interMode.distortion += m_rdCost.scaleChromaDist(2, > primitives.sse_pp[part](fencYuv->m_buf[2], fencYuv->m_csize, > reconYuv->m_buf[2], reconYuv->m_csize)); > > m_entropyCoder.load(m_rqt[depth].cur); > m_entropyCoder.resetBits(); > @@ -2496,8 +2494,8 @@ > if (!cu.m_tqBypass[0]) > { > uint32_t cbf0Dist = primitives.sse_pp[part](fencYuv->m_buf[0], > fencYuv->m_size, predYuv->m_buf[0], predYuv->m_size); > - cbf0Dist += > m_rdCost.scaleChromaDistCb(primitives.sse_pp[cpart](fencYuv->m_buf[1], > predYuv->m_csize, predYuv->m_buf[1], predYuv->m_csize)); > - cbf0Dist += > m_rdCost.scaleChromaDistCr(primitives.sse_pp[cpart](fencYuv->m_buf[2], > predYuv->m_csize, predYuv->m_buf[2], predYuv->m_csize)); > + cbf0Dist += m_rdCost.scaleChromaDist(1, > primitives.sse_pp[cpart](fencYuv->m_buf[1], predYuv->m_csize, > predYuv->m_buf[1], predYuv->m_csize)); > + cbf0Dist += m_rdCost.scaleChromaDist(2, > primitives.sse_pp[cpart](fencYuv->m_buf[2], predYuv->m_csize, > predYuv->m_buf[2], predYuv->m_csize)); > > /* Consider the RD cost of not signaling any residual */ > m_entropyCoder.load(m_rqt[depth].cur); > @@ -2569,8 +2567,8 @@ > > // update with clipped distortion and cost (qp estimation loop uses > unclipped values) > uint32_t bestDist = primitives.sse_pp[part](fencYuv->m_buf[0], > fencYuv->m_size, reconYuv->m_buf[0], reconYuv->m_size); > - bestDist += > m_rdCost.scaleChromaDistCb(primitives.sse_pp[cpart](fencYuv->m_buf[1], > fencYuv->m_csize, reconYuv->m_buf[1], reconYuv->m_csize)); > - bestDist += > m_rdCost.scaleChromaDistCr(primitives.sse_pp[cpart](fencYuv->m_buf[2], > fencYuv->m_csize, reconYuv->m_buf[2], reconYuv->m_csize)); > + bestDist += m_rdCost.scaleChromaDist(1, > primitives.sse_pp[cpart](fencYuv->m_buf[1], fencYuv->m_csize, > reconYuv->m_buf[1], reconYuv->m_csize)); > + bestDist += m_rdCost.scaleChromaDist(2, > primitives.sse_pp[cpart](fencYuv->m_buf[2], fencYuv->m_csize, > reconYuv->m_buf[2], reconYuv->m_csize)); > if (m_rdCost.m_psyRd) > interMode.psyEnergy = m_rdCost.psyCost(log2CUSize - 2, > fencYuv->m_buf[0], fencYuv->m_size, reconYuv->m_buf[0], reconYuv->m_size); > > @@ -2918,7 +2916,7 @@ > singleBitsPrev = newBits; > > int16_t* curResiC = > m_rqt[qtLayer].resiQtYuv.getChromaAddr(chromaId, absPartIdxC); > - distC = > m_rdCost.scaleChromaDistCb(primitives.ssd_s[log2TrSizeC - > 2](resiYuv.getChromaAddr(chromaId, absPartIdxC), resiYuv.m_csize)); > + distC = m_rdCost.scaleChromaDist(chromaId, > primitives.ssd_s[log2TrSizeC - 2](resiYuv.getChromaAddr(chromaId, > absPartIdxC), resiYuv.m_csize)); > > if (cbfFlag[chromaId][tuIterator.section]) > { > @@ -2929,7 +2927,7 @@ > // finally we have to encode correct cbf after > comparing with null cost > uint32_t dist = > primitives.sse_ss[partSizeC](resiYuv.getChromaAddr(chromaId, absPartIdxC), > resiYuv.m_csize, curResiC, strideResiC); > uint32_t nzCbfBitsC = > m_entropyCoder.estimateCbfBits(cbfFlag[chromaId][tuIterator.section], > (TextType)chromaId, tuDepth); > - uint32_t nonZeroDistC = > m_rdCost.scaleChromaDistCb(dist); > + uint32_t nonZeroDistC = > m_rdCost.scaleChromaDist(chromaId, dist); > uint32_t nonZeroPsyEnergyC = 0; uint64_t > singleCostC = 0; > if (m_rdCost.m_psyRd) > { > @@ -3088,7 +3086,7 @@ > > m_quant.invtransformNxN(cu.m_tqBypass[absPartIdxC], tsResiC, trSizeC, > tsCoeffC, > log2TrSizeC, > (TextType)chromaId, false, true, numSigTSkipC); > uint32_t dist = > primitives.sse_ss[partSizeC](resiYuv.getChromaAddr(chromaId, absPartIdxC), > resiYuv.m_csize, tsResiC, trSizeC); > - nonZeroDistC = m_rdCost.scaleChromaDistCb(dist); > + nonZeroDistC = m_rdCost.scaleChromaDist(chromaId, > dist); > if (m_rdCost.m_psyRd) > { > nonZeroPsyEnergyC = > m_rdCost.psyCost(partSizeC, resiYuv.getChromaAddr(chromaId, absPartIdxC), > resiYuv.m_csize, tsResiC, trSizeC); > _______________________________________________ > x265-devel mailing list > [email protected] > https://mailman.videolan.org/listinfo/x265-devel >
_______________________________________________ x265-devel mailing list [email protected] https://mailman.videolan.org/listinfo/x265-devel
