Thanks for the patch. Pushed to Release_3.2 with indentation fixes. On Tue, Oct 1, 2019 at 6:42 PM Joel Galí <[email protected]> wrote:
> Hi, > > AQ mode 4 commit (21db162) causes slowdown even if not used aq-mode > 4. Some code related to AQ mode 4 is executed always. > > Slowdown is aprox. 10% !! on my system encoding 1080p 8-bit using > --aq-mode 3 and preset medium. > > More info: > https://forum.doom9.org/showthread.php?p=1885998#post1885998 > > changeset: 12565:e39ec6f83fe5 > tag: tip > user: [email protected] > date: Mon Sep 30 18:23:41 2019 +0200 > summary: Fix: AQ mode 4 commit (21db162) introduces slowdown even is > not used AQ mode 4. > > diff -r fdd69a766881 -r e39ec6f83fe5 source/encoder/slicetype.cpp > --- a/source/encoder/slicetype.cpp Wed Sep 25 17:58:14 2019 +0530 > +++ b/source/encoder/slicetype.cpp Mon Sep 30 18:23:41 2019 +0200 > @@ -480,17 +480,24 @@ > { > #define AQ_EDGE_BIAS 0.5 > #define EDGE_INCLINATION 45 > - uint32_t numCuInHeight = (maxRow + param->maxCUSize - 1) > / param->maxCUSize; > - int maxHeight = numCuInHeight * param->maxCUSize; > - intptr_t stride = curFrame->m_fencPic->m_stride; > - pixel *edgePic = X265_MALLOC(pixel, stride * (maxHeight + > (curFrame->m_fencPic->m_lumaMarginY * 2))); > - pixel *gaussianPic = X265_MALLOC(pixel, stride * > (maxHeight + (curFrame->m_fencPic->m_lumaMarginY * 2))); > - pixel *thetaPic = X265_MALLOC(pixel, stride * (maxHeight > + (curFrame->m_fencPic->m_lumaMarginY * 2))); > - memset(edgePic, 0, stride * (maxHeight + > (curFrame->m_fencPic->m_lumaMarginY * 2)) * sizeof(pixel)); > - memset(gaussianPic, 0, stride * (maxHeight + > (curFrame->m_fencPic->m_lumaMarginY * 2)) * sizeof(pixel)); > - memset(thetaPic, 0, stride * (maxHeight + > (curFrame->m_fencPic->m_lumaMarginY * 2)) * sizeof(pixel)); > - if (param->rc.aqMode == X265_AQ_EDGE) > - edgeFilter(curFrame, edgePic, gaussianPic, thetaPic, > stride, maxRow, maxCol); > + > + pixel *edgePic = NULL; > + pixel *gaussianPic = NULL; > + pixel *thetaPic = NULL; > + > + if (param->rc.aqMode == X265_AQ_EDGE) > + { > + uint32_t numCuInHeight = (maxRow + param->maxCUSize - 1) / > param->maxCUSize; > + int maxHeight = numCuInHeight * param->maxCUSize; > + intptr_t stride = curFrame->m_fencPic->m_stride; > + edgePic = X265_MALLOC(pixel, stride * (maxHeight + > (curFrame->m_fencPic->m_lumaMarginY * 2))); > + gaussianPic = X265_MALLOC(pixel, stride * (maxHeight + > (curFrame->m_fencPic->m_lumaMarginY * 2))); > + thetaPic = X265_MALLOC(pixel, stride * (maxHeight + > (curFrame->m_fencPic->m_lumaMarginY * 2))); > + memset(edgePic, 0, stride * (maxHeight + > (curFrame->m_fencPic->m_lumaMarginY * 2)) * sizeof(pixel)); > + memset(gaussianPic, 0, stride * (maxHeight + > (curFrame->m_fencPic->m_lumaMarginY * 2)) * sizeof(pixel)); > + memset(thetaPic, 0, stride * (maxHeight + > (curFrame->m_fencPic->m_lumaMarginY * 2)) * sizeof(pixel)); > + edgeFilter(curFrame, edgePic, gaussianPic, thetaPic, stride, maxRow, > maxCol); > + } > > int blockXY = 0, inclinedEdge = 0; > double avg_adj_pow2 = 0, avg_adj = 0, qp_adj = 0; > @@ -507,8 +514,8 @@ > energy = acEnergyCu(curFrame, blockX, blockY, > param->internalCsp, param->rc.qgSize); > if (param->rc.aqMode == X265_AQ_EDGE) > { > - pixel *edgeImage = edgePic + > curFrame->m_fencPic->m_lumaMarginY * stride + > curFrame->m_fencPic->m_lumaMarginX; > - pixel *edgeTheta = thetaPic + > curFrame->m_fencPic->m_lumaMarginY * stride + > curFrame->m_fencPic->m_lumaMarginX; > + pixel *edgeImage = edgePic + > curFrame->m_fencPic->m_lumaMarginY * curFrame->m_fencPic->m_stride + > curFrame->m_fencPic->m_lumaMarginX; > + pixel *edgeTheta = thetaPic + > curFrame->m_fencPic->m_lumaMarginY * curFrame->m_fencPic->m_stride + > curFrame->m_fencPic->m_lumaMarginX; > edgeDensity = edgeDensityCu(curFrame, > edgeImage, edgeTheta, avgAngle, blockX, blockY, param->rc.qgSize); > if (edgeDensity) > { > @@ -541,10 +548,14 @@ > } > else > strength = param->rc.aqStrength * 1.0397f; > - > - X265_FREE(edgePic); > - X265_FREE(gaussianPic); > - X265_FREE(thetaPic); > + > + if (param->rc.aqMode == X265_AQ_EDGE) > + { > + X265_FREE(edgePic); > + X265_FREE(gaussianPic); > + X265_FREE(thetaPic); > + } > + > blockXY = 0; > for (int blockY = 0; blockY < maxRow; blockY += loopIncr) > { > > > Regards, > Joel > _______________________________________________ > x265-devel mailing list > [email protected] > https://mailman.videolan.org/listinfo/x265-devel > -- Regards, Aruna
_______________________________________________ x265-devel mailing list [email protected] https://mailman.videolan.org/listinfo/x265-devel
