Revert of Add correct support for videos with YUVJ420P color format, in the software...
[chromium-blink-merge.git] / media / base / simd / scale_yuv_to_rgb_mmx.inc
bloba599b0c30a2262569ec0480e2acf9cb4935739ea
1 ; Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 ; Use of this source code is governed by a BSD-style license that can be
3 ; found in the LICENSE file.
5 %include "media/base/simd/media_export.asm"
7   EXPORT    SYMBOL
8   align     function_align
10 mangle(SYMBOL):
11   %assign   stack_offset 0
13   extern    mangle(kCoefficientsRgbY)
15 ; Parameters are in the following order:
16 ; 1. Y plane
17 ; 2. U plane
18 ; 3. V plane
19 ; 4. ARGB frame
20 ; 5. Width
21 ; 6. Source dx
23 PROLOGUE  6, 7, 3, Y, U, V, ARGB, R1, R2, TEMP
25 %ifdef ARCH_X86_64
26 %define     WORD_SIZE   QWORD
27 %else
28 %define     WORD_SIZE   DWORD
29 %endif
31   PUSH      R1q  ; Width
32   PUSH      R2q  ; Source dx
34 %define     SOURCE_DX   WORD_SIZE [rsp]
36   LOAD_SYM  R1q, mangle(kCoefficientsRgbY)
37 %define     WIDTH       WORD_SIZE [rsp + gprsize]
38 %define     TABLE       R1q
39 %define     Xq           R2q
41   ; Set Xq index to 0.
42   xor       Xq, Xq
43   jmp       .scaleend
45 .scaleloop:
46   mov       TEMPq, Xq
47   sar       TEMPq, 17
48   movzx     TEMPd, BYTE [Uq + TEMPq]
49   movq      mm0, [TABLE + 2048 + 8 * TEMPq]
50   mov       TEMPq, Xq
51   sar       TEMPq, 17
52   movzx     TEMPd, BYTE [Vq + TEMPq]
53   paddsw    mm0, [TABLE + 4096 + 8 * TEMPq]
54   mov       TEMPq, Xq
55   add       Xq, SOURCE_DX
56   sar       TEMPq, 16
57   movzx     TEMPd, BYTE [Yq + TEMPq]
58   movq      mm1, [TABLE + 8 * TEMPq]
59   mov       TEMPq, Xq
60   add       Xq, SOURCE_DX
61   sar       TEMPq, 16
62   movzx     TEMPd, BYTE [Yq + TEMPq]
63   movq      mm2, [TABLE + 8 * TEMPq]
64   paddsw    mm1, mm0
65   paddsw    mm2, mm0
66   psraw     mm1, 6
67   psraw     mm2, 6
68   packuswb  mm1, mm2
69   MOVQ      QWORD [ARGBq], mm1
70   add       ARGBq, 8
72 .scaleend:
73   sub       WIDTH, 2
74   jns       .scaleloop
76   and       WIDTH, 1             ; odd number of pixels?
77   jz        .scaledone
79   mov       TEMPq, Xq
80   sar       TEMPq, 17
81   movzx     TEMPd, BYTE [Uq + TEMPq]
82   movq      mm0, [TABLE + 2048 + 8 * TEMPq]
83   mov       TEMPq, Xq
84   sar       TEMPq, 17
85   movzx     TEMPd, BYTE [Vq + TEMPq]
86   paddsw    mm0, [TABLE + 4096 + 8 * TEMPq]
87   mov       TEMPq, Xq
88   sar       TEMPq, 16
89   movzx     TEMPd, BYTE [Yq + TEMPq]
90   movq      mm1, [TABLE + 8 * TEMPq]
91   paddsw    mm1, mm0
92   psraw     mm1, 6
93   packuswb  mm1, mm1
94   movd      DWORD [ARGBq], mm1
96 .scaledone:
97   ADD       rsp, 2 * gprsize
98   RET