[svn] / branches / dev-api-4 / xvidcore / src / image / x86_asm / colorspace_rgb_mmx.asm Repository:
ViewVC logotype

Diff of /branches/dev-api-4/xvidcore/src/image/x86_asm/colorspace_rgb_mmx.asm

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

revision 1068, Thu Jun 12 14:17:22 2003 UTC revision 1192, Tue Oct 28 22:23:03 2003 UTC
# Line 22  Line 22 
22  ; *  ; *
23  ; ****************************************************************************/  ; ****************************************************************************/
24    
25  bits 32  BITS 32
26    
27  %macro cglobal 1  %macro cglobal 1
28          %ifdef PREFIX          %ifdef PREFIX
# Line 33  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 55  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    %define SCALEBITS 6
61    
62    ;=============================================================================
63    ; Read only data
64    ;=============================================================================
65    
66    SECTION .rodata
67    ALIGN 16
68    
69    ;-----------------------------------------------------------------------------
70  ; RGB->YV12 multiplication matrices  ; RGB->YV12 multiplication matrices
71  ;===========================================================================  ;-----------------------------------------------------------------------------
72  ;                               FIX(Y_B)        FIX(Y_G)        FIX(Y_R)  ;         FIX(Y_B)      FIX(Y_G)        FIX(Y_R) Ignored
 y_mul   dw               25,             129,            66,                    0  
 u_mul   dw               112,           -74,            -38,                    0  
 v_mul   dw              -18,            -94,             112,                   0  
73    
74    y_mul: dw    25,      129,        66,      0
75    u_mul: dw   112,      -74,       -38,      0
76    v_mul: dw   -18,      -94,       112,      0
77    
 ;===========================================================================  
 ; YV12->RGB data  
 ;===========================================================================  
 %define SCALEBITS 6  
 Y_SUB           dw  16,  16,  16,  16  
 U_SUB           dw 128, 128, 128, 128  
 V_SUB           dw 128, 128, 128, 128  
78    
79  Y_MUL           dw  74,  74,  74,  74  ;-----------------------------------------------------------------------------
80    ; YV12->RGB data
81    ;-----------------------------------------------------------------------------
82    
83  UG_MUL          dw  25,  25,  25,  25  Y_SUB: dw  16,  16,  16,  16
84  VG_MUL          dw  52,  52,  52,  52  U_SUB: dw 128, 128, 128, 128
85    V_SUB: dw 128, 128, 128, 128
86    
87  UB_MUL          dw 129, 129, 129, 129  Y_MUL: dw  74,  74,  74,  74
 VR_MUL          dw 102, 102, 102, 102  
88    
89  BRIGHT          db      128, 128, 128, 128, 128, 128, 128, 128  UG_MUL: dw  25,  25,  25,  25
90    VG_MUL: dw  52,  52,  52,  52
91    
92  section .text  UB_MUL: dw 129, 129, 129, 129
93    VR_MUL: dw 102, 102, 102, 102
94    
95  %include "colorspace_mmx.inc"  BRIGHT: db 128, 128, 128, 128, 128, 128, 128, 128
96    
97    ;=============================================================================
98    ; Helper macros used with the colorspace_mmx.inc file
99    ;=============================================================================
100    
101  ;------------------------------------------------------------------------------  ;------------------------------------------------------------------------------
102  ; BGR_TO_YV12( BYTES )  ; BGR_TO_YV12( BYTES )
# Line 94  Line 105 
105  ;  ;
106  ; bytes=3/4, pixels = 2, vpixels=2  ; bytes=3/4, pixels = 2, vpixels=2
107  ;------------------------------------------------------------------------------  ;------------------------------------------------------------------------------
108    
109  %macro BGR_TO_YV12_INIT         2  %macro BGR_TO_YV12_INIT         2
110                  movq mm7, [y_mul]                  movq mm7, [y_mul]
111  %endmacro  %endmacro
# Line 158  Line 170 
170                  mov [esi + eax + 1], dl                 ; y_ptr[y_stride + 1]                  mov [esi + eax + 1], dl                 ; y_ptr[y_stride + 1]
171    
172                  ; u_ptr, v_ptr                  ; u_ptr, v_ptr
   
173                  movq mm0, mm6                   ; = [  |b4|g4|r4]                  movq mm0, mm6                   ; = [  |b4|g4|r4]
174                  pmaddwd mm6, [v_mul]            ; *= V_MUL                  pmaddwd mm6, [v_mul]            ; *= V_MUL
175                  pmaddwd mm0, [u_mul]            ; *= U_MUL                  pmaddwd mm0, [u_mul]            ; *= U_MUL
# Line 181  Line 192 
192    
193                  pop edx                  pop edx
194  %endmacro  %endmacro
 ;------------------------------------------------------------------------------  
   
   
   
   
195    
196  ;------------------------------------------------------------------------------  ;------------------------------------------------------------------------------
197  ; YV12_TO_BGR( BYTES )  ; YV12_TO_BGR( BYTES )
# Line 194  Line 200 
200  ;  ;
201  ; bytes=3/4, pixels = 8, vpixels=2  ; bytes=3/4, pixels = 8, vpixels=2
202  ;------------------------------------------------------------------------------  ;------------------------------------------------------------------------------
203    
204  %macro YV12_TO_BGR_INIT         2  %macro YV12_TO_BGR_INIT         2
205                  pxor mm7, mm7                   ; clear mm7                  pxor mm7, mm7                   ; clear mm7
206  %endmacro  %endmacro
# Line 208  Line 215 
215    
216          movd mm2, [ebx]         ; u_ptr[0]          movd mm2, [ebx]         ; u_ptr[0]
217          movd mm3, [ecx]         ; v_ptr[0]          movd mm3, [ecx]         ; v_ptr[0]
   
218          punpcklbw mm2, mm7              ; u3u2u1u0 -> mm2          punpcklbw mm2, mm7              ; u3u2u1u0 -> mm2
219          punpcklbw mm3, mm7              ; v3v2v1v0 -> mm3          punpcklbw mm3, mm7              ; v3v2v1v0 -> mm3
   
220          psubsw mm2, [U_SUB]             ; U - 128          psubsw mm2, [U_SUB]             ; U - 128
221          psubsw mm3, [V_SUB]             ; V - 128          psubsw mm3, [V_SUB]             ; V - 128
   
222          movq mm4, mm2          movq mm4, mm2
223          movq mm5, mm3          movq mm5, mm3
   
224          pmullw mm2, [UG_MUL]          pmullw mm2, [UG_MUL]
225          pmullw mm3, [VG_MUL]          pmullw mm3, [VG_MUL]
   
226          movq mm6, mm2                   ; u3u2u1u0 -> mm6          movq mm6, mm2                   ; u3u2u1u0 -> mm6
227          punpckhwd mm2, mm2              ; u3u3u2u2 -> mm2          punpckhwd mm2, mm2              ; u3u3u2u2 -> mm2
228          punpcklwd mm6, mm6              ; u1u1u0u0 -> mm6          punpcklwd mm6, mm6              ; u1u1u0u0 -> mm6
   
229          pmullw mm4, [UB_MUL]            ; B_ADD -> mm4          pmullw mm4, [UB_MUL]            ; B_ADD -> mm4
   
230          movq mm0, mm3          movq mm0, mm3
231          punpckhwd mm3, mm3              ; v3v3v2v2 -> mm2          punpckhwd mm3, mm3              ; v3v3v2v2 -> mm2
232          punpcklwd mm0, mm0              ; v1v1v0v0 -> mm6          punpcklwd mm0, mm0              ; v1v1v0v0 -> mm6
   
233          paddsw mm2, mm3          paddsw mm2, mm3
234          paddsw mm6, mm0          paddsw mm6, mm0
   
235          pmullw mm5, [VR_MUL]            ; R_ADD -> mm5          pmullw mm5, [VR_MUL]            ; R_ADD -> mm5
   
236          movq mm0, [esi]                 ; y7y6y5y4y3y2y1y0 -> mm0          movq mm0, [esi]                 ; y7y6y5y4y3y2y1y0 -> mm0
   
237          movq mm1, mm0          movq mm1, mm0
238          punpckhbw mm1, mm7              ; y7y6y5y4 -> mm1          punpckhbw mm1, mm7              ; y7y6y5y4 -> mm1
239          punpcklbw mm0, mm7              ; y3y2y1y0 -> mm0          punpcklbw mm0, mm7              ; y3y2y1y0 -> mm0
   
240          psubsw mm0, [Y_SUB]             ; Y - Y_SUB          psubsw mm0, [Y_SUB]             ; Y - Y_SUB
241          psubsw mm1, [Y_SUB]             ; Y - Y_SUB          psubsw mm1, [Y_SUB]             ; Y - Y_SUB
   
242          pmullw mm1, [Y_MUL]          pmullw mm1, [Y_MUL]
243          pmullw mm0, [Y_MUL]          pmullw mm0, [Y_MUL]
   
244          movq [TEMP_Y2], mm1             ; y7y6y5y4 -> mm3          movq [TEMP_Y2], mm1             ; y7y6y5y4 -> mm3
245          movq [TEMP_Y1], mm0             ; y3y2y1y0 -> mm7          movq [TEMP_Y1], mm0             ; y3y2y1y0 -> mm7
   
246          psubsw mm1, mm2                 ; g7g6g5g4 -> mm1          psubsw mm1, mm2                 ; g7g6g5g4 -> mm1
247          psubsw mm0, mm6                 ; g3g2g1g0 -> mm0          psubsw mm0, mm6                 ; g3g2g1g0 -> mm0
   
248          psraw mm1, SCALEBITS          psraw mm1, SCALEBITS
249          psraw mm0, SCALEBITS          psraw mm0, SCALEBITS
   
250          packuswb mm0, mm1               ;g7g6g5g4g3g2g1g0 -> mm0          packuswb mm0, mm1               ;g7g6g5g4g3g2g1g0 -> mm0
   
251          movq [TEMP_G1], mm0          movq [TEMP_G1], mm0
   
252          movq mm0, [esi+eax]                     ; y7y6y5y4y3y2y1y0 -> mm0          movq mm0, [esi+eax]                     ; y7y6y5y4y3y2y1y0 -> mm0
   
253          movq mm1, mm0          movq mm1, mm0
   
254          punpckhbw mm1, mm7              ; y7y6y5y4 -> mm1          punpckhbw mm1, mm7              ; y7y6y5y4 -> mm1
255          punpcklbw mm0, mm7              ; y3y2y1y0 -> mm0          punpcklbw mm0, mm7              ; y3y2y1y0 -> mm0
   
256          psubsw mm0, [Y_SUB]             ; Y - Y_SUB          psubsw mm0, [Y_SUB]             ; Y - Y_SUB
257          psubsw mm1, [Y_SUB]             ; Y - Y_SUB          psubsw mm1, [Y_SUB]             ; Y - Y_SUB
   
258          pmullw mm1, [Y_MUL]          pmullw mm1, [Y_MUL]
259          pmullw mm0, [Y_MUL]          pmullw mm0, [Y_MUL]
   
260          movq mm3, mm1          movq mm3, mm1
261          psubsw mm1, mm2                 ; g7g6g5g4 -> mm1          psubsw mm1, mm2                 ; g7g6g5g4 -> mm1
   
262          movq mm2, mm0          movq mm2, mm0
263          psubsw mm0, mm6                 ; g3g2g1g0 -> mm0          psubsw mm0, mm6                 ; g3g2g1g0 -> mm0
   
264          psraw mm1, SCALEBITS          psraw mm1, SCALEBITS
265          psraw mm0, SCALEBITS          psraw mm0, SCALEBITS
   
266          packuswb mm0, mm1               ; g7g6g5g4g3g2g1g0 -> mm0          packuswb mm0, mm1               ; g7g6g5g4g3g2g1g0 -> mm0
   
267          movq [TEMP_G2], mm0          movq [TEMP_G2], mm0
   
268          movq mm0, mm4          movq mm0, mm4
269          punpckhwd mm4, mm4              ; u3u3u2u2 -> mm2          punpckhwd mm4, mm4              ; u3u3u2u2 -> mm2
270          punpcklwd mm0, mm0              ; u1u1u0u0 -> mm6          punpcklwd mm0, mm0              ; u1u1u0u0 -> mm6
   
271          movq mm1, mm3                   ; y7y6y5y4 -> mm1          movq mm1, mm3                   ; y7y6y5y4 -> mm1
272          paddsw mm3, mm4                 ; b7b6b5b4 -> mm3          paddsw mm3, mm4                 ; b7b6b5b4 -> mm3
   
273          movq mm7, mm2                   ; y3y2y1y0 -> mm7          movq mm7, mm2                   ; y3y2y1y0 -> mm7
   
274          paddsw mm2, mm0                 ; b3b2b1b0 -> mm2          paddsw mm2, mm0                 ; b3b2b1b0 -> mm2
   
275          psraw mm3, SCALEBITS          psraw mm3, SCALEBITS
276          psraw mm2, SCALEBITS          psraw mm2, SCALEBITS
   
277          packuswb mm2, mm3               ; b7b6b5b4b3b2b1b0 -> mm2          packuswb mm2, mm3               ; b7b6b5b4b3b2b1b0 -> mm2
   
278          movq [TEMP_B2], mm2          movq [TEMP_B2], mm2
   
279          movq mm3, [TEMP_Y2]          movq mm3, [TEMP_Y2]
280          movq mm2, [TEMP_Y1]          movq mm2, [TEMP_Y1]
   
281          movq mm6, mm3                   ; TEMP_Y2 -> mm6          movq mm6, mm3                   ; TEMP_Y2 -> mm6
282          paddsw mm3, mm4                 ; b7b6b5b4 -> mm3          paddsw mm3, mm4                 ; b7b6b5b4 -> mm3
   
283          movq mm4, mm2                   ; TEMP_Y1 -> mm4          movq mm4, mm2                   ; TEMP_Y1 -> mm4
284          paddsw mm2, mm0                 ; b3b2b1b0 -> mm2          paddsw mm2, mm0                 ; b3b2b1b0 -> mm2
   
285          psraw mm3, SCALEBITS          psraw mm3, SCALEBITS
286          psraw mm2, SCALEBITS          psraw mm2, SCALEBITS
   
287          packuswb mm2, mm3               ; b7b6b5b4b3b2b1b0 -> mm2          packuswb mm2, mm3               ; b7b6b5b4b3b2b1b0 -> mm2
   
288          movq [TEMP_B1], mm2          movq [TEMP_B1], mm2
   
289          movq mm0, mm5          movq mm0, mm5
290          punpckhwd mm5, mm5              ; v3v3v2v2 -> mm5          punpckhwd mm5, mm5              ; v3v3v2v2 -> mm5
291          punpcklwd mm0, mm0              ; v1v1v0v0 -> mm0          punpcklwd mm0, mm0              ; v1v1v0v0 -> mm0
   
292          paddsw mm1, mm5                 ; r7r6r5r4 -> mm1          paddsw mm1, mm5                 ; r7r6r5r4 -> mm1
293          paddsw mm7, mm0                 ; r3r2r1r0 -> mm7          paddsw mm7, mm0                 ; r3r2r1r0 -> mm7
   
294          psraw mm1, SCALEBITS          psraw mm1, SCALEBITS
295          psraw mm7, SCALEBITS          psraw mm7, SCALEBITS
   
296          packuswb mm7, mm1               ; r7r6r5r4r3r2r1r0 -> mm7 (TEMP_R2)          packuswb mm7, mm1               ; r7r6r5r4r3r2r1r0 -> mm7 (TEMP_R2)
   
297          paddsw mm6, mm5                 ; r7r6r5r4 -> mm6          paddsw mm6, mm5                 ; r7r6r5r4 -> mm6
298          paddsw mm4, mm0                 ; r3r2r1r0 -> mm4          paddsw mm4, mm0                 ; r3r2r1r0 -> mm4
   
299          psraw mm6, SCALEBITS          psraw mm6, SCALEBITS
300          psraw mm4, SCALEBITS          psraw mm4, SCALEBITS
   
301          packuswb mm4, mm6               ; r7r6r5r4r3r2r1r0 -> mm4 (TEMP_R1)          packuswb mm4, mm6               ; r7r6r5r4r3r2r1r0 -> mm4 (TEMP_R1)
   
302          movq mm0, [TEMP_B1]          movq mm0, [TEMP_B1]
303          movq mm1, [TEMP_G1]          movq mm1, [TEMP_G1]
   
304          movq mm6, mm7          movq mm6, mm7
   
305          movq mm2, mm0          movq mm2, mm0
306          punpcklbw mm2, mm4              ; r3b3r2b2r1b1r0b0 -> mm2          punpcklbw mm2, mm4              ; r3b3r2b2r1b1r0b0 -> mm2
307          punpckhbw mm0, mm4              ; r7b7r6b6r5b5r4b4 -> mm0          punpckhbw mm0, mm4              ; r7b7r6b6r5b5r4b4 -> mm0
   
308          pxor mm7, mm7          pxor mm7, mm7
   
309          movq mm3, mm1          movq mm3, mm1
310          punpcklbw mm1, mm7              ; 0g30g20g10g0 -> mm1          punpcklbw mm1, mm7              ; 0g30g20g10g0 -> mm1
311          punpckhbw mm3, mm7              ; 0g70g60g50g4 -> mm3          punpckhbw mm3, mm7              ; 0g70g60g50g4 -> mm3
   
312          movq mm4, mm2          movq mm4, mm2
313          punpcklbw mm2, mm1              ; 0r1g1b10r0g0b0 -> mm2          punpcklbw mm2, mm1              ; 0r1g1b10r0g0b0 -> mm2
314          punpckhbw mm4, mm1              ; 0r3g3b30r2g2b2 -> mm4          punpckhbw mm4, mm1              ; 0r3g3b30r2g2b2 -> mm4
   
315          movq mm5, mm0          movq mm5, mm0
316          punpcklbw mm0, mm3              ; 0r5g5b50r4g4b4 -> mm0          punpcklbw mm0, mm3              ; 0r5g5b50r4g4b4 -> mm0
317          punpckhbw mm5, mm3              ; 0r7g7b70r6g6b6 -> mm5          punpckhbw mm5, mm3              ; 0r7g7b70r6g6b6 -> mm5
   
318  %if %1 == 3             ; BGR (24-bit)  %if %1 == 3             ; BGR (24-bit)
319          movd [edi], mm2          movd [edi], mm2
320          psrlq mm2, 32          psrlq mm2, 32
   
321          movd [edi + 3], mm2          movd [edi + 3], mm2
322          movd [edi + 6], mm4          movd [edi + 6], mm4
   
323          psrlq mm4, 32          psrlq mm4, 32
   
324          movd [edi + 9], mm4          movd [edi + 9], mm4
325          movd [edi + 12], mm0          movd [edi + 12], mm0
   
326          psrlq mm0, 32          psrlq mm0, 32
   
327          movd [edi + 15], mm0          movd [edi + 15], mm0
328          movq mm2, mm5          movq mm2, mm5
   
329          psrlq mm0, 8                    ; 000000r5g5 -> mm0          psrlq mm0, 8                    ; 000000r5g5 -> mm0
330          psllq mm2, 32                   ; 0r6g6b60000 -> mm2          psllq mm2, 32                   ; 0r6g6b60000 -> mm2
   
331          psrlq mm5, 32                   ; 00000r7g7b7 -> mm5          psrlq mm5, 32                   ; 00000r7g7b7 -> mm5
332          psrlq mm2, 16                   ; 000r6g6b600 -> mm2          psrlq mm2, 16                   ; 000r6g6b600 -> mm2
   
333          por mm0, mm2                    ; 000r6g6b6r5g5 -> mm0          por mm0, mm2                    ; 000r6g6b6r5g5 -> mm0
334          psllq mm5, 40                   ; r7g7b700000 -> mm5          psllq mm5, 40                   ; r7g7b700000 -> mm5
   
335          por mm5, mm0                    ; r7g7b7r6g6b6r5g5 -> mm5          por mm5, mm0                    ; r7g7b7r6g6b6r5g5 -> mm5
336          movq [edi + 16], mm5          movq [edi + 16], mm5
   
337          movq mm0, [TEMP_B2]          movq mm0, [TEMP_B2]
338          movq mm1, [TEMP_G2]          movq mm1, [TEMP_G2]
   
339          movq mm2, mm0          movq mm2, mm0
340          punpcklbw mm2, mm6              ; r3b3r2b2r1b1r0b0 -> mm2          punpcklbw mm2, mm6              ; r3b3r2b2r1b1r0b0 -> mm2
341          punpckhbw mm0, mm6              ; r7b7r6b6r5b5r4b4 -> mm0          punpckhbw mm0, mm6              ; r7b7r6b6r5b5r4b4 -> mm0
   
342          movq mm3, mm1          movq mm3, mm1
343          punpcklbw mm1, mm7              ; 0g30g20g10g0 -> mm1          punpcklbw mm1, mm7              ; 0g30g20g10g0 -> mm1
344          punpckhbw mm3, mm7              ; 0g70g60g50g4 -> mm3          punpckhbw mm3, mm7              ; 0g70g60g50g4 -> mm3
   
345          movq mm4, mm2          movq mm4, mm2
346          punpcklbw mm2, mm1              ; 0r1g1b10r0g0b0 -> mm2          punpcklbw mm2, mm1              ; 0r1g1b10r0g0b0 -> mm2
347          punpckhbw mm4, mm1              ; 0r3g3b30r2g2b2 -> mm4          punpckhbw mm4, mm1              ; 0r3g3b30r2g2b2 -> mm4
   
348          movq mm5, mm0          movq mm5, mm0
349          punpcklbw mm0, mm3              ; 0r5g5b50r4g4b4 -> mm0          punpcklbw mm0, mm3              ; 0r5g5b50r4g4b4 -> mm0
350          punpckhbw mm5, mm3              ; 0r7g7b70r6g6b6 -> mm5          punpckhbw mm5, mm3              ; 0r7g7b70r6g6b6 -> mm5
   
351          movd [edi+edx], mm2          movd [edi+edx], mm2
352          psrlq mm2, 32          psrlq mm2, 32
   
353          movd [edi+edx + 3], mm2          movd [edi+edx + 3], mm2
354          movd [edi+edx + 6], mm4          movd [edi+edx + 6], mm4
   
355          psrlq mm4, 32          psrlq mm4, 32
   
356          movd [edi+edx + 9], mm4          movd [edi+edx + 9], mm4
357          movd [edi+edx + 12], mm0          movd [edi+edx + 12], mm0
   
358          psrlq mm0, 32          psrlq mm0, 32
   
359          movd [edi+edx + 15], mm0          movd [edi+edx + 15], mm0
360          movq mm2, mm5          movq mm2, mm5
   
361          psrlq mm0, 8                    ; 000000r5g5 -> mm0          psrlq mm0, 8                    ; 000000r5g5 -> mm0
362          psllq mm2, 32                   ; 0r6g6b60000 -> mm2          psllq mm2, 32                   ; 0r6g6b60000 -> mm2
   
363          psrlq mm5, 32                   ; 00000r7g7b7 -> mm5          psrlq mm5, 32                   ; 00000r7g7b7 -> mm5
364          psrlq mm2, 16                   ; 000r6g6b600 -> mm2          psrlq mm2, 16                   ; 000r6g6b600 -> mm2
   
365          por mm0, mm2                    ; 000r6g6b6r5g5 -> mm0          por mm0, mm2                    ; 000r6g6b6r5g5 -> mm0
366          psllq mm5, 40                   ; r7g7b700000 -> mm5          psllq mm5, 40                   ; r7g7b700000 -> mm5
   
367          por mm5, mm0                    ; r7g7b7r6g6b6r5g5 -> mm5          por mm5, mm0                    ; r7g7b7r6g6b6r5g5 -> mm5
368          movq [edi + edx + 16], mm5          movq [edi + edx + 16], mm5
369    
# Line 445  Line 372 
372          movq [edi + 8], mm4          movq [edi + 8], mm4
373          movq [edi + 16], mm0          movq [edi + 16], mm0
374          movq [edi + 24], mm5          movq [edi + 24], mm5
   
375          movq mm0, [TEMP_B2]          movq mm0, [TEMP_B2]
376          movq mm1, [TEMP_G2]          movq mm1, [TEMP_G2]
   
377          movq mm2, mm0          movq mm2, mm0
378          punpcklbw mm2, mm6              ; r3b3r2b2r1b1r0b0 -> mm2          punpcklbw mm2, mm6              ; r3b3r2b2r1b1r0b0 -> mm2
379          punpckhbw mm0, mm6              ; r7b7r6b6r5b5r4b4 -> mm0          punpckhbw mm0, mm6              ; r7b7r6b6r5b5r4b4 -> mm0
   
380          movq mm3, mm1          movq mm3, mm1
381          punpcklbw mm1, mm7              ; 0g30g20g10g0 -> mm1          punpcklbw mm1, mm7              ; 0g30g20g10g0 -> mm1
382          punpckhbw mm3, mm7              ; 0g70g60g50g4 -> mm3          punpckhbw mm3, mm7              ; 0g70g60g50g4 -> mm3
   
383          movq mm4, mm2          movq mm4, mm2
384          punpcklbw mm2, mm1              ; 0r1g1b10r0g0b0 -> mm2          punpcklbw mm2, mm1              ; 0r1g1b10r0g0b0 -> mm2
385          punpckhbw mm4, mm1              ; 0r3g3b30r2g2b2 -> mm4          punpckhbw mm4, mm1              ; 0r3g3b30r2g2b2 -> mm4
   
386          movq mm5, mm0          movq mm5, mm0
387          punpcklbw mm0, mm3              ; 0r5g5b50r4g4b4 -> mm0          punpcklbw mm0, mm3              ; 0r5g5b50r4g4b4 -> mm0
388          punpckhbw mm5, mm3              ; 0r7g7b70r6g6b6 -> mm5          punpckhbw mm5, mm3              ; 0r7g7b70r6g6b6 -> mm5
   
389          movq [edi + edx], mm2          movq [edi + edx], mm2
390          movq [edi + edx + 8], mm4          movq [edi + edx + 8], mm4
391          movq [edi + edx + 16], mm0          movq [edi + edx + 16], mm0
# Line 478  Line 399 
399  %undef TEMP_B1  %undef TEMP_B1
400  %undef TEMP_B2  %undef TEMP_B2
401  %endmacro  %endmacro
 ;------------------------------------------------------------------------------  
402    
403    ;=============================================================================
404    ; Code
405    ;=============================================================================
406    
407    SECTION .text
408    
409    %include "colorspace_mmx.inc"
410    
411  ; input  ; input
   
412  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
413  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
414    
415  ; output  ; output
   
416  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
417  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
418    

Legend:
Removed from v.1068  
changed lines
  Added in v.1192

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