Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: source/row_win.cc

Issue 1359443005: move constants into common (Closed) Base URL: https://chromium.googlesource.com/libyuv/libyuv@master
Patch Set: fix up jpeg comments and remove todo to move to common Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « source/row_neon64.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2011 The LibYuv Project Authors. All rights reserved. 2 * Copyright 2011 The LibYuv Project Authors. All rights reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #include "libyuv/row.h" 11 #include "libyuv/row.h"
12 12
13 #if !defined(LIBYUV_DISABLE_X86) && defined(_M_X64) && \ 13 #if !defined(LIBYUV_DISABLE_X86) && defined(_M_X64) && \
14 defined(_MSC_VER) && !defined(__clang__) 14 defined(_MSC_VER) && !defined(__clang__)
15 #include <emmintrin.h> 15 #include <emmintrin.h>
16 #include <tmmintrin.h> // For _mm_maddubs_epi16 16 #include <tmmintrin.h> // For _mm_maddubs_epi16
17 #endif 17 #endif
18 18
19 #ifdef __cplusplus 19 #ifdef __cplusplus
20 namespace libyuv { 20 namespace libyuv {
21 extern "C" { 21 extern "C" {
22 #endif 22 #endif
23 23
24 // This module is for Visual C 32/64 bit and clangcl 32 bit 24 // This module is for Visual C 32/64 bit and clangcl 32 bit
25 #if !defined(LIBYUV_DISABLE_X86) && \ 25 #if !defined(LIBYUV_DISABLE_X86) && \
26 (defined(_M_IX86) || (defined(_M_X64) && !defined(__clang__))) 26 (defined(_M_IX86) || (defined(_M_X64) && !defined(__clang__)))
27 27
28 #define KUVTOB 0
29 #define KUVTOG 32
30 #define KUVTOR 64
31 #define KUVBIASB 96
32 #define KUVBIASG 128
33 #define KUVBIASR 160
34 #define KYTORGB 192
35
36 // BT.601 YUV to RGB reference
37 // R = (Y - 16) * 1.164 - V * -1.596
38 // G = (Y - 16) * 1.164 - U * 0.391 - V * 0.813
39 // B = (Y - 16) * 1.164 - U * -2.018
40
41 // Y contribution to R,G,B. Scale and bias.
42 // TODO(fbarchard): Consider moving constants into a common header.
43 #define YG 18997 /* round(1.164 * 64 * 256 * 256 / 257) */
44 #define YGB -1160 /* 1.164 * 64 * -16 + 64 / 2 */
45
46 // U and V contributions to R,G,B.
47 #define UB -128 /* max(-128, round(-2.018 * 64)) */
48 #define UG 25 /* round(0.391 * 64) */
49 #define VG 52 /* round(0.813 * 64) */
50 #define VR -102 /* round(-1.596 * 64) */
51
52 // Bias values to subtract 16 from Y and 128 from U and V.
53 #define BB (UB * 128 + YGB)
54 #define BG (UG * 128 + VG * 128 + YGB)
55 #define BR (VR * 128 + YGB)
56
57 // BT601 constants for YUV to RGB.
58 YuvConstants SIMD_ALIGNED(kYuvConstants) = {
59 { UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0,
60 UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0 },
61 { UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG,
62 UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG },
63 { 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR,
64 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR },
65 { BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB },
66 { BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG },
67 { BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR },
68 { YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG }
69 };
70
71 // BT601 constants for NV21 where chroma plane is VU instead of UV.
72 YuvConstants SIMD_ALIGNED(kYvuConstants) = {
73 { 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB,
74 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB },
75 { VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG,
76 VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG },
77 { VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0,
78 VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0 },
79 { BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB },
80 { BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG },
81 { BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR },
82 { YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG }
83 };
84
85 #undef YG
86 #undef YGB
87 #undef UB
88 #undef UG
89 #undef VG
90 #undef VR
91 #undef BB
92 #undef BG
93 #undef BR
94
95 // JPEG YUV to RGB reference
96 // * R = Y - V * -1.40200
97 // * G = Y - U * 0.34414 - V * 0.71414
98 // * B = Y - U * -1.77200
99
100 // Y contribution to R,G,B. Scale and bias.
101 // TODO(fbarchard): Consider moving constants into a common header.
102 #define YGJ 16320 /* round(1.000 * 64 * 256 * 256 / 257) */
103 #define YGBJ 32 /* 64 / 2 */
104
105 // U and V contributions to R,G,B.
106 #define UBJ -113 /* round(-1.77200 * 64) */
107 #define UGJ 22 /* round(0.34414 * 64) */
108 #define VGJ 46 /* round(0.71414 * 64) */
109 #define VRJ -90 /* round(-1.40200 * 64) */
110
111 // Bias values to subtract 16 from Y and 128 from U and V.
112 #define BBJ (UBJ * 128 + YGBJ)
113 #define BGJ (UGJ * 128 + VGJ * 128 + YGBJ)
114 #define BRJ (VRJ * 128 + YGBJ)
115
116 // JPEG constants for YUV to RGB.
117 YuvConstants SIMD_ALIGNED(kYuvJConstants) = {
118 { UBJ, 0, UBJ, 0, UBJ, 0, UBJ, 0, UBJ, 0, UBJ, 0, UBJ, 0, UBJ, 0,
119 UBJ, 0, UBJ, 0, UBJ, 0, UBJ, 0, UBJ, 0, UBJ, 0, UBJ, 0, UBJ, 0 },
120 { UGJ, VGJ, UGJ, VGJ, UGJ, VGJ, UGJ, VGJ,
121 UGJ, VGJ, UGJ, VGJ, UGJ, VGJ, UGJ, VGJ,
122 UGJ, VGJ, UGJ, VGJ, UGJ, VGJ, UGJ, VGJ,
123 UGJ, VGJ, UGJ, VGJ, UGJ, VGJ, UGJ, VGJ },
124 { 0, VRJ, 0, VRJ, 0, VRJ, 0, VRJ, 0, VRJ, 0, VRJ, 0, VRJ, 0, VRJ,
125 0, VRJ, 0, VRJ, 0, VRJ, 0, VRJ, 0, VRJ, 0, VRJ, 0, VRJ, 0, VRJ },
126 { BBJ, BBJ, BBJ, BBJ, BBJ, BBJ, BBJ, BBJ,
127 BBJ, BBJ, BBJ, BBJ, BBJ, BBJ, BBJ, BBJ },
128 { BGJ, BGJ, BGJ, BGJ, BGJ, BGJ, BGJ, BGJ,
129 BGJ, BGJ, BGJ, BGJ, BGJ, BGJ, BGJ, BGJ },
130 { BRJ, BRJ, BRJ, BRJ, BRJ, BRJ, BRJ, BRJ,
131 BRJ, BRJ, BRJ, BRJ, BRJ, BRJ, BRJ, BRJ },
132 { YGJ, YGJ, YGJ, YGJ, YGJ, YGJ, YGJ, YGJ,
133 YGJ, YGJ, YGJ, YGJ, YGJ, YGJ, YGJ, YGJ }
134 };
135
136 #undef YGJ
137 #undef YGBJ
138 #undef UBJ
139 #undef UGJ
140 #undef VGJ
141 #undef VRJ
142 #undef BBJ
143 #undef BGJ
144 #undef BRJ
145
146 // BT.709 YUV to RGB reference
147 // * R = Y - V * -1.28033
148 // * G = Y - U * 0.21482 - V * 0.38059
149 // * B = Y - U * -2.12798
150
151 // Y contribution to R,G,B. Scale and bias.
152 // TODO(fbarchard): Consider moving constants into a common header.
153 #define YGH 16320 /* round(1.000 * 64 * 256 * 256 / 257) */
154 #define YGBH 32 /* 64 / 2 */
155
156 // U and V contributions to R,G,B.
157 #define UBH -128 /* max(-128, round(-2.12798 * 64)) */
158 #define UGH 14 /* round(0.21482 * 64) */
159 #define VGH 24 /* round(0.38059 * 64) */
160 #define VRH -82 /* round(-1.28033 * 64) */
161
162 // Bias values to round, and subtract 128 from U and V.
163 #define BBH (UBH * 128 + YGBH)
164 #define BGH (UGH * 128 + VGH * 128 + YGBH)
165 #define BRH (VRH * 128 + YGBH)
166
167 // BT.709 constants for YUV to RGB.
168 YuvConstants SIMD_ALIGNED(kYuvHConstants) = {
169 { UBH, 0, UBH, 0, UBH, 0, UBH, 0, UBH, 0, UBH, 0, UBH, 0, UBH, 0,
170 UBH, 0, UBH, 0, UBH, 0, UBH, 0, UBH, 0, UBH, 0, UBH, 0, UBH, 0 },
171 { UGH, VGH, UGH, VGH, UGH, VGH, UGH, VGH,
172 UGH, VGH, UGH, VGH, UGH, VGH, UGH, VGH,
173 UGH, VGH, UGH, VGH, UGH, VGH, UGH, VGH,
174 UGH, VGH, UGH, VGH, UGH, VGH, UGH, VGH },
175 { 0, VRH, 0, VRH, 0, VRH, 0, VRH, 0, VRH, 0, VRH, 0, VRH, 0, VRH,
176 0, VRH, 0, VRH, 0, VRH, 0, VRH, 0, VRH, 0, VRH, 0, VRH, 0, VRH },
177 { BBH, BBH, BBH, BBH, BBH, BBH, BBH, BBH,
178 BBH, BBH, BBH, BBH, BBH, BBH, BBH, BBH },
179 { BGH, BGH, BGH, BGH, BGH, BGH, BGH, BGH,
180 BGH, BGH, BGH, BGH, BGH, BGH, BGH, BGH },
181 { BRH, BRH, BRH, BRH, BRH, BRH, BRH, BRH,
182 BRH, BRH, BRH, BRH, BRH, BRH, BRH, BRH },
183 { YGH, YGH, YGH, YGH, YGH, YGH, YGH, YGH,
184 YGH, YGH, YGH, YGH, YGH, YGH, YGH, YGH }
185 };
186
187 #undef YGH
188 #undef YGBH
189 #undef UBH
190 #undef UGH
191 #undef VGH
192 #undef VRH
193 #undef BBH
194 #undef BGH
195 #undef BRH
196
197 // 64 bit 28 // 64 bit
198 #if defined(_M_X64) 29 #if defined(_M_X64)
199 30
200 // Read 4 UV from 422, upsample to 8 UV. 31 // Read 4 UV from 422, upsample to 8 UV.
201 #define READYUV422 \ 32 #define READYUV422 \
202 xmm0 = _mm_cvtsi32_si128(*(uint32*)u_buf); \ 33 xmm0 = _mm_cvtsi32_si128(*(uint32*)u_buf); \
203 xmm1 = _mm_cvtsi32_si128(*(uint32*)(u_buf + offset)); \ 34 xmm1 = _mm_cvtsi32_si128(*(uint32*)(u_buf + offset)); \
204 xmm0 = _mm_unpacklo_epi8(xmm0, xmm1); \ 35 xmm0 = _mm_unpacklo_epi8(xmm0, xmm1); \
205 xmm0 = _mm_unpacklo_epi16(xmm0, xmm0); \ 36 xmm0 = _mm_unpacklo_epi16(xmm0, xmm0); \
206 u_buf += 4; 37 u_buf += 4;
(...skipping 6240 matching lines...) Expand 10 before | Expand all | Expand 10 after
6447 } 6278 }
6448 #endif // HAS_ARGBLUMACOLORTABLEROW_SSSE3 6279 #endif // HAS_ARGBLUMACOLORTABLEROW_SSSE3
6449 6280
6450 #endif // defined(_M_X64) 6281 #endif // defined(_M_X64)
6451 #endif // !defined(LIBYUV_DISABLE_X86) && (defined(_M_IX86) || defined(_M_X64)) 6282 #endif // !defined(LIBYUV_DISABLE_X86) && (defined(_M_IX86) || defined(_M_X64))
6452 6283
6453 #ifdef __cplusplus 6284 #ifdef __cplusplus
6454 } // extern "C" 6285 } // extern "C"
6455 } // namespace libyuv 6286 } // namespace libyuv
6456 #endif 6287 #endif
OLDNEW
« no previous file with comments | « source/row_neon64.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698