[svn] / trunk / xvidcore / src / image / x86_asm / colorspace_rgb_mmx.asm Repository:
ViewVC logotype

Diff of /trunk/xvidcore/src/image/x86_asm/colorspace_rgb_mmx.asm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1381, Thu Mar 18 16:11:28 2004 UTC revision 1382, Mon Mar 22 22:36:25 2004 UTC
# Line 1  Line 1 
1  ;/**************************************************************************  ;/*****************************************************************************
2  ; *  ; *
3  ; *     XVID MPEG-4 VIDEO CODEC  ; *     XVID MPEG-4 VIDEO CODEC
4  ; *     colorspace rgb  ; *  - RGB colorspace conversions -
5    ; *
6    ; *  Copyright(C) 2002-2003 Michael Militzer <isibaar@xvid.org>
7    ; *               2002-2003 Peter Ross <pross@xvid.org>
8  ; *  ; *
9  ; *     This program is free software; you can redistribute it and/or modify  ; *     This program is free software; you can redistribute it and/or modify
10  ; *     it under the terms of the GNU General Public License as published by  ; *     it under the terms of the GNU General Public License as published by
# Line 15  Line 18 
18  ; *  ; *
19  ; *     You should have received a copy of the GNU General Public License  ; *     You should have received a copy of the GNU General Public License
20  ; *     along with this program; if not, write to the Free Software  ; *     along with this program; if not, write to the Free Software
21  ; *     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  ; *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 ; *  
 ; *************************************************************************/  
   
 ;/**************************************************************************  
 ; *  
 ; *     History:  
22  ; *  ; *
23  ; *     10.10.2001      initial version; (c)2002 peter ross <pross@xvid.org>  ; ****************************************************************************/
 ; *  
 ; *************************************************************************/  
   
24    
25  bits 32  BITS 32
26    
27  %macro cglobal 1  %macro cglobal 1
28          %ifdef PREFIX          %ifdef PREFIX
# Line 39  Line 33 
33          %endif          %endif
34  %endmacro  %endmacro
35    
36    ;=============================================================================
37    ; Some constants
38    ;=============================================================================
39    
40  section .data  ;-----------------------------------------------------------------------------
 align 16  
   
 ;===========================================================================  
41  ; RGB->YV12 yuv constants  ; RGB->YV12 yuv constants
42  ;===========================================================================  ;-----------------------------------------------------------------------------
43    
44  %define Y_R             0.257  %define Y_R             0.257
45  %define Y_G             0.504  %define Y_G             0.504
46  %define Y_B             0.098  %define Y_B             0.098
# Line 61  Line 56 
56  %define V_B             0.071  %define V_B             0.071
57  %define V_ADD   128  %define V_ADD   128
58    
59  ;===========================================================================  ; Scaling used during conversion
60  ; RGB->YV12 multiplication matrices  %define SCALEBITS 6
 ;===========================================================================  
 ;                               FIX(Y_B)        FIX(Y_G)        FIX(Y_R)  
 y_mul   dw               25,             129,            66,                    0  
 u_mul   dw               112,           -74,            -38,                    0  
 v_mul   dw              -18,            -94,             112,                   0  
61    
62    ;=============================================================================
63    ; Read only data
64    ;=============================================================================
65    
66  ;===========================================================================  %ifdef FORMAT_COFF
67  ; YV12->RGB data  SECTION .rodata data
68  ;===========================================================================  %else
69  %define SCALEBITS 6  SECTION .rodata data align=16
70  Y_SUB           dw  16,  16,  16,  16  %endif
71  U_SUB           dw 128, 128, 128, 128  ALIGN 16
 V_SUB           dw 128, 128, 128, 128  
72    
73  Y_MUL           dw  74,  74,  74,  74  ;-----------------------------------------------------------------------------
74    ; RGB->YV12 multiplication matrices
75    ;-----------------------------------------------------------------------------
76    ;         FIX(Y_B)      FIX(Y_G)        FIX(Y_R) Ignored
77    
78  UG_MUL          dw  25,  25,  25,  25  y_mul: dw    25,      129,        66,      0
79  VG_MUL          dw  52,  52,  52,  52  u_mul: dw   112,      -74,       -38,      0
80    v_mul: dw   -18,      -94,       112,      0
81    
 UB_MUL          dw 129, 129, 129, 129  
 VR_MUL          dw 102, 102, 102, 102  
82    
83    ;-----------------------------------------------------------------------------
84    ; YV12->RGB data
85    ;-----------------------------------------------------------------------------
86    
87    Y_SUB: dw  16,  16,  16,  16
88    U_SUB: dw 128, 128, 128, 128
89    V_SUB: dw 128, 128, 128, 128
90    
91  section .text  Y_MUL: dw  74,  74,  74,  74
92    
93  %include "colorspace_mmx.inc"  UG_MUL: dw  25,  25,  25,  25
94    VG_MUL: dw  52,  52,  52,  52
95    
96    UB_MUL: dw 129, 129, 129, 129
97    VR_MUL: dw 102, 102, 102, 102
98    
99    BRIGHT: db 128, 128, 128, 128, 128, 128, 128, 128
100    
101    ;=============================================================================
102    ; Helper macros used with the colorspace_mmx.inc file
103    ;=============================================================================
104    
105  ;------------------------------------------------------------------------------  ;------------------------------------------------------------------------------
106  ; BGR_TO_YV12( BYTES )  ; BGR_TO_YV12( BYTES )
# Line 100  Line 109 
109  ;  ;
110  ; bytes=3/4, pixels = 2, vpixels=2  ; bytes=3/4, pixels = 2, vpixels=2
111  ;------------------------------------------------------------------------------  ;------------------------------------------------------------------------------
112    
113  %macro BGR_TO_YV12_INIT         2  %macro BGR_TO_YV12_INIT         2
114                  movq mm7, [y_mul]                  movq mm7, [y_mul]
115  %endmacro  %endmacro
# Line 164  Line 174 
174                  mov [esi + eax + 1], dl                 ; y_ptr[y_stride + 1]                  mov [esi + eax + 1], dl                 ; y_ptr[y_stride + 1]
175    
176                  ; u_ptr, v_ptr                  ; u_ptr, v_ptr
   
177                  movq mm0, mm6                   ; = [  |b4|g4|r4]                  movq mm0, mm6                   ; = [  |b4|g4|r4]
178                  pmaddwd mm6, [v_mul]            ; *= V_MUL                  pmaddwd mm6, [v_mul]            ; *= V_MUL
179                  pmaddwd mm0, [u_mul]            ; *= U_MUL                  pmaddwd mm0, [u_mul]            ; *= U_MUL
# Line 187  Line 196 
196    
197                  pop edx                  pop edx
198  %endmacro  %endmacro
 ;------------------------------------------------------------------------------  
   
   
   
   
199    
200  ;------------------------------------------------------------------------------  ;------------------------------------------------------------------------------
201  ; YV12_TO_BGR( BYTES )  ; YV12_TO_BGR( BYTES )
# Line 200  Line 204 
204  ;  ;
205  ; bytes=3/4, pixels = 8, vpixels=2  ; bytes=3/4, pixels = 8, vpixels=2
206  ;------------------------------------------------------------------------------  ;------------------------------------------------------------------------------
207    
208  %macro YV12_TO_BGR_INIT         2  %macro YV12_TO_BGR_INIT         2
209                  pxor mm7, mm7                   ; clear mm7                  pxor mm7, mm7                   ; clear mm7
210  %endmacro  %endmacro
211    
   
212  %macro YV12_TO_BGR                      2  %macro YV12_TO_BGR                      2
213  %define TEMP_Y1  esp  %define TEMP_Y1  esp
214  %define TEMP_Y2  esp + 8  %define TEMP_Y2  esp + 8
# Line 212  Line 216 
216  %define TEMP_G2  esp + 24  %define TEMP_G2  esp + 24
217  %define TEMP_B1  esp + 32  %define TEMP_B1  esp + 32
218  %define TEMP_B2  esp + 40  %define TEMP_B2  esp + 40
219    
220          movd mm2, [ebx]         ; u_ptr[0]          movd mm2, [ebx]         ; u_ptr[0]
221          movd mm3, [ecx]         ; v_ptr[0]          movd mm3, [ecx]         ; v_ptr[0]
   
222          punpcklbw mm2, mm7              ; u3u2u1u0 -> mm2          punpcklbw mm2, mm7              ; u3u2u1u0 -> mm2
223          punpcklbw mm3, mm7              ; v3v2v1v0 -> mm3          punpcklbw mm3, mm7              ; v3v2v1v0 -> mm3
   
224          psubsw mm2, [U_SUB]             ; U - 128          psubsw mm2, [U_SUB]             ; U - 128
225          psubsw mm3, [V_SUB]             ; V - 128          psubsw mm3, [V_SUB]             ; V - 128
   
226          movq mm4, mm2          movq mm4, mm2
227          movq mm5, mm3          movq mm5, mm3
   
228          pmullw mm2, [UG_MUL]          pmullw mm2, [UG_MUL]
229          pmullw mm3, [VG_MUL]          pmullw mm3, [VG_MUL]
   
230          movq mm6, mm2                   ; u3u2u1u0 -> mm6          movq mm6, mm2                   ; u3u2u1u0 -> mm6
231          punpckhwd mm2, mm2              ; u3u3u2u2 -> mm2          punpckhwd mm2, mm2              ; u3u3u2u2 -> mm2
232          punpcklwd mm6, mm6              ; u1u1u0u0 -> mm6          punpcklwd mm6, mm6              ; u1u1u0u0 -> mm6
   
233          pmullw mm4, [UB_MUL]            ; B_ADD -> mm4          pmullw mm4, [UB_MUL]            ; B_ADD -> mm4
   
234          movq mm0, mm3          movq mm0, mm3
235          punpckhwd mm3, mm3              ; v3v3v2v2 -> mm2          punpckhwd mm3, mm3              ; v3v3v2v2 -> mm2
236          punpcklwd mm0, mm0              ; v1v1v0v0 -> mm6          punpcklwd mm0, mm0              ; v1v1v0v0 -> mm6
   
237          paddsw mm2, mm3          paddsw mm2, mm3
238          paddsw mm6, mm0          paddsw mm6, mm0
   
239          pmullw mm5, [VR_MUL]            ; R_ADD -> mm5          pmullw mm5, [VR_MUL]            ; R_ADD -> mm5
   
240          movq mm0, [esi]                 ; y7y6y5y4y3y2y1y0 -> mm0          movq mm0, [esi]                 ; y7y6y5y4y3y2y1y0 -> mm0
   
241          movq mm1, mm0          movq mm1, mm0
242          punpckhbw mm1, mm7              ; y7y6y5y4 -> mm1          punpckhbw mm1, mm7              ; y7y6y5y4 -> mm1
243          punpcklbw mm0, mm7              ; y3y2y1y0 -> mm0          punpcklbw mm0, mm7              ; y3y2y1y0 -> mm0
   
244          psubsw mm0, [Y_SUB]             ; Y - Y_SUB          psubsw mm0, [Y_SUB]             ; Y - Y_SUB
245          psubsw mm1, [Y_SUB]             ; Y - Y_SUB          psubsw mm1, [Y_SUB]             ; Y - Y_SUB
   
246          pmullw mm1, [Y_MUL]          pmullw mm1, [Y_MUL]
247          pmullw mm0, [Y_MUL]          pmullw mm0, [Y_MUL]
   
248          movq [TEMP_Y2], mm1             ; y7y6y5y4 -> mm3          movq [TEMP_Y2], mm1             ; y7y6y5y4 -> mm3
249          movq [TEMP_Y1], mm0             ; y3y2y1y0 -> mm7          movq [TEMP_Y1], mm0             ; y3y2y1y0 -> mm7
   
250          psubsw mm1, mm2                 ; g7g6g5g4 -> mm1          psubsw mm1, mm2                 ; g7g6g5g4 -> mm1
251          psubsw mm0, mm6                 ; g3g2g1g0 -> mm0          psubsw mm0, mm6                 ; g3g2g1g0 -> mm0
   
252          psraw mm1, SCALEBITS          psraw mm1, SCALEBITS
253          psraw mm0, SCALEBITS          psraw mm0, SCALEBITS
   
254          packuswb mm0, mm1               ;g7g6g5g4g3g2g1g0 -> mm0          packuswb mm0, mm1               ;g7g6g5g4g3g2g1g0 -> mm0
   
255          movq [TEMP_G1], mm0          movq [TEMP_G1], mm0
   
256          movq mm0, [esi+eax]                     ; y7y6y5y4y3y2y1y0 -> mm0          movq mm0, [esi+eax]                     ; y7y6y5y4y3y2y1y0 -> mm0
   
257          movq mm1, mm0          movq mm1, mm0
   
258          punpckhbw mm1, mm7              ; y7y6y5y4 -> mm1          punpckhbw mm1, mm7              ; y7y6y5y4 -> mm1
259          punpcklbw mm0, mm7              ; y3y2y1y0 -> mm0          punpcklbw mm0, mm7              ; y3y2y1y0 -> mm0
   
260          psubsw mm0, [Y_SUB]             ; Y - Y_SUB          psubsw mm0, [Y_SUB]             ; Y - Y_SUB
261          psubsw mm1, [Y_SUB]             ; Y - Y_SUB          psubsw mm1, [Y_SUB]             ; Y - Y_SUB
   
262          pmullw mm1, [Y_MUL]          pmullw mm1, [Y_MUL]
263          pmullw mm0, [Y_MUL]          pmullw mm0, [Y_MUL]
   
264          movq mm3, mm1          movq mm3, mm1
265          psubsw mm1, mm2                 ; g7g6g5g4 -> mm1          psubsw mm1, mm2                 ; g7g6g5g4 -> mm1
   
266          movq mm2, mm0          movq mm2, mm0
267          psubsw mm0, mm6                 ; g3g2g1g0 -> mm0          psubsw mm0, mm6                 ; g3g2g1g0 -> mm0
   
268          psraw mm1, SCALEBITS          psraw mm1, SCALEBITS
269          psraw mm0, SCALEBITS          psraw mm0, SCALEBITS
   
270          packuswb mm0, mm1               ; g7g6g5g4g3g2g1g0 -> mm0          packuswb mm0, mm1               ; g7g6g5g4g3g2g1g0 -> mm0
   
271          movq [TEMP_G2], mm0          movq [TEMP_G2], mm0
   
272          movq mm0, mm4          movq mm0, mm4
273          punpckhwd mm4, mm4              ; u3u3u2u2 -> mm2          punpckhwd mm4, mm4              ; u3u3u2u2 -> mm2
274          punpcklwd mm0, mm0              ; u1u1u0u0 -> mm6          punpcklwd mm0, mm0              ; u1u1u0u0 -> mm6
   
275          movq mm1, mm3                   ; y7y6y5y4 -> mm1          movq mm1, mm3                   ; y7y6y5y4 -> mm1
276          paddsw mm3, mm4                 ; b7b6b5b4 -> mm3          paddsw mm3, mm4                 ; b7b6b5b4 -> mm3
   
277          movq mm7, mm2                   ; y3y2y1y0 -> mm7          movq mm7, mm2                   ; y3y2y1y0 -> mm7
   
278          paddsw mm2, mm0                 ; b3b2b1b0 -> mm2          paddsw mm2, mm0                 ; b3b2b1b0 -> mm2
   
279          psraw mm3, SCALEBITS          psraw mm3, SCALEBITS
280          psraw mm2, SCALEBITS          psraw mm2, SCALEBITS
   
281          packuswb mm2, mm3               ; b7b6b5b4b3b2b1b0 -> mm2          packuswb mm2, mm3               ; b7b6b5b4b3b2b1b0 -> mm2
   
282          movq [TEMP_B2], mm2          movq [TEMP_B2], mm2
   
283          movq mm3, [TEMP_Y2]          movq mm3, [TEMP_Y2]
284          movq mm2, [TEMP_Y1]          movq mm2, [TEMP_Y1]
   
285          movq mm6, mm3                   ; TEMP_Y2 -> mm6          movq mm6, mm3                   ; TEMP_Y2 -> mm6
286          paddsw mm3, mm4                 ; b7b6b5b4 -> mm3          paddsw mm3, mm4                 ; b7b6b5b4 -> mm3
   
287          movq mm4, mm2                   ; TEMP_Y1 -> mm4          movq mm4, mm2                   ; TEMP_Y1 -> mm4
288          paddsw mm2, mm0                 ; b3b2b1b0 -> mm2          paddsw mm2, mm0                 ; b3b2b1b0 -> mm2
   
289          psraw mm3, SCALEBITS          psraw mm3, SCALEBITS
290          psraw mm2, SCALEBITS          psraw mm2, SCALEBITS
   
291          packuswb mm2, mm3               ; b7b6b5b4b3b2b1b0 -> mm2          packuswb mm2, mm3               ; b7b6b5b4b3b2b1b0 -> mm2
   
292          movq [TEMP_B1], mm2          movq [TEMP_B1], mm2
   
293          movq mm0, mm5          movq mm0, mm5
294          punpckhwd mm5, mm5              ; v3v3v2v2 -> mm5          punpckhwd mm5, mm5              ; v3v3v2v2 -> mm5
295          punpcklwd mm0, mm0              ; v1v1v0v0 -> mm0          punpcklwd mm0, mm0              ; v1v1v0v0 -> mm0
   
296          paddsw mm1, mm5                 ; r7r6r5r4 -> mm1          paddsw mm1, mm5                 ; r7r6r5r4 -> mm1
297          paddsw mm7, mm0                 ; r3r2r1r0 -> mm7          paddsw mm7, mm0                 ; r3r2r1r0 -> mm7
   
298          psraw mm1, SCALEBITS          psraw mm1, SCALEBITS
299          psraw mm7, SCALEBITS          psraw mm7, SCALEBITS
   
300          packuswb mm7, mm1               ; r7r6r5r4r3r2r1r0 -> mm7 (TEMP_R2)          packuswb mm7, mm1               ; r7r6r5r4r3r2r1r0 -> mm7 (TEMP_R2)
   
301          paddsw mm6, mm5                 ; r7r6r5r4 -> mm6          paddsw mm6, mm5                 ; r7r6r5r4 -> mm6
302          paddsw mm4, mm0                 ; r3r2r1r0 -> mm4          paddsw mm4, mm0                 ; r3r2r1r0 -> mm4
   
303          psraw mm6, SCALEBITS          psraw mm6, SCALEBITS
304          psraw mm4, SCALEBITS          psraw mm4, SCALEBITS
   
305          packuswb mm4, mm6               ; r7r6r5r4r3r2r1r0 -> mm4 (TEMP_R1)          packuswb mm4, mm6               ; r7r6r5r4r3r2r1r0 -> mm4 (TEMP_R1)
   
306          movq mm0, [TEMP_B1]          movq mm0, [TEMP_B1]
307          movq mm1, [TEMP_G1]          movq mm1, [TEMP_G1]
   
308          movq mm6, mm7          movq mm6, mm7
   
309          movq mm2, mm0          movq mm2, mm0
310          punpcklbw mm2, mm4              ; r3b3r2b2r1b1r0b0 -> mm2          punpcklbw mm2, mm4              ; r3b3r2b2r1b1r0b0 -> mm2
311          punpckhbw mm0, mm4              ; r7b7r6b6r5b5r4b4 -> mm0          punpckhbw mm0, mm4              ; r7b7r6b6r5b5r4b4 -> mm0
   
312          pxor mm7, mm7          pxor mm7, mm7
   
313          movq mm3, mm1          movq mm3, mm1
314          punpcklbw mm1, mm7              ; 0g30g20g10g0 -> mm1          punpcklbw mm1, mm7              ; 0g30g20g10g0 -> mm1
315          punpckhbw mm3, mm7              ; 0g70g60g50g4 -> mm3          punpckhbw mm3, mm7              ; 0g70g60g50g4 -> mm3
   
316          movq mm4, mm2          movq mm4, mm2
317          punpcklbw mm2, mm1              ; 0r1g1b10r0g0b0 -> mm2          punpcklbw mm2, mm1              ; 0r1g1b10r0g0b0 -> mm2
318          punpckhbw mm4, mm1              ; 0r3g3b30r2g2b2 -> mm4          punpckhbw mm4, mm1              ; 0r3g3b30r2g2b2 -> mm4
   
319          movq mm5, mm0          movq mm5, mm0
320          punpcklbw mm0, mm3              ; 0r5g5b50r4g4b4 -> mm0          punpcklbw mm0, mm3              ; 0r5g5b50r4g4b4 -> mm0
321          punpckhbw mm5, mm3              ; 0r7g7b70r6g6b6 -> mm5          punpckhbw mm5, mm3              ; 0r7g7b70r6g6b6 -> mm5
   
322  %if %1 == 3             ; BGR (24-bit)  %if %1 == 3             ; BGR (24-bit)
323          movd [edi], mm2          movd [edi], mm2
324          psrlq mm2, 32          psrlq mm2, 32
   
325          movd [edi + 3], mm2          movd [edi + 3], mm2
326          movd [edi + 6], mm4          movd [edi + 6], mm4
   
327          psrlq mm4, 32          psrlq mm4, 32
   
328          movd [edi + 9], mm4          movd [edi + 9], mm4
329          movd [edi + 12], mm0          movd [edi + 12], mm0
   
330          psrlq mm0, 32          psrlq mm0, 32
   
331          movd [edi + 15], mm0          movd [edi + 15], mm0
332          movd [edi + 18], mm5    movq mm2, mm5
333      psrlq mm0, 8              ; 000000r5g5 -> mm0
334          psrlq mm5, 32    psllq mm2, 32             ; 0r6g6b60000 -> mm2
335      psrlq mm5, 32             ; 00000r7g7b7 -> mm5
336          movd [edi + 21], mm5    psrlq mm2, 16             ; 000r6g6b600 -> mm2
337      por mm0, mm2              ; 000r6g6b6r5g5 -> mm0
338      psllq mm5, 40             ; r7g7b700000 -> mm5
339      por mm5, mm0              ; r7g7b7r6g6b6r5g5 -> mm5
340      movq [edi + 16], mm5
341          movq mm0, [TEMP_B2]          movq mm0, [TEMP_B2]
342          movq mm1, [TEMP_G2]          movq mm1, [TEMP_G2]
   
343          movq mm2, mm0          movq mm2, mm0
344          punpcklbw mm2, mm6              ; r3b3r2b2r1b1r0b0 -> mm2          punpcklbw mm2, mm6              ; r3b3r2b2r1b1r0b0 -> mm2
345          punpckhbw mm0, mm6              ; r7b7r6b6r5b5r4b4 -> mm0          punpckhbw mm0, mm6              ; r7b7r6b6r5b5r4b4 -> mm0
   
346          movq mm3, mm1          movq mm3, mm1
347          punpcklbw mm1, mm7              ; 0g30g20g10g0 -> mm1          punpcklbw mm1, mm7              ; 0g30g20g10g0 -> mm1
348          punpckhbw mm3, mm7              ; 0g70g60g50g4 -> mm3          punpckhbw mm3, mm7              ; 0g70g60g50g4 -> mm3
   
349          movq mm4, mm2          movq mm4, mm2
350          punpcklbw mm2, mm1              ; 0r1g1b10r0g0b0 -> mm2          punpcklbw mm2, mm1              ; 0r1g1b10r0g0b0 -> mm2
351          punpckhbw mm4, mm1              ; 0r3g3b30r2g2b2 -> mm4          punpckhbw mm4, mm1              ; 0r3g3b30r2g2b2 -> mm4
   
352          movq mm5, mm0          movq mm5, mm0
353          punpcklbw mm0, mm3              ; 0r5g5b50r4g4b4 -> mm0          punpcklbw mm0, mm3              ; 0r5g5b50r4g4b4 -> mm0
354          punpckhbw mm5, mm3              ; 0r7g7b70r6g6b6 -> mm5          punpckhbw mm5, mm3              ; 0r7g7b70r6g6b6 -> mm5
   
355          movd [edi+edx], mm2          movd [edi+edx], mm2
356          psrlq mm2, 32          psrlq mm2, 32
   
357          movd [edi+edx + 3], mm2          movd [edi+edx + 3], mm2
358          movd [edi+edx + 6], mm4          movd [edi+edx + 6], mm4
   
359          psrlq mm4, 32          psrlq mm4, 32
   
360          movd [edi+edx + 9], mm4          movd [edi+edx + 9], mm4
361          movd [edi+edx + 12], mm0          movd [edi+edx + 12], mm0
   
362          psrlq mm0, 32          psrlq mm0, 32
   
363          movd [edi+edx + 15], mm0          movd [edi+edx + 15], mm0
364          movd [edi+edx + 18], mm5    movq mm2, mm5
365      psrlq mm0, 8              ; 000000r5g5 -> mm0
366          psrlq mm5, 32    psllq mm2, 32             ; 0r6g6b60000 -> mm2
367      psrlq mm5, 32             ; 00000r7g7b7 -> mm5
368          movd [edi+edx + 21], mm5    psrlq mm2, 16             ; 000r6g6b600 -> mm2
369      por mm0, mm2              ; 000r6g6b6r5g5 -> mm0
370      psllq mm5, 40             ; r7g7b700000 -> mm5
371      por mm5, mm0              ; r7g7b7r6g6b6r5g5 -> mm5
372      movq [edi + edx + 16], mm5
373    
374  %else           ; BGRA (32-bit)  %else           ; BGRA (32-bit)
375          movq [edi], mm2          movq [edi], mm2
376          movq [edi + 8], mm4          movq [edi + 8], mm4
377          movq [edi + 16], mm0          movq [edi + 16], mm0
378          movq [edi + 24], mm5          movq [edi + 24], mm5
   
379          movq mm0, [TEMP_B2]          movq mm0, [TEMP_B2]
380          movq mm1, [TEMP_G2]          movq mm1, [TEMP_G2]
   
381          movq mm2, mm0          movq mm2, mm0
382          punpcklbw mm2, mm6              ; r3b3r2b2r1b1r0b0 -> mm2          punpcklbw mm2, mm6              ; r3b3r2b2r1b1r0b0 -> mm2
383          punpckhbw mm0, mm6              ; r7b7r6b6r5b5r4b4 -> mm0          punpckhbw mm0, mm6              ; r7b7r6b6r5b5r4b4 -> mm0
   
384          movq mm3, mm1          movq mm3, mm1
385          punpcklbw mm1, mm7              ; 0g30g20g10g0 -> mm1          punpcklbw mm1, mm7              ; 0g30g20g10g0 -> mm1
386          punpckhbw mm3, mm7              ; 0g70g60g50g4 -> mm3          punpckhbw mm3, mm7              ; 0g70g60g50g4 -> mm3
   
387          movq mm4, mm2          movq mm4, mm2
388          punpcklbw mm2, mm1              ; 0r1g1b10r0g0b0 -> mm2          punpcklbw mm2, mm1              ; 0r1g1b10r0g0b0 -> mm2
389          punpckhbw mm4, mm1              ; 0r3g3b30r2g2b2 -> mm4          punpckhbw mm4, mm1              ; 0r3g3b30r2g2b2 -> mm4
   
390          movq mm5, mm0          movq mm5, mm0
391          punpcklbw mm0, mm3              ; 0r5g5b50r4g4b4 -> mm0          punpcklbw mm0, mm3              ; 0r5g5b50r4g4b4 -> mm0
392          punpckhbw mm5, mm3              ; 0r7g7b70r6g6b6 -> mm5          punpckhbw mm5, mm3              ; 0r7g7b70r6g6b6 -> mm5
   
393          movq [edi + edx], mm2          movq [edi + edx], mm2
394          movq [edi + edx + 8], mm4          movq [edi + edx + 8], mm4
395          movq [edi + edx + 16], mm0          movq [edi + edx + 16], mm0
# Line 468  Line 403 
403  %undef TEMP_B1  %undef TEMP_B1
404  %undef TEMP_B2  %undef TEMP_B2
405  %endmacro  %endmacro
 ;------------------------------------------------------------------------------  
406    
407    ;=============================================================================
408    ; Code
409    ;=============================================================================
410    
411    SECTION .text
412    
413    %include "colorspace_mmx.inc"
414    
415  ; input  ; input
   
416  MAKE_COLORSPACE  bgr_to_yv12_mmx,0,    3,2,2,  BGR_TO_YV12,  3, -1  MAKE_COLORSPACE  bgr_to_yv12_mmx,0,    3,2,2,  BGR_TO_YV12,  3, -1
417  MAKE_COLORSPACE  bgra_to_yv12_mmx,0,   4,2,2,  BGR_TO_YV12,  4, -1  MAKE_COLORSPACE  bgra_to_yv12_mmx,0,   4,2,2,  BGR_TO_YV12,  4, -1
418    
419  ; output  ; output
   
420  MAKE_COLORSPACE  yv12_to_bgr_mmx,48,   3,8,2,  YV12_TO_BGR,  3, -1  MAKE_COLORSPACE  yv12_to_bgr_mmx,48,   3,8,2,  YV12_TO_BGR,  3, -1
421  MAKE_COLORSPACE  yv12_to_bgra_mmx,48,  4,8,2,  YV12_TO_BGR,  4, -1  MAKE_COLORSPACE  yv12_to_bgra_mmx,48,  4,8,2,  YV12_TO_BGR,  4, -1
422    

Legend:
Removed from v.1381  
changed lines
  Added in v.1382

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4