[x265] [PATCH 15 of 16] improve sao diff[] by primivites.sub_ps
Min Chen
chenm003 at 163.com
Wed Oct 7 00:55:26 CEST 2015
# HG changeset patch
# User Min Chen <chenm003 at 163.com>
# Date 1444167726 18000
# Node ID 36a54b2cf7c4c96067bafb67077651d30d83e8e9
# Parent 8fdd1b8fd4529b6966ab787f6c624f6056f77593
improve sao diff[] by primivites.sub_ps
---
source/encoder/sao.cpp | 23 +++++++++++++++++------
source/encoder/sao.h | 1 +
2 files changed, 18 insertions(+), 6 deletions(-)
diff -r 8fdd1b8fd452 -r 36a54b2cf7c4 source/encoder/sao.cpp
--- a/source/encoder/sao.cpp Tue Oct 06 16:42:02 2015 -0500
+++ b/source/encoder/sao.cpp Tue Oct 06 16:42:06 2015 -0500
@@ -106,6 +106,7 @@
bool SAO::create(x265_param* param)
{
m_param = param;
+ m_chromaFormat = param->internalCsp;
m_hChromaShift = CHROMA_H_SHIFT(param->internalCsp);
m_vChromaShift = CHROMA_V_SHIFT(param->internalCsp);
@@ -715,14 +716,24 @@
ALIGN_VAR_32(int16_t, diff[MAX_CU_SIZE * MAX_CU_SIZE]);
// Calculate (fenc - frec) and put into diff[]
- // WARNING: *) May read beyond bound on video than width or height is NOT multiple of cuSize
- // *) MUST BE handle ColorSpace other than 420 yourself!
- //primitives.cu[g_maxLog2CUSize - 2 - (plane != 0)].sub_ps(diff, MAX_CU_SIZE, fenc0, rec0, stride, stride);
- for(int y = 0; y < ctuHeight; y++)
+ if ((lpelx + ctuWidth < picWidth) & (tpely + ctuHeight < picHeight))
{
- for(int x = 0; x < ctuWidth; x++)
+ // WARNING: *) May read beyond bound on video than ctuWidth or ctuHeight is NOT multiple of cuSize
+ X265_CHECK((ctuWidth == ctuHeight) || (m_chromaFormat != X265_CSP_I420), "video size check failure\n");
+ if (plane)
+ primitives.chroma[m_chromaFormat].cu[g_maxLog2CUSize - 2].sub_ps(diff, MAX_CU_SIZE, fenc0, rec0, stride, stride);
+ else
+ primitives.cu[g_maxLog2CUSize - 2].sub_ps(diff, MAX_CU_SIZE, fenc0, rec0, stride, stride);
+ }
+ else
+ {
+ // path for non-square area (most in edge)
+ for(int y = 0; y < ctuHeight; y++)
{
- diff[y * MAX_CU_SIZE + x] = (fenc0[y * stride + x] - rec0[y * stride + x]);
+ for(int x = 0; x < ctuWidth; x++)
+ {
+ diff[y * MAX_CU_SIZE + x] = (fenc0[y * stride + x] - rec0[y * stride + x]);
+ }
}
}
diff -r 8fdd1b8fd452 -r 36a54b2cf7c4 source/encoder/sao.h
--- a/source/encoder/sao.h Tue Oct 06 16:42:02 2015 -0500
+++ b/source/encoder/sao.h Tue Oct 06 16:42:06 2015 -0500
@@ -83,6 +83,7 @@
int8_t m_offsetBo[SAO_NUM_BO_CLASSES];
int8_t m_offsetEo[NUM_EDGETYPE];
+ int m_chromaFormat;
int m_numCuInWidth;
int m_numCuInHeight;
int m_hChromaShift;
More information about the x265-devel
mailing list