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
4void 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}
38void 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}
80void 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}
83void 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}
86void DeblockLumaEq4V_c (uint8_t* pPix, int32_t iStride, int32_t iAlpha, int32_t iBeta) {
87 DeblockLumaEq4_c (pPix, iStride, 1, iAlpha, iBeta);
88}
89void DeblockLumaEq4H_c (uint8_t* pPix, int32_t iStride, int32_t iAlpha, int32_t iBeta) {
90 DeblockLumaEq4_c (pPix, 1, iStride, iAlpha, iBeta);
91}
92void 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}
134void 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}
168void 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}
172void 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}
176void 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}
179void 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
184extern "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