OLD | NEW |
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 661 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
672 for (x = 0; x < width - 3; x += 4) { | 672 for (x = 0; x < width - 3; x += 4) { |
673 uint8 ab = (src_argb[0] + src_argb[4] + src_argb[8] + src_argb[12]) >> 2; | 673 uint8 ab = (src_argb[0] + src_argb[4] + src_argb[8] + src_argb[12]) >> 2; |
674 uint8 ag = (src_argb[1] + src_argb[5] + src_argb[9] + src_argb[13]) >> 2; | 674 uint8 ag = (src_argb[1] + src_argb[5] + src_argb[9] + src_argb[13]) >> 2; |
675 uint8 ar = (src_argb[2] + src_argb[6] + src_argb[10] + src_argb[14]) >> 2; | 675 uint8 ar = (src_argb[2] + src_argb[6] + src_argb[10] + src_argb[14]) >> 2; |
676 dst_u[0] = RGBToU(ar, ag, ab); | 676 dst_u[0] = RGBToU(ar, ag, ab); |
677 dst_v[0] = RGBToV(ar, ag, ab); | 677 dst_v[0] = RGBToV(ar, ag, ab); |
678 src_argb += 16; | 678 src_argb += 16; |
679 dst_u += 1; | 679 dst_u += 1; |
680 dst_v += 1; | 680 dst_v += 1; |
681 } | 681 } |
| 682 // Odd width handling mimics 'any' function which replicates last pixel. |
682 if ((width & 3) == 3) { | 683 if ((width & 3) == 3) { |
683 uint8 ab = (src_argb[0] + src_argb[4] + src_argb[8]) / 3; | 684 uint8 ab = (src_argb[0] + src_argb[4] + src_argb[8] + src_argb[8]) >> 2; |
684 uint8 ag = (src_argb[1] + src_argb[5] + src_argb[9]) / 3; | 685 uint8 ag = (src_argb[1] + src_argb[5] + src_argb[9] + src_argb[9]) >> 2; |
685 uint8 ar = (src_argb[2] + src_argb[6] + src_argb[10]) / 3; | 686 uint8 ar = (src_argb[2] + src_argb[6] + src_argb[10] + src_argb[10]) >> 2; |
686 dst_u[0] = RGBToU(ar, ag, ab); | 687 dst_u[0] = RGBToU(ar, ag, ab); |
687 dst_v[0] = RGBToV(ar, ag, ab); | 688 dst_v[0] = RGBToV(ar, ag, ab); |
688 } else if ((width & 3) == 2) { | 689 } else if ((width & 3) == 2) { |
689 uint8 ab = (src_argb[0] + src_argb[4]) >> 1; | 690 uint8 ab = (src_argb[0] + src_argb[4]) >> 1; |
690 uint8 ag = (src_argb[1] + src_argb[5]) >> 1; | 691 uint8 ag = (src_argb[1] + src_argb[5]) >> 1; |
691 uint8 ar = (src_argb[2] + src_argb[6]) >> 1; | 692 uint8 ar = (src_argb[2] + src_argb[6]) >> 1; |
692 dst_u[0] = RGBToU(ar, ag, ab); | 693 dst_u[0] = RGBToU(ar, ag, ab); |
693 dst_v[0] = RGBToV(ar, ag, ab); | 694 dst_v[0] = RGBToV(ar, ag, ab); |
694 } else if ((width & 3) == 1) { | 695 } else if ((width & 3) == 1) { |
695 uint8 ab = src_argb[0]; | 696 uint8 ab = src_argb[0]; |
(...skipping 2004 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2700 dst_rgb565 += twidth * 2; | 2701 dst_rgb565 += twidth * 2; |
2701 width -= twidth; | 2702 width -= twidth; |
2702 } | 2703 } |
2703 } | 2704 } |
2704 #endif | 2705 #endif |
2705 | 2706 |
2706 #ifdef __cplusplus | 2707 #ifdef __cplusplus |
2707 } // extern "C" | 2708 } // extern "C" |
2708 } // namespace libyuv | 2709 } // namespace libyuv |
2709 #endif | 2710 #endif |
OLD | NEW |