X-Git-Url: https://git.piment-noir.org/?p=deb_x265.git;a=blobdiff_plain;f=source%2Fencoder%2Fsao.cpp;h=9836aa79a15306f0fef4b17aad8dea31e30c90eb;hp=1179fe03c7c18df1d2c2170fa811bdfe14873a17;hb=b53f7c52d8280ab63876efd6eb292c21430ac607;hpb=5c9b45285dd64723ad1dac380b98a7b1f3095674 diff --git a/source/encoder/sao.cpp b/source/encoder/sao.cpp index 1179fe0..9836aa7 100644 --- a/source/encoder/sao.cpp +++ b/source/encoder/sao.cpp @@ -176,8 +176,11 @@ void SAO::allocSaoParam(SAOParam* saoParam) const void SAO::startSlice(Frame* frame, Entropy& initState, int qp) { Slice* slice = frame->m_encData->m_slice; - - int qpCb = Clip3(0, QP_MAX_MAX, qp + slice->m_pps->chromaCbQpOffset); + int qpCb = qp; + if (m_param->internalCsp == X265_CSP_I420) + qpCb = Clip3(QP_MIN, QP_MAX_MAX, (int)g_chromaScale[qp + slice->m_pps->chromaQpOffset[0]]); + else + qpCb = X265_MIN(qp + slice->m_pps->chromaQpOffset[0], QP_MAX_SPEC); m_lumaLambda = x265_lambda2_tab[qp]; m_chromaLambda = x265_lambda2_tab[qpCb]; // Use Cb QP for SAO chroma m_frame = frame; @@ -225,8 +228,8 @@ void SAO::processSaoCu(int addr, int typeIdx, int plane) { int x, y; const CUData* cu = m_frame->m_encData->getPicCTU(addr); - pixel* rec = m_frame->m_reconPicYuv->getPlaneAddr(plane, addr); - intptr_t stride = plane ? m_frame->m_reconPicYuv->m_strideC : m_frame->m_reconPicYuv->m_stride; + pixel* rec = m_frame->m_reconPic->getPlaneAddr(plane, addr); + intptr_t stride = plane ? m_frame->m_reconPic->m_strideC : m_frame->m_reconPic->m_stride; uint32_t picWidth = m_param->sourceWidth; uint32_t picHeight = m_param->sourceHeight; int ctuWidth = g_maxCUSize; @@ -436,7 +439,7 @@ void SAO::processSaoCu(int addr, int typeIdx, int plane) /* Process SAO all units */ void SAO::processSaoUnitRow(SaoCtuParam* ctuParam, int idxY, int plane) { - intptr_t stride = plane ? m_frame->m_reconPicYuv->m_strideC : m_frame->m_reconPicYuv->m_stride; + intptr_t stride = plane ? m_frame->m_reconPic->m_strideC : m_frame->m_reconPic->m_stride; uint32_t picWidth = m_param->sourceWidth; int ctuWidth = g_maxCUSize; int ctuHeight = g_maxCUSize; @@ -449,12 +452,12 @@ void SAO::processSaoUnitRow(SaoCtuParam* ctuParam, int idxY, int plane) if (!idxY) { - pixel* rec = m_frame->m_reconPicYuv->m_picOrg[plane]; + pixel* rec = m_frame->m_reconPic->m_picOrg[plane]; memcpy(m_tmpU1[plane], rec, sizeof(pixel) * picWidth); } int addr = idxY * m_numCuInWidth; - pixel* rec = plane ? m_frame->m_reconPicYuv->getChromaAddr(plane, addr) : m_frame->m_reconPicYuv->getLumaAddr(addr); + pixel* rec = plane ? m_frame->m_reconPic->getChromaAddr(plane, addr) : m_frame->m_reconPic->getLumaAddr(addr); for (int i = 0; i < ctuHeight + 1; i++) { @@ -506,7 +509,7 @@ void SAO::processSaoUnitRow(SaoCtuParam* ctuParam, int idxY, int plane) } else if (idxX != (m_numCuInWidth - 1)) { - rec = plane ? m_frame->m_reconPicYuv->getChromaAddr(plane, addr) : m_frame->m_reconPicYuv->getLumaAddr(addr); + rec = plane ? m_frame->m_reconPic->getChromaAddr(plane, addr) : m_frame->m_reconPic->getLumaAddr(addr); for (int i = 0; i < ctuHeight + 1; i++) { @@ -543,12 +546,12 @@ void SAO::copySaoUnit(SaoCtuParam* saoUnitDst, const SaoCtuParam* saoUnitSrc) void SAO::calcSaoStatsCu(int addr, int plane) { int x, y; - CUData* cu = m_frame->m_encData->getPicCTU(addr); - const pixel* fenc0 = m_frame->m_origPicYuv->getPlaneAddr(plane, addr); - const pixel* rec0 = m_frame->m_reconPicYuv->getPlaneAddr(plane, addr); + const CUData* cu = m_frame->m_encData->getPicCTU(addr); + const pixel* fenc0 = m_frame->m_fencPic->getPlaneAddr(plane, addr); + const pixel* rec0 = m_frame->m_reconPic->getPlaneAddr(plane, addr); const pixel* fenc; const pixel* rec; - intptr_t stride = plane ? m_frame->m_reconPicYuv->m_strideC : m_frame->m_reconPicYuv->m_stride; + intptr_t stride = plane ? m_frame->m_reconPic->m_strideC : m_frame->m_reconPic->m_stride; uint32_t picWidth = m_param->sourceWidth; uint32_t picHeight = m_param->sourceHeight; int ctuWidth = g_maxCUSize; @@ -789,10 +792,10 @@ void SAO::calcSaoStatsCu_BeforeDblk(Frame* frame, int idxX, int idxY) int addr = idxX + m_numCuInWidth * idxY; int x, y; - CUData* cu = frame->m_encData->getPicCTU(addr); + const CUData* cu = frame->m_encData->getPicCTU(addr); const pixel* fenc; const pixel* rec; - intptr_t stride = m_frame->m_reconPicYuv->m_stride; + intptr_t stride = m_frame->m_reconPic->m_stride; uint32_t picWidth = m_param->sourceWidth; uint32_t picHeight = m_param->sourceHeight; int ctuWidth = g_maxCUSize; @@ -826,7 +829,7 @@ void SAO::calcSaoStatsCu_BeforeDblk(Frame* frame, int idxX, int idxY) { if (plane == 1) { - stride = frame->m_reconPicYuv->m_strideC; + stride = frame->m_reconPic->m_strideC; picWidth >>= m_hChromaShift; picHeight >>= m_vChromaShift; ctuWidth >>= m_hChromaShift; @@ -845,8 +848,8 @@ void SAO::calcSaoStatsCu_BeforeDblk(Frame* frame, int idxX, int idxY) stats = m_offsetOrgPreDblk[addr][plane][SAO_BO]; count = m_countPreDblk[addr][plane][SAO_BO]; - const pixel* fenc0 = m_frame->m_origPicYuv->getPlaneAddr(plane, addr); - const pixel* rec0 = m_frame->m_reconPicYuv->getPlaneAddr(plane, addr); + const pixel* fenc0 = m_frame->m_fencPic->getPlaneAddr(plane, addr); + const pixel* rec0 = m_frame->m_reconPic->getPlaneAddr(plane, addr); fenc = fenc0; rec = rec0;