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

Side by Side Diff: source/row_win.cc

Issue 1419103007: Raw 24 bit RGB to RGB24 (bgr) (Closed) Base URL: https://chromium.googlesource.com/libyuv/libyuv@master
Patch Set: st3 for neon 24 bit stores Created 5 years, 1 month 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') | unit_test/convert_test.cc » ('j') | 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
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 // Shuffle table for converting RGB24 to ARGB. 219 // Shuffle table for converting RGB24 to ARGB.
220 static const uvec8 kShuffleMaskRGB24ToARGB = { 220 static const uvec8 kShuffleMaskRGB24ToARGB = {
221 0u, 1u, 2u, 12u, 3u, 4u, 5u, 13u, 6u, 7u, 8u, 14u, 9u, 10u, 11u, 15u 221 0u, 1u, 2u, 12u, 3u, 4u, 5u, 13u, 6u, 7u, 8u, 14u, 9u, 10u, 11u, 15u
222 }; 222 };
223 223
224 // Shuffle table for converting RAW to ARGB. 224 // Shuffle table for converting RAW to ARGB.
225 static const uvec8 kShuffleMaskRAWToARGB = { 225 static const uvec8 kShuffleMaskRAWToARGB = {
226 2u, 1u, 0u, 12u, 5u, 4u, 3u, 13u, 8u, 7u, 6u, 14u, 11u, 10u, 9u, 15u 226 2u, 1u, 0u, 12u, 5u, 4u, 3u, 13u, 8u, 7u, 6u, 14u, 11u, 10u, 9u, 15u
227 }; 227 };
228 228
229 // Shuffle table for converting RAW to RGB24. First 8.
230 static const uvec8 kShuffleMaskRAWToRGB24_0 = {
231 2u, 1u, 0u, 5u, 4u, 3u, 8u, 7u,
232 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u
233 };
234
235 // Shuffle table for converting RAW to RGB24. Middle 8.
236 static const uvec8 kShuffleMaskRAWToRGB24_1 = {
237 2u, 7u, 6u, 5u, 10u, 9u, 8u, 13u,
238 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u
239 };
240
241 // Shuffle table for converting RAW to RGB24. Last 8.
242 static const uvec8 kShuffleMaskRAWToRGB24_2 = {
243 8u, 7u, 12u, 11u, 10u, 15u, 14u, 13u,
244 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u
245 };
246
229 // Shuffle table for converting ARGB to RGB24. 247 // Shuffle table for converting ARGB to RGB24.
230 static const uvec8 kShuffleMaskARGBToRGB24 = { 248 static const uvec8 kShuffleMaskARGBToRGB24 = {
231 0u, 1u, 2u, 4u, 5u, 6u, 8u, 9u, 10u, 12u, 13u, 14u, 128u, 128u, 128u, 128u 249 0u, 1u, 2u, 4u, 5u, 6u, 8u, 9u, 10u, 12u, 13u, 14u, 128u, 128u, 128u, 128u
232 }; 250 };
233 251
234 // Shuffle table for converting ARGB to RAW. 252 // Shuffle table for converting ARGB to RAW.
235 static const uvec8 kShuffleMaskARGBToRAW = { 253 static const uvec8 kShuffleMaskARGBToRAW = {
236 2u, 1u, 0u, 6u, 5u, 4u, 10u, 9u, 8u, 14u, 13u, 12u, 128u, 128u, 128u, 128u 254 2u, 1u, 0u, 6u, 5u, 4u, 10u, 9u, 8u, 14u, 13u, 12u, 128u, 128u, 128u, 128u
237 }; 255 };
238 256
239 // Shuffle table for converting ARGBToRGB24 for I422ToRGB24. First 8 + next 4 257 // Shuffle table for converting ARGBToRGB24 for I422ToRGB24. First 8 + next 4
240 static const uvec8 kShuffleMaskARGBToRGB24_0 = { 258 static const uvec8 kShuffleMaskARGBToRGB24_0 = {
241 0u, 1u, 2u, 4u, 5u, 6u, 8u, 9u, 128u, 128u, 128u, 128u, 10u, 12u, 13u, 14u 259 0u, 1u, 2u, 4u, 5u, 6u, 8u, 9u, 128u, 128u, 128u, 128u, 10u, 12u, 13u, 14u
242 }; 260 };
243 261
244 // Shuffle table for converting ARGB to RAW.
245 static const uvec8 kShuffleMaskARGBToRAW_0 = {
246 2u, 1u, 0u, 6u, 5u, 4u, 10u, 9u, 128u, 128u, 128u, 128u, 8u, 14u, 13u, 12u
247 };
248
249 // YUY2 shuf 16 Y to 32 Y. 262 // YUY2 shuf 16 Y to 32 Y.
250 static const lvec8 kShuffleYUY2Y = { 263 static const lvec8 kShuffleYUY2Y = {
251 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 264 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14,
252 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14 265 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14
253 }; 266 };
254 267
255 // YUY2 shuf 8 UV to 16 UV. 268 // YUY2 shuf 8 UV to 16 UV.
256 static const lvec8 kShuffleYUY2UV = { 269 static const lvec8 kShuffleYUY2UV = {
257 1, 3, 1, 3, 5, 7, 5, 7, 9, 11, 9, 11, 13, 15, 13, 15, 270 1, 3, 1, 3, 5, 7, 5, 7, 9, 11, 9, 11, 13, 15, 13, 15,
258 1, 3, 1, 3, 5, 7, 5, 7, 9, 11, 9, 11, 13, 15, 13, 15 271 1, 3, 1, 3, 5, 7, 5, 7, 9, 11, 9, 11, 13, 15, 13, 15
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 movdqu [edx + 16], xmm1 419 movdqu [edx + 16], xmm1
407 por xmm3, xmm5 420 por xmm3, xmm5
408 movdqu [edx + 48], xmm3 421 movdqu [edx + 48], xmm3
409 lea edx, [edx + 64] 422 lea edx, [edx + 64]
410 sub ecx, 16 423 sub ecx, 16
411 jg convertloop 424 jg convertloop
412 ret 425 ret
413 } 426 }
414 } 427 }
415 428
429 __declspec(naked)
430 void RAWToRGB24Row_SSSE3(const uint8* src_raw, uint8* dst_rgb24, int width) {
431 __asm {
432 mov eax, [esp + 4] // src_raw
433 mov edx, [esp + 8] // dst_rgb24
434 mov ecx, [esp + 12] // width
435 movdqa xmm3, xmmword ptr kShuffleMaskRAWToRGB24_0
436 movdqa xmm4, xmmword ptr kShuffleMaskRAWToRGB24_1
437 movdqa xmm5, xmmword ptr kShuffleMaskRAWToRGB24_2
438
439 convertloop:
440 movdqu xmm0, [eax]
441 movdqu xmm1, [eax + 4]
442 movdqu xmm2, [eax + 8]
443 lea eax, [eax + 24]
444 pshufb xmm0, xmm3
445 pshufb xmm1, xmm4
446 pshufb xmm2, xmm5
447 movq qword ptr [edx], xmm0
448 movq qword ptr [edx + 8], xmm1
449 movq qword ptr [edx + 16], xmm2
450 lea edx, [edx + 24]
451 sub ecx, 8
452 jg convertloop
453 ret
454 }
455 }
456
416 // pmul method to replicate bits. 457 // pmul method to replicate bits.
417 // Math to replicate bits: 458 // Math to replicate bits:
418 // (v << 8) | (v << 3) 459 // (v << 8) | (v << 3)
419 // v * 256 + v * 8 460 // v * 256 + v * 8
420 // v * (256 + 8) 461 // v * (256 + 8)
421 // G shift of 5 is incorporated, so shift is 5 + 8 and 5 + 3 462 // G shift of 5 is incorporated, so shift is 5 + 8 and 5 + 3
422 // 20 instructions. 463 // 20 instructions.
423 __declspec(naked) 464 __declspec(naked)
424 void RGB565ToARGBRow_SSE2(const uint8* src_rgb565, uint8* dst_argb, 465 void RGB565ToARGBRow_SSE2(const uint8* src_rgb565, uint8* dst_argb,
425 int width) { 466 int width) {
(...skipping 5761 matching lines...) Expand 10 before | Expand all | Expand 10 after
6187 } 6228 }
6188 #endif // HAS_ARGBLUMACOLORTABLEROW_SSSE3 6229 #endif // HAS_ARGBLUMACOLORTABLEROW_SSSE3
6189 6230
6190 #endif // defined(_M_X64) 6231 #endif // defined(_M_X64)
6191 #endif // !defined(LIBYUV_DISABLE_X86) && (defined(_M_IX86) || defined(_M_X64)) 6232 #endif // !defined(LIBYUV_DISABLE_X86) && (defined(_M_IX86) || defined(_M_X64))
6192 6233
6193 #ifdef __cplusplus 6234 #ifdef __cplusplus
6194 } // extern "C" 6235 } // extern "C"
6195 } // namespace libyuv 6236 } // namespace libyuv
6196 #endif 6237 #endif
OLDNEW
« no previous file with comments | « source/row_neon64.cc ('k') | unit_test/convert_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698