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

Side by Side Diff: source/row_win.cc

Issue 1574253004: refactor ARGBToI422 using ARGBToI420 internally (Closed) Base URL: https://chromium.googlesource.com/libyuv/libyuv@master
Patch Set: Created 4 years, 11 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') | 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 1630 matching lines...) Expand 10 before | Expand all | Expand 10 after
1641 lea edx, [edx + 16] 1641 lea edx, [edx + 16]
1642 sub ecx, 16 1642 sub ecx, 16
1643 jg convertloop 1643 jg convertloop
1644 1644
1645 pop edi 1645 pop edi
1646 ret 1646 ret
1647 } 1647 }
1648 } 1648 }
1649 1649
1650 __declspec(naked) 1650 __declspec(naked)
1651 void ARGBToUV422Row_SSSE3(const uint8* src_argb0,
1652 uint8* dst_u, uint8* dst_v, int width) {
1653 __asm {
1654 push edi
1655 mov eax, [esp + 4 + 4] // src_argb
1656 mov edx, [esp + 4 + 8] // dst_u
1657 mov edi, [esp + 4 + 12] // dst_v
1658 mov ecx, [esp + 4 + 16] // width
1659 movdqa xmm5, xmmword ptr kAddUV128
1660 movdqa xmm6, xmmword ptr kARGBToV
1661 movdqa xmm7, xmmword ptr kARGBToU
1662 sub edi, edx // stride from u to v
1663
1664 convertloop:
1665 /* step 1 - subsample 16x2 argb pixels to 8x1 */
1666 movdqu xmm0, [eax]
1667 movdqu xmm1, [eax + 16]
1668 movdqu xmm2, [eax + 32]
1669 movdqu xmm3, [eax + 48]
1670 lea eax, [eax + 64]
1671 movdqa xmm4, xmm0
1672 shufps xmm0, xmm1, 0x88
1673 shufps xmm4, xmm1, 0xdd
1674 pavgb xmm0, xmm4
1675 movdqa xmm4, xmm2
1676 shufps xmm2, xmm3, 0x88
1677 shufps xmm4, xmm3, 0xdd
1678 pavgb xmm2, xmm4
1679
1680 // step 2 - convert to U and V
1681 // from here down is very similar to Y code except
1682 // instead of 16 different pixels, its 8 pixels of U and 8 of V
1683 movdqa xmm1, xmm0
1684 movdqa xmm3, xmm2
1685 pmaddubsw xmm0, xmm7 // U
1686 pmaddubsw xmm2, xmm7
1687 pmaddubsw xmm1, xmm6 // V
1688 pmaddubsw xmm3, xmm6
1689 phaddw xmm0, xmm2
1690 phaddw xmm1, xmm3
1691 psraw xmm0, 8
1692 psraw xmm1, 8
1693 packsswb xmm0, xmm1
1694 paddb xmm0, xmm5 // -> unsigned
1695
1696 // step 3 - store 8 U and 8 V values
1697 movlps qword ptr [edx], xmm0 // U
1698 movhps qword ptr [edx + edi], xmm0 // V
1699 lea edx, [edx + 8]
1700 sub ecx, 16
1701 jg convertloop
1702
1703 pop edi
1704 ret
1705 }
1706 }
1707
1708 __declspec(naked)
1709 void BGRAToUVRow_SSSE3(const uint8* src_argb0, int src_stride_argb, 1651 void BGRAToUVRow_SSSE3(const uint8* src_argb0, int src_stride_argb,
1710 uint8* dst_u, uint8* dst_v, int width) { 1652 uint8* dst_u, uint8* dst_v, int width) {
1711 __asm { 1653 __asm {
1712 push esi 1654 push esi
1713 push edi 1655 push edi
1714 mov eax, [esp + 8 + 4] // src_argb 1656 mov eax, [esp + 8 + 4] // src_argb
1715 mov esi, [esp + 8 + 8] // src_stride_argb 1657 mov esi, [esp + 8 + 8] // src_stride_argb
1716 mov edx, [esp + 8 + 12] // dst_u 1658 mov edx, [esp + 8 + 12] // dst_u
1717 mov edi, [esp + 8 + 16] // dst_v 1659 mov edi, [esp + 8 + 16] // dst_v
1718 mov ecx, [esp + 8 + 20] // width 1660 mov ecx, [esp + 8 + 20] // width
(...skipping 4504 matching lines...) Expand 10 before | Expand all | Expand 10 after
6223 } 6165 }
6224 #endif // HAS_ARGBLUMACOLORTABLEROW_SSSE3 6166 #endif // HAS_ARGBLUMACOLORTABLEROW_SSSE3
6225 6167
6226 #endif // defined(_M_X64) 6168 #endif // defined(_M_X64)
6227 #endif // !defined(LIBYUV_DISABLE_X86) && (defined(_M_IX86) || defined(_M_X64)) 6169 #endif // !defined(LIBYUV_DISABLE_X86) && (defined(_M_IX86) || defined(_M_X64))
6228 6170
6229 #ifdef __cplusplus 6171 #ifdef __cplusplus
6230 } // extern "C" 6172 } // extern "C"
6231 } // namespace libyuv 6173 } // namespace libyuv
6232 #endif 6174 #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