Re: [x265] fix chroma lambda weighting

2014-03-25 Thread Deepthi Nandakumar
Thanks, very interesting fix. Can you give us some background here? Where
did we the divide by 3.0 come from?


On Tue, Mar 25, 2014 at 9:01 AM, Satoshi Nakagawa nakagawa...@oki.comwrote:

 # HG changeset patch
 # User Satoshi Nakagawa nakagawa...@oki.com
 # Date 1395672158 -32400
 #  Mon Mar 24 23:42:38 2014 +0900
 # Node ID 08584b5913bce6a5f9d2f0d408fcdace6aa83a65
 # Parent  fdd7c6168cf42a11240ff1c7fc7b401605524db2
 fix chroma lambda weighting

 diff -r fdd7c6168cf4 -r 08584b5913bc source/encoder/frameencoder.cpp
 --- a/source/encoder/frameencoder.cpp   Fri Mar 21 14:44:35 2014 -0500
 +++ b/source/encoder/frameencoder.cpp   Mon Mar 24 23:42:38 2014 +0900
 @@ -335,11 +335,10 @@
  // instead we weight the distortion of chroma.
  int chromaQPOffset = slice-getPPS()-getChromaCbQpOffset() +
 slice-getSliceQpDeltaCb();
  int qpc = Clip3(0, MAX_MAX_QP, qp + chromaQPOffset);
 -double cbWeight = pow(2.0, (qp - g_chromaScale[chFmt][qpc])); //
 takes into account of the chroma qp mapping and chroma qp Offset
 -
 +double cbWeight = pow(2.0, (qp - g_chromaScale[chFmt][qpc]) / 3.0);
 // takes into account of the chroma qp mapping and chroma qp Offset
  chromaQPOffset = slice-getPPS()-getChromaCrQpOffset() +
 slice-getSliceQpDeltaCr();
  qpc = Clip3(0, MAX_MAX_QP, qp + chromaQPOffset);
 -double crWeight = pow(2.0, (qp - g_chromaScale[chFmt][qpc])); //
 takes into account of the chroma qp mapping and chroma qp Offset
 +double crWeight = pow(2.0, (qp - g_chromaScale[chFmt][qpc]) / 3.0);
 // takes into account of the chroma qp mapping and chroma qp Offset
  double chromaLambda = lambda / crWeight;

  m_rows[row].m_search.setQPLambda(qp, lambda, chromaLambda);
 @@ -376,10 +375,10 @@
  int qpc;
  int chromaQPOffset = slice-getPPS()-getChromaCbQpOffset() +
 slice-getSliceQpDeltaCb();
  qpc = Clip3(0, MAX_MAX_QP, qp + chromaQPOffset);
 -double cbWeight = pow(2.0, (qp - g_chromaScale[chFmt][qpc])); //
 takes into account of the chroma qp mapping and chroma qp Offset
 +double cbWeight = pow(2.0, (qp - g_chromaScale[chFmt][qpc]) / 3.0);
 // takes into account of the chroma qp mapping and chroma qp Offset
  chromaQPOffset = slice-getPPS()-getChromaCrQpOffset() +
 slice-getSliceQpDeltaCr();
  qpc = Clip3(0, MAX_MAX_QP, qp + chromaQPOffset);
 -double crWeight = pow(2.0, (qp - g_chromaScale[chFmt][qpc])); //
 takes into account of the chroma qp mapping and chroma qp Offset
 +double crWeight = pow(2.0, (qp - g_chromaScale[chFmt][qpc]) / 3.0);
 // takes into account of the chroma qp mapping and chroma qp Offset
  double chromaLambda = lambda / crWeight;

  // NOTE: set SAO lambda every Frame
 ___
 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] fix chroma lambda weighting

2014-03-25 Thread Satoshi Nakagawa
 

lambda for RDO is proportional to pow(2.0, qp / 3.0).

so, the qp offset here also needs to be devided by 3.0.

 

 

From: x265-devel [mailto:x265-devel-boun...@videolan.org] On Behalf Of
Deepthi Nandakumar
Sent: Tuesday, March 25, 2014 7:55 PM
To: Development for x265
Subject: Re: [x265] fix chroma lambda weighting

 

Thanks, very interesting fix. Can you give us some background here? Where
did we the divide by 3.0 come from?

 

On Tue, Mar 25, 2014 at 9:01 AM, Satoshi Nakagawa nakagawa...@oki.com
wrote:

# HG changeset patch
# User Satoshi Nakagawa nakagawa...@oki.com
# Date 1395672158 -32400
#  Mon Mar 24 23:42:38 2014 +0900
# Node ID 08584b5913bce6a5f9d2f0d408fcdace6aa83a65
# Parent  fdd7c6168cf42a11240ff1c7fc7b401605524db2
fix chroma lambda weighting

diff -r fdd7c6168cf4 -r 08584b5913bc source/encoder/frameencoder.cpp
--- a/source/encoder/frameencoder.cpp   Fri Mar 21 14:44:35 2014 -0500
+++ b/source/encoder/frameencoder.cpp   Mon Mar 24 23:42:38 2014 +0900
@@ -335,11 +335,10 @@
 // instead we weight the distortion of chroma.
 int chromaQPOffset = slice-getPPS()-getChromaCbQpOffset() +
slice-getSliceQpDeltaCb();
 int qpc = Clip3(0, MAX_MAX_QP, qp + chromaQPOffset);
-double cbWeight = pow(2.0, (qp - g_chromaScale[chFmt][qpc])); // takes
into account of the chroma qp mapping and chroma qp Offset
-
+double cbWeight = pow(2.0, (qp - g_chromaScale[chFmt][qpc]) / 3.0); //
takes into account of the chroma qp mapping and chroma qp Offset
 chromaQPOffset = slice-getPPS()-getChromaCrQpOffset() +
slice-getSliceQpDeltaCr();
 qpc = Clip3(0, MAX_MAX_QP, qp + chromaQPOffset);
-double crWeight = pow(2.0, (qp - g_chromaScale[chFmt][qpc])); // takes
into account of the chroma qp mapping and chroma qp Offset
+double crWeight = pow(2.0, (qp - g_chromaScale[chFmt][qpc]) / 3.0); //
takes into account of the chroma qp mapping and chroma qp Offset
 double chromaLambda = lambda / crWeight;

 m_rows[row].m_search.setQPLambda(qp, lambda, chromaLambda);
@@ -376,10 +375,10 @@
 int qpc;
 int chromaQPOffset = slice-getPPS()-getChromaCbQpOffset() +
slice-getSliceQpDeltaCb();
 qpc = Clip3(0, MAX_MAX_QP, qp + chromaQPOffset);
-double cbWeight = pow(2.0, (qp - g_chromaScale[chFmt][qpc])); // takes
into account of the chroma qp mapping and chroma qp Offset
+double cbWeight = pow(2.0, (qp - g_chromaScale[chFmt][qpc]) / 3.0); //
takes into account of the chroma qp mapping and chroma qp Offset
 chromaQPOffset = slice-getPPS()-getChromaCrQpOffset() +
slice-getSliceQpDeltaCr();
 qpc = Clip3(0, MAX_MAX_QP, qp + chromaQPOffset);
-double crWeight = pow(2.0, (qp - g_chromaScale[chFmt][qpc])); // takes
into account of the chroma qp mapping and chroma qp Offset
+double crWeight = pow(2.0, (qp - g_chromaScale[chFmt][qpc]) / 3.0); //
takes into account of the chroma qp mapping and chroma qp Offset
 double chromaLambda = lambda / crWeight;

 // NOTE: set SAO lambda every Frame
___
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


[x265] fix chroma lambda weighting

2014-03-24 Thread Satoshi Nakagawa
# HG changeset patch
# User Satoshi Nakagawa nakagawa...@oki.com
# Date 1395672158 -32400
#  Mon Mar 24 23:42:38 2014 +0900
# Node ID 08584b5913bce6a5f9d2f0d408fcdace6aa83a65
# Parent  fdd7c6168cf42a11240ff1c7fc7b401605524db2
fix chroma lambda weighting

diff -r fdd7c6168cf4 -r 08584b5913bc source/encoder/frameencoder.cpp
--- a/source/encoder/frameencoder.cpp   Fri Mar 21 14:44:35 2014 -0500
+++ b/source/encoder/frameencoder.cpp   Mon Mar 24 23:42:38 2014 +0900
@@ -335,11 +335,10 @@
 // instead we weight the distortion of chroma.
 int chromaQPOffset = slice-getPPS()-getChromaCbQpOffset() + 
slice-getSliceQpDeltaCb();
 int qpc = Clip3(0, MAX_MAX_QP, qp + chromaQPOffset);
-double cbWeight = pow(2.0, (qp - g_chromaScale[chFmt][qpc])); // takes 
into account of the chroma qp mapping and chroma qp Offset
-
+double cbWeight = pow(2.0, (qp - g_chromaScale[chFmt][qpc]) / 3.0); // 
takes into account of the chroma qp mapping and chroma qp Offset
 chromaQPOffset = slice-getPPS()-getChromaCrQpOffset() + 
slice-getSliceQpDeltaCr();
 qpc = Clip3(0, MAX_MAX_QP, qp + chromaQPOffset);
-double crWeight = pow(2.0, (qp - g_chromaScale[chFmt][qpc])); // takes 
into account of the chroma qp mapping and chroma qp Offset
+double crWeight = pow(2.0, (qp - g_chromaScale[chFmt][qpc]) / 3.0); // 
takes into account of the chroma qp mapping and chroma qp Offset
 double chromaLambda = lambda / crWeight;
 
 m_rows[row].m_search.setQPLambda(qp, lambda, chromaLambda);
@@ -376,10 +375,10 @@
 int qpc;
 int chromaQPOffset = slice-getPPS()-getChromaCbQpOffset() + 
slice-getSliceQpDeltaCb();
 qpc = Clip3(0, MAX_MAX_QP, qp + chromaQPOffset);
-double cbWeight = pow(2.0, (qp - g_chromaScale[chFmt][qpc])); // takes 
into account of the chroma qp mapping and chroma qp Offset
+double cbWeight = pow(2.0, (qp - g_chromaScale[chFmt][qpc]) / 3.0); // 
takes into account of the chroma qp mapping and chroma qp Offset
 chromaQPOffset = slice-getPPS()-getChromaCrQpOffset() + 
slice-getSliceQpDeltaCr();
 qpc = Clip3(0, MAX_MAX_QP, qp + chromaQPOffset);
-double crWeight = pow(2.0, (qp - g_chromaScale[chFmt][qpc])); // takes 
into account of the chroma qp mapping and chroma qp Offset
+double crWeight = pow(2.0, (qp - g_chromaScale[chFmt][qpc]) / 3.0); // 
takes into account of the chroma qp mapping and chroma qp Offset
 double chromaLambda = lambda / crWeight;
 
 // NOTE: set SAO lambda every Frame
___
x265-devel mailing list
x265-devel@videolan.org
https://mailman.videolan.org/listinfo/x265-devel