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

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

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

revision 1.2.2.1, Thu Jun 12 14:17:22 2003 UTC revision 1.2.2.3, Mon Nov 3 15:51:50 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    %ifdef FORMAT_COFF
67    SECTION .rodata data
68    %else
69    SECTION .rodata data align=16
70    %endif
71    ALIGN 16
72    
73    ;-----------------------------------------------------------------------------
74  ; RGB->YV12 multiplication matrices  ; RGB->YV12 multiplication matrices
75  ;===========================================================================  ;-----------------------------------------------------------------------------
76  ;                               FIX(Y_B)        FIX(Y_G)        FIX(Y_R)  ;         FIX(Y_B)      FIX(Y_G)        FIX(Y_R) Ignored
77  y_mul   dw               25,             129,            66,                    0  
78  u_mul   dw               112,           -74,            -38,                    0  y_mul: dw    25,      129,        66,      0
79  v_mul   dw              -18,            -94,             112,                   0  u_mul: dw   112,      -74,       -38,      0
80    v_mul: dw   -18,      -94,       112,      0
81    
82    
83  ;===========================================================================  ;-----------------------------------------------------------------------------
84  ; YV12->RGB data  ; YV12->RGB data
85  ;===========================================================================  ;-----------------------------------------------------------------------------
 %define SCALEBITS 6  
 Y_SUB           dw  16,  16,  16,  16  
 U_SUB           dw 128, 128, 128, 128  
 V_SUB           dw 128, 128, 128, 128  
86    
87  Y_MUL           dw  74,  74,  74,  74  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  UG_MUL          dw  25,  25,  25,  25  Y_MUL: dw  74,  74,  74,  74
 VG_MUL          dw  52,  52,  52,  52  
92    
93  UB_MUL          dw 129, 129, 129, 129  UG_MUL: dw  25,  25,  25,  25
94  VR_MUL          dw 102, 102, 102, 102  VG_MUL: dw  52,  52,  52,  52
95    
96  BRIGHT          db      128, 128, 128, 128, 128, 128, 128, 128  UB_MUL: dw 129, 129, 129, 129
97    VR_MUL: dw 102, 102, 102, 102
98    
99  section .text  BRIGHT: db 128, 128, 128, 128, 128, 128, 128, 128
   
 %include "colorspace_mmx.inc"  
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 94  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 158  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 181  Line 196 
196    
197                  pop edx                  pop edx
198  %endmacro  %endmacro
 ;------------------------------------------------------------------------------  
   
   
   
   
199    
200  ;------------------------------------------------------------------------------  ;------------------------------------------------------------------------------
201  ; YV12_TO_BGR( BYTES )  ; YV12_TO_BGR( BYTES )
# Line 194  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
# Line 208  Line 219 
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          movq mm2, mm5          movq mm2, mm5
   
333          psrlq mm0, 8                    ; 000000r5g5 -> mm0          psrlq mm0, 8                    ; 000000r5g5 -> mm0
334          psllq mm2, 32                   ; 0r6g6b60000 -> mm2          psllq mm2, 32                   ; 0r6g6b60000 -> mm2
   
335          psrlq mm5, 32                   ; 00000r7g7b7 -> mm5          psrlq mm5, 32                   ; 00000r7g7b7 -> mm5
336          psrlq mm2, 16                   ; 000r6g6b600 -> mm2          psrlq mm2, 16                   ; 000r6g6b600 -> mm2
   
337          por mm0, mm2                    ; 000r6g6b6r5g5 -> mm0          por mm0, mm2                    ; 000r6g6b6r5g5 -> mm0
338          psllq mm5, 40                   ; r7g7b700000 -> mm5          psllq mm5, 40                   ; r7g7b700000 -> mm5
   
339          por mm5, mm0                    ; r7g7b7r6g6b6r5g5 -> mm5          por mm5, mm0                    ; r7g7b7r6g6b6r5g5 -> mm5
340          movq [edi + 16], mm5          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          movq mm2, mm5          movq mm2, mm5
   
365          psrlq mm0, 8                    ; 000000r5g5 -> mm0          psrlq mm0, 8                    ; 000000r5g5 -> mm0
366          psllq mm2, 32                   ; 0r6g6b60000 -> mm2          psllq mm2, 32                   ; 0r6g6b60000 -> mm2
   
367          psrlq mm5, 32                   ; 00000r7g7b7 -> mm5          psrlq mm5, 32                   ; 00000r7g7b7 -> mm5
368          psrlq mm2, 16                   ; 000r6g6b600 -> mm2          psrlq mm2, 16                   ; 000r6g6b600 -> mm2
   
369          por mm0, mm2                    ; 000r6g6b6r5g5 -> mm0          por mm0, mm2                    ; 000r6g6b6r5g5 -> mm0
370          psllq mm5, 40                   ; r7g7b700000 -> mm5          psllq mm5, 40                   ; r7g7b700000 -> mm5
   
371          por mm5, mm0                    ; r7g7b7r6g6b6r5g5 -> mm5          por mm5, mm0                    ; r7g7b7r6g6b6r5g5 -> mm5
372          movq [edi + edx + 16], mm5          movq [edi + edx + 16], mm5
373    
# Line 445  Line 376 
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 478  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.1.2.2.1  
changed lines
  Added in v.1.2.2.3

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