Re: [x265] [PATCH] Improved sao implementation by limiting sao types

2017-04-12 Thread Ashok Kumar Mishra
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

2017-04-12 Thread Mario *LigH* Rohkrämer

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

2017-04-09 Thread Pradeep Ramachandran
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

2017-04-07 Thread ashok
# 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