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

Side by Side Diff: source/libvpx/third_party/libyuv/source/convert_argb.cc

Issue 1302353004: libvpx: Pull from upstream (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/libvpx.git@master
Patch Set: 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
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 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 src_stride_y = src_stride_u = src_stride_v = dst_stride_argb = 0; 78 src_stride_y = src_stride_u = src_stride_v = dst_stride_argb = 0;
79 } 79 }
80 #if defined(HAS_I444TOARGBROW_SSSE3) 80 #if defined(HAS_I444TOARGBROW_SSSE3)
81 if (TestCpuFlag(kCpuHasSSSE3)) { 81 if (TestCpuFlag(kCpuHasSSSE3)) {
82 I444ToARGBRow = I444ToARGBRow_Any_SSSE3; 82 I444ToARGBRow = I444ToARGBRow_Any_SSSE3;
83 if (IS_ALIGNED(width, 8)) { 83 if (IS_ALIGNED(width, 8)) {
84 I444ToARGBRow = I444ToARGBRow_SSSE3; 84 I444ToARGBRow = I444ToARGBRow_SSSE3;
85 } 85 }
86 } 86 }
87 #endif 87 #endif
88 #if defined(HAS_I444TOARGBROW_AVX2)
89 if (TestCpuFlag(kCpuHasAVX2)) {
90 I444ToARGBRow = I444ToARGBRow_Any_AVX2;
91 if (IS_ALIGNED(width, 16)) {
92 I444ToARGBRow = I444ToARGBRow_AVX2;
93 }
94 }
95 #endif
88 #if defined(HAS_I444TOARGBROW_NEON) 96 #if defined(HAS_I444TOARGBROW_NEON)
89 if (TestCpuFlag(kCpuHasNEON)) { 97 if (TestCpuFlag(kCpuHasNEON)) {
90 I444ToARGBRow = I444ToARGBRow_Any_NEON; 98 I444ToARGBRow = I444ToARGBRow_Any_NEON;
91 if (IS_ALIGNED(width, 8)) { 99 if (IS_ALIGNED(width, 8)) {
92 I444ToARGBRow = I444ToARGBRow_NEON; 100 I444ToARGBRow = I444ToARGBRow_NEON;
93 } 101 }
94 } 102 }
95 #endif 103 #endif
96 104
97 for (y = 0; y < height; ++y) { 105 for (y = 0; y < height; ++y) {
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 src_stride_y = src_stride_u = src_stride_v = dst_stride_argb = 0; 223 src_stride_y = src_stride_u = src_stride_v = dst_stride_argb = 0;
216 } 224 }
217 #if defined(HAS_I411TOARGBROW_SSSE3) 225 #if defined(HAS_I411TOARGBROW_SSSE3)
218 if (TestCpuFlag(kCpuHasSSSE3)) { 226 if (TestCpuFlag(kCpuHasSSSE3)) {
219 I411ToARGBRow = I411ToARGBRow_Any_SSSE3; 227 I411ToARGBRow = I411ToARGBRow_Any_SSSE3;
220 if (IS_ALIGNED(width, 8)) { 228 if (IS_ALIGNED(width, 8)) {
221 I411ToARGBRow = I411ToARGBRow_SSSE3; 229 I411ToARGBRow = I411ToARGBRow_SSSE3;
222 } 230 }
223 } 231 }
224 #endif 232 #endif
233 #if defined(HAS_I411TOARGBROW_AVX2)
234 if (TestCpuFlag(kCpuHasAVX2)) {
235 I411ToARGBRow = I411ToARGBRow_Any_AVX2;
236 if (IS_ALIGNED(width, 16)) {
237 I411ToARGBRow = I411ToARGBRow_AVX2;
238 }
239 }
240 #endif
225 #if defined(HAS_I411TOARGBROW_NEON) 241 #if defined(HAS_I411TOARGBROW_NEON)
226 if (TestCpuFlag(kCpuHasNEON)) { 242 if (TestCpuFlag(kCpuHasNEON)) {
227 I411ToARGBRow = I411ToARGBRow_Any_NEON; 243 I411ToARGBRow = I411ToARGBRow_Any_NEON;
228 if (IS_ALIGNED(width, 8)) { 244 if (IS_ALIGNED(width, 8)) {
229 I411ToARGBRow = I411ToARGBRow_NEON; 245 I411ToARGBRow = I411ToARGBRow_NEON;
230 } 246 }
231 } 247 }
232 #endif 248 #endif
233 249
234 for (y = 0; y < height; ++y) { 250 for (y = 0; y < height; ++y) {
235 I411ToARGBRow(src_y, src_u, src_v, dst_argb, width); 251 I411ToARGBRow(src_y, src_u, src_v, dst_argb, width);
236 dst_argb += dst_stride_argb; 252 dst_argb += dst_stride_argb;
237 src_y += src_stride_y; 253 src_y += src_stride_y;
238 src_u += src_stride_u; 254 src_u += src_stride_u;
239 src_v += src_stride_v; 255 src_v += src_stride_v;
240 } 256 }
241 return 0; 257 return 0;
242 } 258 }
243 259
244 // Convert I400 to ARGB. 260 // Convert I400 to ARGB.
245 LIBYUV_API 261 LIBYUV_API
246 int I400ToARGB_Reference(const uint8* src_y, int src_stride_y, 262 int I400ToARGB(const uint8* src_y, int src_stride_y,
247 uint8* dst_argb, int dst_stride_argb, 263 uint8* dst_argb, int dst_stride_argb,
248 int width, int height) { 264 int width, int height) {
249 int y; 265 int y;
250 void (*YToARGBRow)(const uint8* y_buf, 266 void (*I400ToARGBRow)(const uint8* y_buf,
251 uint8* rgb_buf, 267 uint8* rgb_buf,
252 int width) = YToARGBRow_C; 268 int width) = I400ToARGBRow_C;
253 if (!src_y || !dst_argb || 269 if (!src_y || !dst_argb ||
254 width <= 0 || height == 0) { 270 width <= 0 || height == 0) {
255 return -1; 271 return -1;
256 } 272 }
257 // Negative height means invert the image. 273 // Negative height means invert the image.
258 if (height < 0) { 274 if (height < 0) {
259 height = -height; 275 height = -height;
260 dst_argb = dst_argb + (height - 1) * dst_stride_argb; 276 dst_argb = dst_argb + (height - 1) * dst_stride_argb;
261 dst_stride_argb = -dst_stride_argb; 277 dst_stride_argb = -dst_stride_argb;
262 } 278 }
263 // Coalesce rows. 279 // Coalesce rows.
264 if (src_stride_y == width && 280 if (src_stride_y == width &&
265 dst_stride_argb == width * 4) { 281 dst_stride_argb == width * 4) {
266 width *= height; 282 width *= height;
267 height = 1; 283 height = 1;
268 src_stride_y = dst_stride_argb = 0; 284 src_stride_y = dst_stride_argb = 0;
269 } 285 }
270 #if defined(HAS_YTOARGBROW_SSE2) 286 #if defined(HAS_I400TOARGBROW_SSE2)
271 if (TestCpuFlag(kCpuHasSSE2)) { 287 if (TestCpuFlag(kCpuHasSSE2)) {
272 YToARGBRow = YToARGBRow_Any_SSE2; 288 I400ToARGBRow = I400ToARGBRow_Any_SSE2;
273 if (IS_ALIGNED(width, 8)) { 289 if (IS_ALIGNED(width, 8)) {
274 YToARGBRow = YToARGBRow_SSE2; 290 I400ToARGBRow = I400ToARGBRow_SSE2;
275 } 291 }
276 } 292 }
277 #endif 293 #endif
278 #if defined(HAS_YTOARGBROW_AVX2) 294 #if defined(HAS_I400TOARGBROW_AVX2)
279 if (TestCpuFlag(kCpuHasAVX2)) { 295 if (TestCpuFlag(kCpuHasAVX2)) {
280 YToARGBRow = YToARGBRow_Any_AVX2; 296 I400ToARGBRow = I400ToARGBRow_Any_AVX2;
281 if (IS_ALIGNED(width, 16)) { 297 if (IS_ALIGNED(width, 16)) {
282 YToARGBRow = YToARGBRow_AVX2; 298 I400ToARGBRow = I400ToARGBRow_AVX2;
283 } 299 }
284 } 300 }
285 #endif 301 #endif
286 #if defined(HAS_YTOARGBROW_NEON) 302 #if defined(HAS_I400TOARGBROW_NEON)
287 if (TestCpuFlag(kCpuHasNEON)) { 303 if (TestCpuFlag(kCpuHasNEON)) {
288 YToARGBRow = YToARGBRow_Any_NEON; 304 I400ToARGBRow = I400ToARGBRow_Any_NEON;
289 if (IS_ALIGNED(width, 8)) { 305 if (IS_ALIGNED(width, 8)) {
290 YToARGBRow = YToARGBRow_NEON; 306 I400ToARGBRow = I400ToARGBRow_NEON;
291 } 307 }
292 } 308 }
293 #endif 309 #endif
294 310
295 for (y = 0; y < height; ++y) { 311 for (y = 0; y < height; ++y) {
296 YToARGBRow(src_y, dst_argb, width); 312 I400ToARGBRow(src_y, dst_argb, width);
297 dst_argb += dst_stride_argb; 313 dst_argb += dst_stride_argb;
298 src_y += src_stride_y; 314 src_y += src_stride_y;
299 } 315 }
300 return 0; 316 return 0;
301 } 317 }
302 318
303 // Convert I400 to ARGB. 319 // Convert J400 to ARGB.
304 LIBYUV_API 320 LIBYUV_API
305 int I400ToARGB(const uint8* src_y, int src_stride_y, 321 int J400ToARGB(const uint8* src_y, int src_stride_y,
306 uint8* dst_argb, int dst_stride_argb, 322 uint8* dst_argb, int dst_stride_argb,
307 int width, int height) { 323 int width, int height) {
308 int y; 324 int y;
309 void (*I400ToARGBRow)(const uint8* src_y, uint8* dst_argb, int pix) = 325 void (*J400ToARGBRow)(const uint8* src_y, uint8* dst_argb, int pix) =
310 I400ToARGBRow_C; 326 J400ToARGBRow_C;
311 if (!src_y || !dst_argb || 327 if (!src_y || !dst_argb ||
312 width <= 0 || height == 0) { 328 width <= 0 || height == 0) {
313 return -1; 329 return -1;
314 } 330 }
315 // Negative height means invert the image. 331 // Negative height means invert the image.
316 if (height < 0) { 332 if (height < 0) {
317 height = -height; 333 height = -height;
318 src_y = src_y + (height - 1) * src_stride_y; 334 src_y = src_y + (height - 1) * src_stride_y;
319 src_stride_y = -src_stride_y; 335 src_stride_y = -src_stride_y;
320 } 336 }
321 // Coalesce rows. 337 // Coalesce rows.
322 if (src_stride_y == width && 338 if (src_stride_y == width &&
323 dst_stride_argb == width * 4) { 339 dst_stride_argb == width * 4) {
324 width *= height; 340 width *= height;
325 height = 1; 341 height = 1;
326 src_stride_y = dst_stride_argb = 0; 342 src_stride_y = dst_stride_argb = 0;
327 } 343 }
328 #if defined(HAS_I400TOARGBROW_SSE2) 344 #if defined(HAS_J400TOARGBROW_SSE2)
329 if (TestCpuFlag(kCpuHasSSE2)) { 345 if (TestCpuFlag(kCpuHasSSE2)) {
330 I400ToARGBRow = I400ToARGBRow_Any_SSE2; 346 J400ToARGBRow = J400ToARGBRow_Any_SSE2;
331 if (IS_ALIGNED(width, 8)) { 347 if (IS_ALIGNED(width, 8)) {
332 I400ToARGBRow = I400ToARGBRow_SSE2; 348 J400ToARGBRow = J400ToARGBRow_SSE2;
333 } 349 }
334 } 350 }
335 #endif 351 #endif
336 #if defined(HAS_I400TOARGBROW_NEON) 352 #if defined(HAS_J400TOARGBROW_AVX2)
353 if (TestCpuFlag(kCpuHasAVX2)) {
354 J400ToARGBRow = J400ToARGBRow_Any_AVX2;
355 if (IS_ALIGNED(width, 16)) {
356 J400ToARGBRow = J400ToARGBRow_AVX2;
357 }
358 }
359 #endif
360 #if defined(HAS_J400TOARGBROW_NEON)
337 if (TestCpuFlag(kCpuHasNEON)) { 361 if (TestCpuFlag(kCpuHasNEON)) {
338 I400ToARGBRow = I400ToARGBRow_Any_NEON; 362 J400ToARGBRow = J400ToARGBRow_Any_NEON;
339 if (IS_ALIGNED(width, 8)) { 363 if (IS_ALIGNED(width, 8)) {
340 I400ToARGBRow = I400ToARGBRow_NEON; 364 J400ToARGBRow = J400ToARGBRow_NEON;
341 } 365 }
342 } 366 }
343 #endif 367 #endif
344 for (y = 0; y < height; ++y) { 368 for (y = 0; y < height; ++y) {
345 I400ToARGBRow(src_y, dst_argb, width); 369 J400ToARGBRow(src_y, dst_argb, width);
346 src_y += src_stride_y; 370 src_y += src_stride_y;
347 dst_argb += dst_stride_argb; 371 dst_argb += dst_stride_argb;
348 } 372 }
349 return 0; 373 return 0;
350 } 374 }
351 375
352 // Shuffle table for converting BGRA to ARGB. 376 // Shuffle table for converting BGRA to ARGB.
353 static uvec8 kShuffleMaskBGRAToARGB = { 377 static uvec8 kShuffleMaskBGRAToARGB = {
354 3u, 2u, 1u, 0u, 7u, 6u, 5u, 4u, 11u, 10u, 9u, 8u, 15u, 14u, 13u, 12u 378 3u, 2u, 1u, 0u, 7u, 6u, 5u, 4u, 11u, 10u, 9u, 8u, 15u, 14u, 13u, 12u
355 }; 379 };
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
545 src_stride_rgb565 = dst_stride_argb = 0; 569 src_stride_rgb565 = dst_stride_argb = 0;
546 } 570 }
547 #if defined(HAS_RGB565TOARGBROW_SSE2) 571 #if defined(HAS_RGB565TOARGBROW_SSE2)
548 if (TestCpuFlag(kCpuHasSSE2)) { 572 if (TestCpuFlag(kCpuHasSSE2)) {
549 RGB565ToARGBRow = RGB565ToARGBRow_Any_SSE2; 573 RGB565ToARGBRow = RGB565ToARGBRow_Any_SSE2;
550 if (IS_ALIGNED(width, 8)) { 574 if (IS_ALIGNED(width, 8)) {
551 RGB565ToARGBRow = RGB565ToARGBRow_SSE2; 575 RGB565ToARGBRow = RGB565ToARGBRow_SSE2;
552 } 576 }
553 } 577 }
554 #endif 578 #endif
579 #if defined(HAS_RGB565TOARGBROW_AVX2)
580 if (TestCpuFlag(kCpuHasAVX2)) {
581 RGB565ToARGBRow = RGB565ToARGBRow_Any_AVX2;
582 if (IS_ALIGNED(width, 16)) {
583 RGB565ToARGBRow = RGB565ToARGBRow_AVX2;
584 }
585 }
586 #endif
555 #if defined(HAS_RGB565TOARGBROW_NEON) 587 #if defined(HAS_RGB565TOARGBROW_NEON)
556 if (TestCpuFlag(kCpuHasNEON)) { 588 if (TestCpuFlag(kCpuHasNEON)) {
557 RGB565ToARGBRow = RGB565ToARGBRow_Any_NEON; 589 RGB565ToARGBRow = RGB565ToARGBRow_Any_NEON;
558 if (IS_ALIGNED(width, 8)) { 590 if (IS_ALIGNED(width, 8)) {
559 RGB565ToARGBRow = RGB565ToARGBRow_NEON; 591 RGB565ToARGBRow = RGB565ToARGBRow_NEON;
560 } 592 }
561 } 593 }
562 #endif 594 #endif
563 595
564 for (y = 0; y < height; ++y) { 596 for (y = 0; y < height; ++y) {
(...skipping 30 matching lines...) Expand all
595 src_stride_argb1555 = dst_stride_argb = 0; 627 src_stride_argb1555 = dst_stride_argb = 0;
596 } 628 }
597 #if defined(HAS_ARGB1555TOARGBROW_SSE2) 629 #if defined(HAS_ARGB1555TOARGBROW_SSE2)
598 if (TestCpuFlag(kCpuHasSSE2)) { 630 if (TestCpuFlag(kCpuHasSSE2)) {
599 ARGB1555ToARGBRow = ARGB1555ToARGBRow_Any_SSE2; 631 ARGB1555ToARGBRow = ARGB1555ToARGBRow_Any_SSE2;
600 if (IS_ALIGNED(width, 8)) { 632 if (IS_ALIGNED(width, 8)) {
601 ARGB1555ToARGBRow = ARGB1555ToARGBRow_SSE2; 633 ARGB1555ToARGBRow = ARGB1555ToARGBRow_SSE2;
602 } 634 }
603 } 635 }
604 #endif 636 #endif
637 #if defined(HAS_ARGB1555TOARGBROW_AVX2)
638 if (TestCpuFlag(kCpuHasAVX2)) {
639 ARGB1555ToARGBRow = ARGB1555ToARGBRow_Any_AVX2;
640 if (IS_ALIGNED(width, 16)) {
641 ARGB1555ToARGBRow = ARGB1555ToARGBRow_AVX2;
642 }
643 }
644 #endif
605 #if defined(HAS_ARGB1555TOARGBROW_NEON) 645 #if defined(HAS_ARGB1555TOARGBROW_NEON)
606 if (TestCpuFlag(kCpuHasNEON)) { 646 if (TestCpuFlag(kCpuHasNEON)) {
607 ARGB1555ToARGBRow = ARGB1555ToARGBRow_Any_NEON; 647 ARGB1555ToARGBRow = ARGB1555ToARGBRow_Any_NEON;
608 if (IS_ALIGNED(width, 8)) { 648 if (IS_ALIGNED(width, 8)) {
609 ARGB1555ToARGBRow = ARGB1555ToARGBRow_NEON; 649 ARGB1555ToARGBRow = ARGB1555ToARGBRow_NEON;
610 } 650 }
611 } 651 }
612 #endif 652 #endif
613 653
614 for (y = 0; y < height; ++y) { 654 for (y = 0; y < height; ++y) {
(...skipping 30 matching lines...) Expand all
645 src_stride_argb4444 = dst_stride_argb = 0; 685 src_stride_argb4444 = dst_stride_argb = 0;
646 } 686 }
647 #if defined(HAS_ARGB4444TOARGBROW_SSE2) 687 #if defined(HAS_ARGB4444TOARGBROW_SSE2)
648 if (TestCpuFlag(kCpuHasSSE2)) { 688 if (TestCpuFlag(kCpuHasSSE2)) {
649 ARGB4444ToARGBRow = ARGB4444ToARGBRow_Any_SSE2; 689 ARGB4444ToARGBRow = ARGB4444ToARGBRow_Any_SSE2;
650 if (IS_ALIGNED(width, 8)) { 690 if (IS_ALIGNED(width, 8)) {
651 ARGB4444ToARGBRow = ARGB4444ToARGBRow_SSE2; 691 ARGB4444ToARGBRow = ARGB4444ToARGBRow_SSE2;
652 } 692 }
653 } 693 }
654 #endif 694 #endif
695 #if defined(HAS_ARGB4444TOARGBROW_AVX2)
696 if (TestCpuFlag(kCpuHasAVX2)) {
697 ARGB4444ToARGBRow = ARGB4444ToARGBRow_Any_AVX2;
698 if (IS_ALIGNED(width, 16)) {
699 ARGB4444ToARGBRow = ARGB4444ToARGBRow_AVX2;
700 }
701 }
702 #endif
655 #if defined(HAS_ARGB4444TOARGBROW_NEON) 703 #if defined(HAS_ARGB4444TOARGBROW_NEON)
656 if (TestCpuFlag(kCpuHasNEON)) { 704 if (TestCpuFlag(kCpuHasNEON)) {
657 ARGB4444ToARGBRow = ARGB4444ToARGBRow_Any_NEON; 705 ARGB4444ToARGBRow = ARGB4444ToARGBRow_Any_NEON;
658 if (IS_ALIGNED(width, 8)) { 706 if (IS_ALIGNED(width, 8)) {
659 ARGB4444ToARGBRow = ARGB4444ToARGBRow_NEON; 707 ARGB4444ToARGBRow = ARGB4444ToARGBRow_NEON;
660 } 708 }
661 } 709 }
662 #endif 710 #endif
663 711
664 for (y = 0; y < height; ++y) { 712 for (y = 0; y < height; ++y) {
(...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after
1098 src_u += src_stride_u; 1146 src_u += src_stride_u;
1099 src_v += src_stride_v; 1147 src_v += src_stride_v;
1100 } 1148 }
1101 return 0; 1149 return 0;
1102 } 1150 }
1103 1151
1104 #ifdef __cplusplus 1152 #ifdef __cplusplus
1105 } // extern "C" 1153 } // extern "C"
1106 } // namespace libyuv 1154 } // namespace libyuv
1107 #endif 1155 #endif
OLDNEW
« no previous file with comments | « source/libvpx/third_party/libyuv/source/convert.cc ('k') | source/libvpx/third_party/libyuv/source/convert_from.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698