Re: [x265] [PATCH] Improved sao implementation by limiting sao types
Thank you. Sent the patch for the issue in doc. On Wed, Apr 12, 2017 at 6:35 PM, Mario *LigH* Rohkrämer wrote: > Am 07.04.2017, 12:34 Uhr, schrieb : > > diff -r 08a05ca9fd16 -r 195ae8f499fc doc/reST/cli.rst >> --- a/doc/reST/cli.rst Mon Mar 27 12:35:20 2017 +0530 >> +++ b/doc/reST/cli.rst Mon Apr 03 16:02:07 2017 +0530 >> @@ -1690,6 +1690,12 @@ >> disabled, SAO analysis skips the right/bottom boundary areas. >> Default disabled >> +.. option:: --limit-sao, --no-limit-sao >> +Limit SAO filter computation by early terminating SAO process based >> +on inter prediction mode, CTU spatial-domain correlations, and >> relations >> +between luma and chroma. >> +Default disabled >> + >> > > > (originally reported by stax76 in the doom9 forum) > > This part of the patch causes issues in the rendered documentation > (comparing to a in HTML: as if you forgot before ): > > * definition terms and descriptions apparently need to be separated from > each other by empty lines in reST sources > * for consistency, descriptions should probably be prepended by one tab > instead of four spaces > > See: http://x265.readthedocs.io/en/latest/cli.html#cmdoption-limit-sao > > > -- > > Fun and success! > Mario *LigH* Rohkrämer > mailto:cont...@ligh.de > > > ___ > x265-devel mailing list > x265-devel@videolan.org > https://mailman.videolan.org/listinfo/x265-devel > ___ x265-devel mailing list x265-devel@videolan.org https://mailman.videolan.org/listinfo/x265-devel
Re: [x265] [PATCH] Improved sao implementation by limiting sao types
Am 07.04.2017, 12:34 Uhr, schrieb : diff -r 08a05ca9fd16 -r 195ae8f499fc doc/reST/cli.rst --- a/doc/reST/cli.rst Mon Mar 27 12:35:20 2017 +0530 +++ b/doc/reST/cli.rst Mon Apr 03 16:02:07 2017 +0530 @@ -1690,6 +1690,12 @@ disabled, SAO analysis skips the right/bottom boundary areas. Default disabled +.. option:: --limit-sao, --no-limit-sao +Limit SAO filter computation by early terminating SAO process based +on inter prediction mode, CTU spatial-domain correlations, and relations +between luma and chroma. +Default disabled + (originally reported by stax76 in the doom9 forum) This part of the patch causes issues in the rendered documentation (comparing to a in HTML: as if you forgot before ): * definition terms and descriptions apparently need to be separated from each other by empty lines in reST sources * for consistency, descriptions should probably be prepended by one tab instead of four spaces See: http://x265.readthedocs.io/en/latest/cli.html#cmdoption-limit-sao -- Fun and success! Mario *LigH* Rohkrämer mailto:cont...@ligh.de ___ x265-devel mailing list x265-devel@videolan.org https://mailman.videolan.org/listinfo/x265-devel
Re: [x265] [PATCH] Improved sao implementation by limiting sao types
On Fri, Apr 7, 2017 at 4:04 PM, wrote: > # HG changeset patch > # User Ashok Kumar Mishra > # Date 1491215527 -19800 > # Mon Apr 03 16:02:07 2017 +0530 > # Node ID 195ae8f499fc61bcdc6865cf7cffe7d0d7c486f0 > # Parent 08a05ca9fd16c9f5efb1ce4d8389bda8a63f5f7d > Improved sao implementation by limiting sao types > Looks good. The X265_BUILD number has to be incremented as x265_param has been modified, but I can absorb this in my push. Do you have any performance numbers to share to show the impact of limit-sao? > > diff -r 08a05ca9fd16 -r 195ae8f499fc doc/reST/cli.rst > --- a/doc/reST/cli.rst Mon Mar 27 12:35:20 2017 +0530 > +++ b/doc/reST/cli.rst Mon Apr 03 16:02:07 2017 +0530 > @@ -1690,6 +1690,12 @@ > disabled, SAO analysis skips the right/bottom boundary areas. > Default disabled > > +.. option:: --limit-sao, --no-limit-sao > +Limit SAO filter computation by early terminating SAO process based > +on inter prediction mode, CTU spatial-domain correlations, and > relations > +between luma and chroma. > +Default disabled > + > VUI (Video Usability Information) options > = > > diff -r 08a05ca9fd16 -r 195ae8f499fc source/common/param.cpp > --- a/source/common/param.cpp Mon Mar 27 12:35:20 2017 +0530 > +++ b/source/common/param.cpp Mon Apr 03 16:02:07 2017 +0530 > @@ -187,6 +187,7 @@ > /* SAO Loop Filter */ > param->bEnableSAO = 1; > param->bSaoNonDeblocked = 0; > +param->bLimitSAO = 0; > > /* Coding Quality */ > param->cbQpOffset = 0; > @@ -272,7 +273,6 @@ > param->bAQMotion = 0; > param->bHDROpt = 0; > param->analysisRefineLevel = 5; > - > } > > int x265_param_default_preset(x265_param* param, const char* preset, > const char* tune) > @@ -949,6 +949,7 @@ > } > OPT("hdr") p->bEmitHDRSEI = atobool(value); > OPT("hdr-opt") p->bHDROpt = atobool(value); > +OPT("limit-sao") p->bLimitSAO = atobool(value); > else > return X265_PARAM_BAD_NAME; > } > @@ -1658,6 +1659,7 @@ > BOOL(p->bEmitHDRSEI, "hdr"); > BOOL(p->bHDROpt, "hdr-opt"); > s += sprintf(s, " refine-level=%d", p->analysisRefineLevel); > +BOOL(p->bLimitSAO, "limit-sao"); > #undef BOOL > return buf; > } > diff -r 08a05ca9fd16 -r 195ae8f499fc source/encoder/encoder.cpp > --- a/source/encoder/encoder.cppMon Mar 27 12:35:20 2017 +0530 > +++ b/source/encoder/encoder.cppMon Apr 03 16:02:07 2017 +0530 > @@ -2109,6 +2109,7 @@ > /* some options make no sense if others are disabled */ > p->bSaoNonDeblocked &= p->bEnableSAO; > p->bEnableTSkipFast &= p->bEnableTransformSkip; > +p->bLimitSAO &= p->bEnableSAO; > > /* initialize the conformance window */ > m_conformanceWindow.bEnabled = false; > diff -r 08a05ca9fd16 -r 195ae8f499fc source/encoder/sao.cpp > --- a/source/encoder/sao.cppMon Mar 27 12:35:20 2017 +0530 > +++ b/source/encoder/sao.cppMon Apr 03 16:02:07 2017 +0530 > @@ -734,6 +734,7 @@ > /* Calculate SAO statistics for current CTU without non-crossing slice */ > void SAO::calcSaoStatsCTU(int addr, int plane) > { > +Slice* slice = m_frame->m_encData->m_slice; > const PicYuv* reconPic = m_frame->m_reconPic; > const CUData* cu = m_frame->m_encData->getPicCTU(addr); > const pixel* fenc0 = m_frame->m_fencPic->getPlaneAddr(plane, addr); > @@ -858,59 +859,63 @@ > primitives.saoCuStatsE1(diff + startY * MAX_CU_SIZE, rec0 + > startY * stride, stride, upBuff1, endX, endY - startY, > m_offsetOrg[plane][SAO_EO_1], m_count[plane][SAO_EO_1]); > } > > -// SAO_EO_2: // dir: 135 > +if (!m_param->bLimitSAO || ((slice->m_sliceType == P_SLICE && > !cu->isSkipped(0)) || > +(slice->m_sliceType != B_SLICE))) > { > -if (m_param->bSaoNonDeblocked) > +// SAO_EO_2: // dir: 135 > { > -skipB = 4; > -skipR = 5; > +if (m_param->bSaoNonDeblocked) > +{ > +skipB = 4; > +skipR = 5; > +} > + > +fenc = fenc0; > +rec = rec0; > + > +startX = !lpelx; > +endX = (rpelx == picWidth) ? ctuWidth - 1 : ctuWidth - > skipR + plane_offset; > + > +startY = bAboveUnavail; > +endY = (bpely == picHeight) ? ctuHeight - 1 : ctuHeight > - skipB + plane_offset; > +if (startY) > +{ > +fenc += stride; > +rec += stride; > +} > + > +primitives.sign(upBuff1, &rec[startX], &rec[startX - > stride - 1], (endX - startX)); > + > +primitives.saoCuStatsE2(diff + startX + startY * > MAX_CU_SIZE, rec0 + startX + startY * stride, stride, upBuff1, upBufft, > endX - startX, endY - startY, m_offsetOrg[plane][SAO_EO_2
[x265] [PATCH] Improved sao implementation by limiting sao types
# HG changeset patch # User Ashok Kumar Mishra # Date 1491215527 -19800 # Mon Apr 03 16:02:07 2017 +0530 # Node ID 195ae8f499fc61bcdc6865cf7cffe7d0d7c486f0 # Parent 08a05ca9fd16c9f5efb1ce4d8389bda8a63f5f7d Improved sao implementation by limiting sao types diff -r 08a05ca9fd16 -r 195ae8f499fc doc/reST/cli.rst --- a/doc/reST/cli.rst Mon Mar 27 12:35:20 2017 +0530 +++ b/doc/reST/cli.rst Mon Apr 03 16:02:07 2017 +0530 @@ -1690,6 +1690,12 @@ disabled, SAO analysis skips the right/bottom boundary areas. Default disabled +.. option:: --limit-sao, --no-limit-sao +Limit SAO filter computation by early terminating SAO process based +on inter prediction mode, CTU spatial-domain correlations, and relations +between luma and chroma. +Default disabled + VUI (Video Usability Information) options = diff -r 08a05ca9fd16 -r 195ae8f499fc source/common/param.cpp --- a/source/common/param.cpp Mon Mar 27 12:35:20 2017 +0530 +++ b/source/common/param.cpp Mon Apr 03 16:02:07 2017 +0530 @@ -187,6 +187,7 @@ /* SAO Loop Filter */ param->bEnableSAO = 1; param->bSaoNonDeblocked = 0; +param->bLimitSAO = 0; /* Coding Quality */ param->cbQpOffset = 0; @@ -272,7 +273,6 @@ param->bAQMotion = 0; param->bHDROpt = 0; param->analysisRefineLevel = 5; - } int x265_param_default_preset(x265_param* param, const char* preset, const char* tune) @@ -949,6 +949,7 @@ } OPT("hdr") p->bEmitHDRSEI = atobool(value); OPT("hdr-opt") p->bHDROpt = atobool(value); +OPT("limit-sao") p->bLimitSAO = atobool(value); else return X265_PARAM_BAD_NAME; } @@ -1658,6 +1659,7 @@ BOOL(p->bEmitHDRSEI, "hdr"); BOOL(p->bHDROpt, "hdr-opt"); s += sprintf(s, " refine-level=%d", p->analysisRefineLevel); +BOOL(p->bLimitSAO, "limit-sao"); #undef BOOL return buf; } diff -r 08a05ca9fd16 -r 195ae8f499fc source/encoder/encoder.cpp --- a/source/encoder/encoder.cppMon Mar 27 12:35:20 2017 +0530 +++ b/source/encoder/encoder.cppMon Apr 03 16:02:07 2017 +0530 @@ -2109,6 +2109,7 @@ /* some options make no sense if others are disabled */ p->bSaoNonDeblocked &= p->bEnableSAO; p->bEnableTSkipFast &= p->bEnableTransformSkip; +p->bLimitSAO &= p->bEnableSAO; /* initialize the conformance window */ m_conformanceWindow.bEnabled = false; diff -r 08a05ca9fd16 -r 195ae8f499fc source/encoder/sao.cpp --- a/source/encoder/sao.cppMon Mar 27 12:35:20 2017 +0530 +++ b/source/encoder/sao.cppMon Apr 03 16:02:07 2017 +0530 @@ -734,6 +734,7 @@ /* Calculate SAO statistics for current CTU without non-crossing slice */ void SAO::calcSaoStatsCTU(int addr, int plane) { +Slice* slice = m_frame->m_encData->m_slice; const PicYuv* reconPic = m_frame->m_reconPic; const CUData* cu = m_frame->m_encData->getPicCTU(addr); const pixel* fenc0 = m_frame->m_fencPic->getPlaneAddr(plane, addr); @@ -858,59 +859,63 @@ primitives.saoCuStatsE1(diff + startY * MAX_CU_SIZE, rec0 + startY * stride, stride, upBuff1, endX, endY - startY, m_offsetOrg[plane][SAO_EO_1], m_count[plane][SAO_EO_1]); } -// SAO_EO_2: // dir: 135 +if (!m_param->bLimitSAO || ((slice->m_sliceType == P_SLICE && !cu->isSkipped(0)) || +(slice->m_sliceType != B_SLICE))) { -if (m_param->bSaoNonDeblocked) +// SAO_EO_2: // dir: 135 { -skipB = 4; -skipR = 5; +if (m_param->bSaoNonDeblocked) +{ +skipB = 4; +skipR = 5; +} + +fenc = fenc0; +rec = rec0; + +startX = !lpelx; +endX = (rpelx == picWidth) ? ctuWidth - 1 : ctuWidth - skipR + plane_offset; + +startY = bAboveUnavail; +endY = (bpely == picHeight) ? ctuHeight - 1 : ctuHeight - skipB + plane_offset; +if (startY) +{ +fenc += stride; +rec += stride; +} + +primitives.sign(upBuff1, &rec[startX], &rec[startX - stride - 1], (endX - startX)); + +primitives.saoCuStatsE2(diff + startX + startY * MAX_CU_SIZE, rec0 + startX + startY * stride, stride, upBuff1, upBufft, endX - startX, endY - startY, m_offsetOrg[plane][SAO_EO_2], m_count[plane][SAO_EO_2]); } -fenc = fenc0; -rec = rec0; +// SAO_EO_3: // dir: 45 +{ +if (m_param->bSaoNonDeblocked) +{ +skipB = 4; +skipR = 5; +} -startX = !lpelx; -endX = (rpelx == picWidth) ? ctuWidth - 1 : ctuWidth - skipR + plane_offset; +fenc = fenc0; +rec