From 3382197eb845090756bb70d59dcde9876ceba052 Mon Sep 17 00:00:00 2001 From: cjj490168650 <202221010107@std.uestc.edu.cn> Date: Thu, 23 May 2024 11:31:57 +0800 Subject: [PATCH] fix some naming and class level buffer issues --- source/Lib/EncoderLib/EncSlice.cpp | 127 +++++++++++++++-------------- source/Lib/EncoderLib/EncSlice.h | 5 +- 2 files changed, 68 insertions(+), 64 deletions(-) diff --git a/source/Lib/EncoderLib/EncSlice.cpp b/source/Lib/EncoderLib/EncSlice.cpp index 6c0554964..97dc98ff7 100644 --- a/source/Lib/EncoderLib/EncSlice.cpp +++ b/source/Lib/EncoderLib/EncSlice.cpp @@ -82,8 +82,28 @@ void EncSlice::destroy() #if JVET_AH0078_DPF if (m_pcCfg->getDPF()) { - free(m_lambdaWeight); - m_lambdaWeight = nullptr; + m_lambdaWeight.clear(); + const int height = m_pcCfg->getSourceHeight(); + if (pixelRecDis) + { + for (int i = 0; i < height; i++) + { + delete[] pixelRecDis[i]; + pixelRecDis[i] = nullptr; + } + delete[] pixelRecDis; + pixelRecDis = nullptr; + } + if (pixelPredErr) + { + for (int i = 0; i < height; i++) + { + delete[] pixelPredErr[i]; + pixelPredErr[i] = nullptr; + } + delete[] pixelPredErr; + pixelPredErr = nullptr; + } } #endif } @@ -109,19 +129,21 @@ void EncSlice::init( EncLib* pcEncLib, const SPS& sps ) m_pcRateCtrl = pcEncLib->getRateCtrl(); #if JVET_AH0078_DPF - m_lambdaWeight = nullptr; if (m_pcCfg->getDPF()) { const int sizeCu = m_pcCfg->getCTUSize(); - const int m_sourceHeight = m_pcCfg->getSourceHeight(); - const int m_sourceWidth = m_pcCfg->getSourceWidth(); - const int numCuHeight = m_sourceHeight % sizeCu == 0 ? m_sourceHeight / sizeCu : m_sourceHeight / sizeCu + 1; - const int numCuWidth = m_sourceWidth % sizeCu == 0 ? m_sourceWidth / sizeCu : m_sourceWidth / sizeCu + 1; + const int height = m_pcCfg->getSourceHeight(); + const int width = m_pcCfg->getSourceWidth(); + const int numCuHeight = height % sizeCu == 0 ? height / sizeCu : height / sizeCu + 1; + const int numCuWidth = width % sizeCu == 0 ? width / sizeCu : width / sizeCu + 1; const int numCuPic = numCuHeight * numCuWidth; - m_lambdaWeight = (double*)calloc(numCuPic, sizeof(double)); - for (int i = 0; i < numCuPic; i++) + m_lambdaWeight.assign(numCuPic, 1.0); + pixelPredErr = new int*[height]; + pixelRecDis = new int*[height]; + for (int i = 0; i < height; i++) { - m_lambdaWeight[i] = 1.0; + pixelPredErr[i] = new int[width]; + pixelRecDis[i] = new int[width]; } } #endif @@ -2220,10 +2242,7 @@ void EncSlice::setCTULambdaQp(TrQuant* pTrQuant, uint32_t ctuIdx, RdCost* pRdCos pow(2.0, (estQP - qpc) / 3.0); // takes into account of the chroma qp mapping and chroma qp Offset if (m_pcCfg->getDepQuantEnabledFlag()) { - tmpWeight *= (m_pcCfg->getGOPSize() >= 8 - ? pow(2.0, 0.1 / 3.0) - : pow(2.0, 0.2 / 3.0)); // increase chroma weight for dependent quantization (in - // order to reduce bit rate shift from chroma to luma) + tmpWeight *= (m_pcCfg->getGOPSize() >= 8 ? pow(2.0, 0.1 / 3.0) : pow(2.0, 0.2 / 3.0)); // increase chroma weight for dependent quantization (in order to reduce bit rate shift from chroma to luma) } m_pcRdCost->setDistortionWeight(compID, tmpWeight); } @@ -2244,9 +2263,9 @@ void EncSlice::estLamWt(Picture* pcPic) return; } - int iCurPOC = pcPic->getPOC(); - int iGOPSize = m_pcCfg->getGOPSize(); - int rPOC = iCurPOC % iGOPSize; + int curPOC = pcPic->getPOC(); + int gopSize = m_pcCfg->getGOPSize(); + int rPOC = curPOC % gopSize; int numPropa = 0; if (rPOC == 0) { @@ -2280,11 +2299,11 @@ void EncSlice::estLamWt(Picture* pcPic) // fix QP for pre-encoding Slice* pcSlice = pcPic->slices[getSliceSegmentIdx()]; - double dQP = m_pcCfg->getQPForPicture(0, pcSlice); + double oldQP = m_pcCfg->getQPForPicture(0, pcSlice); int qp; - double dLambda = calculateLambda(pcSlice, 0, dQP, dQP, qp); + double lambda = calculateLambda(pcSlice, 0, oldQP, oldQP, qp); pcSlice->setSliceQp(qp); - setUpLambda(pcSlice, dLambda, qp); + setUpLambda(pcSlice, lambda, qp); const auto m_chromaFormatIdc = m_pcCfg->getChromaFormatIdc(); const auto m_area = Area(0, 0, width, height); @@ -2328,57 +2347,46 @@ void EncSlice::estLamWt(Picture* pcPic) const Pel* pRec = recPB.bufAt(0, 0); const Pel* pPre = prePB.bufAt(0, 0); - int** PixelPredErr; - int** PixelRecDis; - PixelPredErr = (int**)calloc(height, sizeof(int*)); - PixelRecDis = (int**)calloc(height, sizeof(int*)); - for (int i = 0; i < height; i++) - { - PixelPredErr[i] = (int*)calloc(width, sizeof(int)); - PixelRecDis[i] = (int*)calloc(width, sizeof(int)); - } for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { - Intermediate_Int iErr = pOrg[x] - pPre[x]; - Intermediate_Int iDis = pOrg[x] - pRec[x]; - PixelPredErr[y][x] = iErr * iErr; - PixelRecDis[y][x] = iDis * iDis; + Intermediate_Int err = pOrg[x] - pPre[x]; + Intermediate_Int dis = pOrg[x] - pRec[x]; + pixelPredErr[y][x] = err * err; + pixelRecDis[y][x] = dis * dis; } pOrg += orgPB.stride; pPre += prePB.stride; pRec += recPB.stride; } - double* factorBlk = (double*)calloc(numBlkPic, sizeof(double)); + factorBlk.assign(numBlkPic, 0); int pHeightX_Blk = 0; int pWidthY_Blk = 0; - for (int Bidx = 0; Bidx < numBlkPic; Bidx++) + for (int bIdx = 0; bIdx < numBlkPic; bIdx++) { - int Line = Bidx / numBlkWidth; - int k = 0; - int SumPixelRecDisBlk = 0; // block coding distortion - int SumPixelPredErrBlk = 0; // block MCP error - pHeightX_Blk = Line; - pWidthY_Blk = Bidx - Line * numBlkWidth; + int line = bIdx / numBlkWidth; + int sumPixelRecDisBlk = 0; // block coding distortion + int sumPixelPredErrBlk = 0; // block MCP error + pHeightX_Blk = line; + pWidthY_Blk = bIdx - line * numBlkWidth; for (int i = pHeightX_Blk * sizeBlk; i < (((pHeightX_Blk * sizeBlk + sizeBlk) <= height) ? (pHeightX_Blk * sizeBlk + sizeBlk) : height); i++) { for (int j = pWidthY_Blk * sizeBlk; j < (((pWidthY_Blk * sizeBlk + sizeBlk) <= width) ? (pWidthY_Blk * sizeBlk + sizeBlk) : width); j++) { - SumPixelRecDisBlk += PixelRecDis[i][j]; - SumPixelPredErrBlk += PixelPredErr[i][j]; - k++; + sumPixelRecDisBlk += pixelRecDis[i][j]; + sumPixelPredErrBlk += pixelPredErr[i][j]; } } - if (SumPixelPredErrBlk < 1) + if (sumPixelPredErrBlk < 1) { - SumPixelPredErrBlk = 1; + sumPixelPredErrBlk = 1; } - double ki = (double)SumPixelRecDisBlk / (double)SumPixelPredErrBlk; // block DPF + double ki = (double)sumPixelRecDisBlk / (double)sumPixelPredErrBlk; // block DPF if (ki > 1.0) { ki = 1.0; @@ -2390,45 +2398,38 @@ void EncSlice::estLamWt(Picture* pcPic) multiKi = multiKi * ki; kiLenth = kiLenth + multiKi; } - factorBlk[Bidx] = 1.0 / (1.0 + kiLenth); // block weight + factorBlk[bIdx] = 1.0 / (1.0 + kiLenth); // block weight } double sumFactorBlk = 0; - for (int Bidx = 0; Bidx < numBlkPic; Bidx++) + for (int bIdx = 0; bIdx < numBlkPic; bIdx++) { - sumFactorBlk = sumFactorBlk + factorBlk[Bidx]; + sumFactorBlk = sumFactorBlk + factorBlk[bIdx]; } double aveFactorBlk = sumFactorBlk / (double)numBlkPic; - for (int Bidx = 0; Bidx < numBlkPic; Bidx++) + for (int bIdx = 0; bIdx < numBlkPic; bIdx++) { - factorBlk[Bidx] = factorBlk[Bidx] / aveFactorBlk; // block weight with dividing by mean normalization + factorBlk[bIdx] = factorBlk[bIdx] / aveFactorBlk; // block weight with dividing by mean normalization } const int numBlkCu = sizeCu / sizeBlk; for (int idxCu = 0; idxCu < numCuPic; idxCu++) { - double SumFact = 0; + double sumFact = 0; int k = 0; for (int i = 0; i < numBlkPic; i++) { if (idxCu == numCuWidth * (i / (numBlkWidth * numBlkCu)) + (i % numBlkWidth) / numBlkCu) { - SumFact += factorBlk[i]; + sumFact += factorBlk[i]; k++; } } - double tWeight = SumFact / (double)k; + double tWeight = sumFact / (double)k; m_lambdaWeight[idxCu] = tWeight; // CTU weight } - free(factorBlk); - for (int i = 0; i < height; i++) - { - free(PixelRecDis[i]); - free(PixelPredErr[i]); - } - free(PixelRecDis); - free(PixelPredErr); + factorBlk.clear(); pre.destroy(); } #endif diff --git a/source/Lib/EncoderLib/EncSlice.h b/source/Lib/EncoderLib/EncSlice.h index ae3e3cb35..64f91b34b 100644 --- a/source/Lib/EncoderLib/EncSlice.h +++ b/source/Lib/EncoderLib/EncSlice.h @@ -149,10 +149,13 @@ private: #if JVET_AH0078_DPF private: - double* m_lambdaWeight; + std::vector<double> m_lambdaWeight; double m_lambda; int m_qpCtu; PelStorage pre; + std::vector<double> factorBlk; + int** pixelPredErr; + int** pixelRecDis; void setCTULambdaQp(TrQuant* pTrQuant, uint32_t ctuIdx, RdCost* pRdCost, Slice* pcSlice); void estLamWt(Picture* pcPic); -- GitLab