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

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

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

revision 851, Sat Feb 15 15:22:19 2003 UTC revision 1706, Mon Jun 5 21:27:36 2006 UTC
# Line 1  Line 1 
1  ;/**************************************************************************  ;/****************************************************************************
2  ; *  ; *
3  ; *     XVID MPEG-4 VIDEO CODEC  ; *     XVID MPEG-4 VIDEO CODEC
4  ; *     colorspace  ; *  - MMX and XMM YUYV<->YV12 conversion -
5  ; *  ; *
6  ; *     This program is free software; you can redistribute it and/or modify  ; *  Copyright(C) 2002 Peter Ross <pross@xvid.org>
7  ; *     it under the terms of the GNU General Public License as published by  ; *
8    ; *  This program is free software; you can redistribute it and/or modify it
9    ; *  under the terms of the GNU General Public License as published by
10  ; *     the Free Software Foundation; either version 2 of the License, or  ; *     the Free Software Foundation; either version 2 of the License, or
11  ; *     (at your option) any later version.  ; *     (at your option) any later version.
12  ; *  ; *
# Line 15  Line 17 
17  ; *  ; *
18  ; *     You should have received a copy of the GNU General Public License  ; *     You should have received a copy of the GNU General Public License
19  ; *     along with this program; if not, write to the Free Software  ; *     along with this program; if not, write to the Free Software
20  ; *     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  ; *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 ; *  
 ; *************************************************************************/  
   
 ;/**************************************************************************  
21  ; *  ; *
22  ; *     History:  ; * $Id: colorspace_yuyv_mmx.asm,v 1.7 2006-06-05 21:27:36 Skal Exp $
23  ; *  ; *
24  ; *     10.10.2001      initial version; (c)2002 peter ross <pross@xvid.org>  ; ***************************************************************************/
 ; *  
 ; *************************************************************************/  
   
25    
26  bits 32  BITS 32
27    
28  %macro cglobal 1  %macro cglobal 1
29          %ifdef PREFIX          %ifdef PREFIX
30                    %ifdef MARK_FUNCS
31                            global _%1:function %1.endfunc-%1
32                            %define %1 _%1:function %1.endfunc-%1
33                    %else
34                  global _%1                  global _%1
35                  %define %1 _%1                  %define %1 _%1
36                    %endif
37            %else
38                    %ifdef MARK_FUNCS
39                            global %1:function %1.endfunc-%1
40          %else          %else
41                  global %1                  global %1
42          %endif          %endif
43            %endif
44  %endmacro  %endmacro
45    
46    ;=============================================================================
47    ; Read only data
48    ;=============================================================================
49    
50  section .data  %ifdef FORMAT_COFF
51  align 16  SECTION .rodata
52    %else
53    SECTION .rodata align=16
54    %endif
55    
56  ;===========================================================================  ;-----------------------------------------------------------------------------
57  ; yuyv/uyvy mask for extracting yuv components  ; yuyv/uyvy mask for extracting yuv components
58  ;===========================================================================  ;-----------------------------------------------------------------------------
59  ;                               y     u     y     v     y     u     y     v  ;                               y     u     y     v     y     u     y     v
 yuyv_mask       db      0xff, 0,    0xff, 0,    0xff, 0,    0xff, 0  
 mmx_one         dw      1,      1,      1,      1  
   
   
60    
61  section .text  ALIGN 16
62    yuyv_mask:      db 0xff,  0,  0xff,   0,   0xff,  0,   0xff,  0
63    mmx_one:    dw 1, 1, 1, 1
64    
65    ;=============================================================================
66    ; helper macros used with colorspace_mmx.inc
67    ;=============================================================================
68    
69  %include "colorspace_mmx.inc"  ;-----------------------------------------------------------------------------
   
   
 ;====================================================================  
70  ; YUYV_TO_YV12( TYPE, PAVG )  ; YUYV_TO_YV12( TYPE, PAVG )
71  ;  ;
72  ; TYPE  0=yuyv, 1=uyvy  ; TYPE  0=yuyv, 1=uyvy
73  ; PAVG  0=mmx, pavgusb=3dnow, pavgb=xmm  ; PAVG  0=mmx, pavgusb=3dnow, pavgb=xmm
74  ;  ;
75  ; bytes=2, pixels = 8, vpixels=2  ; bytes=2, pixels = 8, vpixels=2
76  ;====================================================================  ;-----------------------------------------------------------------------------
77    
78  %macro YUYV_TO_YV12_INIT                2  %macro YUYV_TO_YV12_INIT                2
79                  movq mm7, [yuyv_mask]                  movq mm7, [yuyv_mask]
80  %endmacro  %endmacro
# Line 160  Line 168 
168                  movd [ebx],mm5                  movd [ebx],mm5
169                  movd [ecx],mm4                  movd [ecx],mm4
170  %endmacro  %endmacro
 ;====================================================================  
   
171    
172  ;------------------------------------------------------------------------------  ;-----------------------------------------------------------------------------
173  ; YV12_TO_YUYV( TYPE )  ; YV12_TO_YUYV( TYPE )
174  ;  ;
175  ; TYPE  0=yuyv, 1=uyvy  ; bytes=2, pixels = 16, vpixels=2
176  ;  ;-----------------------------------------------------------------------------
177  ; bytes=2, pixels = 8, vpixels=2  
 ;------------------------------------------------------------------------------  
178  %macro YV12_TO_YUYV_INIT                2  %macro YV12_TO_YUYV_INIT                2
179  %endmacro  %endmacro
180    
181    
182  %macro YV12_TO_YUYV                             2  %macro YV12_TO_YUYV                             2
183                  movd mm4, [ebx]                         ; [    |uuuu]    movq mm6, [ebx]               ; [    |uuuu]
184                  movd mm5, [ecx]                         ; [    |vvvv]    movq mm2, [ecx]               ; [    |vvvv]
185                  movq mm0, [esi]                         ; [yyyy|yyyy] ; y row 0                  movq mm0, [esi]                         ; [yyyy|yyyy] ; y row 0
186                  movq mm1, [esi+eax]                     ; [yyyy|yyyy] ; y row 1                  movq mm1, [esi+eax]                     ; [yyyy|yyyy] ; y row 1
187                  punpcklbw mm4, mm5                      ; [vuvu|vuvu] ; uv row 0    movq      mm7, mm6
188      punpcklbw mm6, mm2            ; [vuvu|vuvu] ; uv[0..3]
189      punpckhbw mm7, mm2            ; [vuvu|vuvu] ; uv[4..7]
190    
191  %if %1 == 0             ; YUYV  %if %1 == 0             ; YUYV
192                  movq mm2, mm0                  movq mm2, mm0
193                  movq mm3, mm1                  movq mm3, mm1
194                  punpcklbw mm0, mm4                      ; [vyuy|vyuy] ; y row 0 + 0    movq mm4, [esi    +8]         ; [yyyy|yyyy] ; y[8..15] row 0
195                  punpckhbw mm2, mm4                      ; [vyuy|vyuy] ; y row 0 + 8    movq mm5, [esi+eax+8]         ; [yyyy|yyyy] ; y[8..15] row 1
196                  punpcklbw mm1, mm4                      ; [vyuy|vyuy] ; y row 1 + 0    punpcklbw mm0, mm6            ; [vyuy|vyuy] ; y row 0 + 0
197                  punpckhbw mm3, mm4                      ; [vyuy|vyuy] ; y row 1 + 8    punpckhbw mm2, mm6            ; [vyuy|vyuy] ; y row 0 + 8
198      punpcklbw mm1, mm6            ; [vyuy|vyuy] ; y row 1 + 0
199      punpckhbw mm3, mm6            ; [vyuy|vyuy] ; y row 1 + 8
200                  movq [edi], mm0                  movq [edi], mm0
201                  movq [edi+8], mm2                  movq [edi+8], mm2
202                  movq [edi+edx], mm1                  movq [edi+edx], mm1
203                  movq [edi+edx+8], mm3                  movq [edi+edx+8], mm3
204      movq mm0, mm4
205      movq mm2, mm5
206      punpcklbw mm0, mm7            ; [vyuy|vyuy] ; y row 0 + 16
207      punpckhbw mm4, mm7            ; [vyuy|vyuy] ; y row 0 + 24
208      punpcklbw mm2, mm7            ; [vyuy|vyuy] ; y row 1 + 16
209      punpckhbw mm5, mm7            ; [vyuy|vyuy] ; y row 1 + 24
210      movq [edi    +16], mm0
211      movq [edi    +24], mm4
212      movq [edi+edx+16], mm2
213      movq [edi+edx+24], mm5
214  %else                   ; UYVY  %else                   ; UYVY
215                  movq mm5, mm4    movq mm2, mm6
216                  movq mm6, mm4    movq mm3, mm6
217                  movq mm7, mm4    movq mm4, mm6
218                  punpcklbw mm4, mm0                      ; [yvyu|yvyu]   ; y row 0 + 0    punpcklbw mm2, mm0            ; [yvyu|yvyu]   ; y row 0 + 0
219                  punpckhbw mm5, mm0                      ; [yvyu|yvyu]   ; y row 0 + 8    punpckhbw mm3, mm0            ; [yvyu|yvyu]   ; y row 0 + 8
220                  punpcklbw mm6, mm1                      ; [yvyu|yvyu]   ; y row 1 + 0    movq mm0, [esi    +8]         ; [yyyy|yyyy] ; y[8..15] row 0
221                  punpckhbw mm7, mm1                      ; [yvyu|yvyu]   ; y row 1 + 8    movq mm5, [esi+eax+8]         ; [yyyy|yyyy] ; y[8..15] row 1
222                  movq [edi], mm4    punpcklbw mm4, mm1            ; [yvyu|yvyu]   ; y row 1 + 0
223                  movq [edi+8], mm5    punpckhbw mm6, mm1            ; [yvyu|yvyu]   ; y row 1 + 8
224                  movq [edi+edx], mm6    movq [edi      ], mm2
225                  movq [edi+edx+8], mm7    movq [edi    +8], mm3
226      movq [edi+edx  ], mm4
227      movq [edi+edx+8], mm6
228      movq mm2, mm7
229      movq mm3, mm7
230      movq mm6, mm7
231      punpcklbw mm2, mm0            ; [yvyu|yvyu]   ; y row 0 + 0
232      punpckhbw mm3, mm0            ; [yvyu|yvyu]   ; y row 0 + 8
233      punpcklbw mm6, mm5            ; [yvyu|yvyu]   ; y row 1 + 0
234      punpckhbw mm7, mm5            ; [yvyu|yvyu]   ; y row 1 + 8
235      movq [edi    +16], mm2
236      movq [edi    +24], mm3
237      movq [edi+edx+16], mm6
238      movq [edi+edx+24], mm7
239  %endif  %endif
240  %endmacro  %endmacro
 ;------------------------------------------------------------------------------  
   
241    
242  ;------------------------------------------------------------------------------  ;------------------------------------------------------------------------------
243  ; YV12_TO_YUYVI( TYPE )  ; YV12_TO_YUYVI( TYPE )
# Line 216  Line 246 
246  ;  ;
247  ; bytes=2, pixels = 8, vpixels=4  ; bytes=2, pixels = 8, vpixels=4
248  ;------------------------------------------------------------------------------  ;------------------------------------------------------------------------------
249    
250  %macro YV12_TO_YUYVI_INIT               2  %macro YV12_TO_YUYVI_INIT               2
251  %endmacro  %endmacro
252    
# Line 297  Line 328 
328                  pop esi                  pop esi
329  %endif  %endif
330  %endmacro  %endmacro
 ;------------------------------------------------------------------------------  
331    
332    ;=============================================================================
333    ; Code
334    ;=============================================================================
335    
336    SECTION .text
337    
338    %include "colorspace_mmx.inc"
339    
340  ; input  ; input
341    
# Line 312  Line 349 
349    
350  ; output  ; output
351    
352  MAKE_COLORSPACE  yv12_to_yuyv_mmx,0,    2,8,2,  YV12_TO_YUYV, 0, -1  MAKE_COLORSPACE  yv12_to_yuyv_mmx,0,    2,16,2,  YV12_TO_YUYV, 0, -1
353  MAKE_COLORSPACE  yv12_to_uyvy_mmx,0,    2,8,2,  YV12_TO_YUYV, 1, -1  MAKE_COLORSPACE  yv12_to_uyvy_mmx,0,    2,16,2,  YV12_TO_YUYV, 1, -1
354    
355  MAKE_COLORSPACE  yv12_to_yuyvi_mmx,0,   2,8,4,  YV12_TO_YUYVI, 0, -1  MAKE_COLORSPACE  yv12_to_yuyvi_mmx,0,   2,8,4,  YV12_TO_YUYVI, 0, -1
356  MAKE_COLORSPACE  yv12_to_uyvyi_mmx,0,   2,8,4,  YV12_TO_YUYVI, 1, -1  MAKE_COLORSPACE  yv12_to_uyvyi_mmx,0,   2,8,4,  YV12_TO_YUYVI, 1, -1

Legend:
Removed from v.851  
changed lines
  Added in v.1706

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