History

reoranize common to inc/src/x86/arm

Licai Guo committed 12 years ago

Commit e39de8d1 parent 7313ecd40 files · +207 −207Browse files

Showing the changes to codec/common/src/deblocking_common.cpp (1 of 40 files). Show all

Unified · Split

codec/common/src/deblocking_common.cpp+204−0
@@ -0,0 +1,204 @@
1+#include "deblocking_common.h"
2+#include "macros.h"
3+// C code only
4+void DeblockLumaLt4_c (uint8_t* pPix, int32_t iStrideX, int32_t iStrideY, int32_t iAlpha, int32_t iBeta,
5+ int8_t* pTc) {
6+ for (int32_t i = 0; i < 16; i++) {
7+ int32_t iTc0 = pTc[i >> 2];
8+ if (iTc0 >= 0) {
9+ int32_t p0 = pPix[-iStrideX];
10+ int32_t p1 = pPix[-2 * iStrideX];
11+ int32_t p2 = pPix[-3 * iStrideX];
12+ int32_t q0 = pPix[0];
13+ int32_t q1 = pPix[iStrideX];
14+ int32_t q2 = pPix[2 * iStrideX];
15+ bool bDetaP0Q0 = WELS_ABS (p0 - q0) < iAlpha;
16+ bool bDetaP1P0 = WELS_ABS (p1 - p0) < iBeta;
17+ bool bDetaQ1Q0 = WELS_ABS (q1 - q0) < iBeta;
18+ int32_t iTc = iTc0;
19+ if (bDetaP0Q0 && bDetaP1P0 && bDetaQ1Q0) {
20+ bool bDetaP2P0 = WELS_ABS (p2 - p0) < iBeta;
21+ bool bDetaQ2Q0 = WELS_ABS (q2 - q0) < iBeta;
22+ if (bDetaP2P0) {
23+ pPix[-2 * iStrideX] = p1 + WELS_CLIP3 ((p2 + ((p0 + q0 + 1) >> 1) - (p1 << 1)) >> 1, -iTc0, iTc0);
24+ iTc++;
25+ }
26+ if (bDetaQ2Q0) {
27+ pPix[iStrideX] = q1 + WELS_CLIP3 ((q2 + ((p0 + q0 + 1) >> 1) - (q1 << 1)) >> 1, -iTc0, iTc0);
28+ iTc++;
29+ }
30+ int32_t iDeta = WELS_CLIP3 ((((q0 - p0) << 2) + (p1 - q1) + 4) >> 3, -iTc, iTc);
31+ pPix[-iStrideX] = WelsClip1 (p0 + iDeta); /* p0' */
32+ pPix[0] = WelsClip1 (q0 - iDeta); /* q0' */
33+ }
34+ }
35+ pPix += iStrideY;
36+ }
37+}
38+void DeblockLumaEq4_c (uint8_t* pPix, int32_t iStrideX, int32_t iStrideY, int32_t iAlpha, int32_t iBeta) {
39+ int32_t p0, p1, p2, q0, q1, q2;
40+ int32_t iDetaP0Q0;
41+ bool bDetaP1P0, bDetaQ1Q0;
42+ for (int32_t i = 0; i < 16; i++) {
43+ p0 = pPix[-iStrideX];
44+ p1 = pPix[-2 * iStrideX];
45+ p2 = pPix[-3 * iStrideX];
46+ q0 = pPix[0];
47+ q1 = pPix[iStrideX];
48+ q2 = pPix[2 * iStrideX];
49+ iDetaP0Q0 = WELS_ABS (p0 - q0);
50+ bDetaP1P0 = WELS_ABS (p1 - p0) < iBeta;
51+ bDetaQ1Q0 = WELS_ABS (q1 - q0) < iBeta;
52+ if ((iDetaP0Q0 < iAlpha) && bDetaP1P0 && bDetaQ1Q0) {
53+ if (iDetaP0Q0 < ((iAlpha >> 2) + 2)) {
54+ bool bDetaP2P0 = WELS_ABS (p2 - p0) < iBeta;
55+ bool bDetaQ2Q0 = WELS_ABS (q2 - q0) < iBeta;
56+ if (bDetaP2P0) {
57+ const int32_t p3 = pPix[-4 * iStrideX];
58+ pPix[-iStrideX] = (p2 + (p1 << 1) + (p0 << 1) + (q0 << 1) + q1 + 4) >> 3; //p0
59+ pPix[-2 * iStrideX] = (p2 + p1 + p0 + q0 + 2) >> 2; //p1
60+ pPix[-3 * iStrideX] = ((p3 << 1) + p2 + (p2 << 1) + p1 + p0 + q0 + 4) >> 3;//p2
61+ } else {
62+ pPix[-1 * iStrideX] = ((p1 << 1) + p0 + q1 + 2) >> 2; //p0
63+ }
64+ if (bDetaQ2Q0) {
65+ const int32_t q3 = pPix[3 * iStrideX];
66+ pPix[0] = (p1 + (p0 << 1) + (q0 << 1) + (q1 << 1) + q2 + 4) >> 3; //q0
67+ pPix[iStrideX] = (p0 + q0 + q1 + q2 + 2) >> 2; //q1
68+ pPix[2 * iStrideX] = ((q3 << 1) + q2 + (q2 << 1) + q1 + q0 + p0 + 4) >> 3;//q2
69+ } else {
70+ pPix[0] = ((q1 << 1) + q0 + p1 + 2) >> 2; //q0
71+ }
72+ } else {
73+ pPix[-iStrideX] = ((p1 << 1) + p0 + q1 + 2) >> 2; //p0
74+ pPix[ 0] = ((q1 << 1) + q0 + p1 + 2) >> 2; //q0
75+ }
76+ }
77+ pPix += iStrideY;
78+ }
79+}
80+void DeblockLumaLt4V_c (uint8_t* pPix, int32_t iStride, int32_t iAlpha, int32_t iBeta, int8_t* tc) {
81+ DeblockLumaLt4_c (pPix, iStride, 1, iAlpha, iBeta, tc);
82+}
83+void DeblockLumaLt4H_c (uint8_t* pPix, int32_t iStride, int32_t iAlpha, int32_t iBeta, int8_t* tc) {
84+ DeblockLumaLt4_c (pPix, 1, iStride, iAlpha, iBeta, tc);
85+}
86+void DeblockLumaEq4V_c (uint8_t* pPix, int32_t iStride, int32_t iAlpha, int32_t iBeta) {
87+ DeblockLumaEq4_c (pPix, iStride, 1, iAlpha, iBeta);
88+}
89+void DeblockLumaEq4H_c (uint8_t* pPix, int32_t iStride, int32_t iAlpha, int32_t iBeta) {
90+ DeblockLumaEq4_c (pPix, 1, iStride, iAlpha, iBeta);
91+}
92+void DeblockChromaLt4_c (uint8_t* pPixCb, uint8_t* pPixCr, int32_t iStrideX, int32_t iStrideY, int32_t iAlpha,
93+ int32_t iBeta, int8_t* pTc) {
94+ int32_t p0, p1, q0, q1, iDeta;
95+ bool bDetaP0Q0, bDetaP1P0, bDetaQ1Q0;
96+
97+ for (int32_t i = 0; i < 8; i++) {
98+ int32_t iTc0 = pTc[i >> 1];
99+ if (iTc0 > 0) {
100+ p0 = pPixCb[-iStrideX];
101+ p1 = pPixCb[-2 * iStrideX];
102+ q0 = pPixCb[0];
103+ q1 = pPixCb[iStrideX];
104+
105+ bDetaP0Q0 = WELS_ABS (p0 - q0) < iAlpha;
106+ bDetaP1P0 = WELS_ABS (p1 - p0) < iBeta;
107+ bDetaQ1Q0 = WELS_ABS (q1 - q0) < iBeta;
108+ if (bDetaP0Q0 && bDetaP1P0 && bDetaQ1Q0) {
109+ iDeta = WELS_CLIP3 ((((q0 - p0) << 2) + (p1 - q1) + 4) >> 3, -iTc0, iTc0);
110+ pPixCb[-iStrideX] = WelsClip1 (p0 + iDeta); /* p0' */
111+ pPixCb[0] = WelsClip1 (q0 - iDeta); /* q0' */
112+ }
113+
114+
115+ p0 = pPixCr[-iStrideX];
116+ p1 = pPixCr[-2 * iStrideX];
117+ q0 = pPixCr[0];
118+ q1 = pPixCr[iStrideX];
119+
120+ bDetaP0Q0 = WELS_ABS (p0 - q0) < iAlpha;
121+ bDetaP1P0 = WELS_ABS (p1 - p0) < iBeta;
122+ bDetaQ1Q0 = WELS_ABS (q1 - q0) < iBeta;
123+
124+ if (bDetaP0Q0 && bDetaP1P0 && bDetaQ1Q0) {
125+ iDeta = WELS_CLIP3 ((((q0 - p0) << 2) + (p1 - q1) + 4) >> 3, -iTc0, iTc0);
126+ pPixCr[-iStrideX] = WelsClip1 (p0 + iDeta); /* p0' */
127+ pPixCr[0] = WelsClip1 (q0 - iDeta); /* q0' */
128+ }
129+ }
130+ pPixCb += iStrideY;
131+ pPixCr += iStrideY;
132+ }
133+}
134+void DeblockChromaEq4_c (uint8_t* pPixCb, uint8_t* pPixCr, int32_t iStrideX, int32_t iStrideY, int32_t iAlpha,
135+ int32_t iBeta) {
136+ int32_t p0, p1, q0, q1;
137+ bool bDetaP0Q0, bDetaP1P0, bDetaQ1Q0;
138+ for (int32_t i = 0; i < 8; i++) {
139+ //cb
140+ p0 = pPixCb[-iStrideX];
141+ p1 = pPixCb[-2 * iStrideX];
142+ q0 = pPixCb[0];
143+ q1 = pPixCb[iStrideX];
144+ bDetaP0Q0 = WELS_ABS (p0 - q0) < iAlpha;
145+ bDetaP1P0 = WELS_ABS (p1 - p0) < iBeta;
146+ bDetaQ1Q0 = WELS_ABS (q1 - q0) < iBeta;
147+ if (bDetaP0Q0 && bDetaP1P0 && bDetaQ1Q0) {
148+ pPixCb[-iStrideX] = ((p1 << 1) + p0 + q1 + 2) >> 2; /* p0' */
149+ pPixCb[0] = ((q1 << 1) + q0 + p1 + 2) >> 2; /* q0' */
150+ }
151+
152+ //cr
153+ p0 = pPixCr[-iStrideX];
154+ p1 = pPixCr[-2 * iStrideX];
155+ q0 = pPixCr[0];
156+ q1 = pPixCr[iStrideX];
157+ bDetaP0Q0 = WELS_ABS (p0 - q0) < iAlpha;
158+ bDetaP1P0 = WELS_ABS (p1 - p0) < iBeta;
159+ bDetaQ1Q0 = WELS_ABS (q1 - q0) < iBeta;
160+ if (bDetaP0Q0 && bDetaP1P0 && bDetaQ1Q0) {
161+ pPixCr[-iStrideX] = ((p1 << 1) + p0 + q1 + 2) >> 2; /* p0' */
162+ pPixCr[0] = ((q1 << 1) + q0 + p1 + 2) >> 2; /* q0' */
163+ }
164+ pPixCr += iStrideY;
165+ pPixCb += iStrideY;
166+ }
167+}
168+void DeblockChromaLt4V_c (uint8_t* pPixCb, uint8_t* pPixCr, int32_t iStride, int32_t iAlpha, int32_t iBeta,
169+ int8_t* tc) {
170+ DeblockChromaLt4_c (pPixCb, pPixCr, iStride, 1, iAlpha, iBeta, tc);
171+}
172+void DeblockChromaLt4H_c (uint8_t* pPixCb, uint8_t* pPixCr, int32_t iStride, int32_t iAlpha, int32_t iBeta,
173+ int8_t* tc) {
174+ DeblockChromaLt4_c (pPixCb, pPixCr, 1, iStride, iAlpha, iBeta, tc);
175+}
176+void DeblockChromaEq4V_c (uint8_t* pPixCb, uint8_t* pPixCr, int32_t iStride, int32_t iAlpha, int32_t iBeta) {
177+ DeblockChromaEq4_c (pPixCb, pPixCr, iStride, 1, iAlpha, iBeta);
178+}
179+void DeblockChromaEq4H_c (uint8_t* pPixCb, uint8_t* pPixCr, int32_t iStride, int32_t iAlpha, int32_t iBeta) {
180+ DeblockChromaEq4_c (pPixCb, pPixCr, 1, iStride, iAlpha, iBeta);
181+}
182+
183+#ifdef X86_ASM
184+extern "C" {
185+ void DeblockLumaLt4H_ssse3 (uint8_t* pPixY, int32_t iStride, int32_t iAlpha, int32_t iBeta, int8_t* pTc) {
186+ ENFORCE_STACK_ALIGN_1D (uint8_t, uiBuf, 16 * 8, 16);
187+
188+ DeblockLumaTransposeH2V_sse2 (pPixY - 4, iStride, &uiBuf[0]);
189+ DeblockLumaLt4V_ssse3 (&uiBuf[4 * 16], 16, iAlpha, iBeta, pTc);
190+ DeblockLumaTransposeV2H_sse2 (pPixY - 4, iStride, &uiBuf[0]);
191+ }
192+
193+ void DeblockLumaEq4H_ssse3 (uint8_t* pPixY, int32_t iStride, int32_t iAlpha, int32_t iBeta) {
194+ ENFORCE_STACK_ALIGN_1D (uint8_t, uiBuf, 16 * 8, 16);
195+
196+ DeblockLumaTransposeH2V_sse2 (pPixY - 4, iStride, &uiBuf[0]);
197+ DeblockLumaEq4V_ssse3 (&uiBuf[4 * 16], 16, iAlpha, iBeta);
198+ DeblockLumaTransposeV2H_sse2 (pPixY - 4, iStride, &uiBuf[0]);
199+ }
200+
201+}
202+
203+#endif
204+

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t