[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 1519, Sat Jul 24 11:46:08 2004 UTC revision 1793, Tue Nov 11 20:46:24 2008 UTC
# Line 26  Line 26 
26    
27  %macro cglobal 1  %macro cglobal 1
28          %ifdef PREFIX          %ifdef PREFIX
29                    %ifdef MARK_FUNCS
30                            global _%1:function %1.endfunc-%1
31                            %define %1 _%1:function %1.endfunc-%1
32                            %define ENDFUNC .endfunc
33                    %else
34                  global _%1                  global _%1
35                  %define %1 _%1                  %define %1 _%1
36                            %define ENDFUNC
37                    %endif
38            %else
39                    %ifdef MARK_FUNCS
40                            global %1:function %1.endfunc-%1
41                            %define ENDFUNC .endfunc
42          %else          %else
43                  global %1                  global %1
44                            %define ENDFUNC
45                    %endif
46          %endif          %endif
47  %endmacro  %endmacro
48    
# Line 75  Line 88 
88  ;-----------------------------------------------------------------------------  ;-----------------------------------------------------------------------------
89  ;         FIX(Y_B)      FIX(Y_G)        FIX(Y_R) Ignored  ;         FIX(Y_B)      FIX(Y_G)        FIX(Y_R) Ignored
90    
91  y_mul: dw    25,      129,        66,      0  bgr_y_mul: dw    25,      129,        66,      0
92  u_mul: dw   112,      -74,       -38,      0  bgr_u_mul: dw   112,      -74,       -38,      0
93  v_mul: dw   -18,      -94,       112,      0  bgr_v_mul: dw   -18,      -94,       112,      0
94    
95    ;-----------------------------------------------------------------------------
96    ; BGR->YV12 multiplication matrices
97    ;-----------------------------------------------------------------------------
98    ;         FIX(Y_R)      FIX(Y_G)        FIX(Y_B) Ignored
99    
100    rgb_y_mul: dw    66,      129,        25,      0
101    rgb_u_mul: dw   -38,      -74,       112,      0
102    rgb_v_mul: dw   112,      -94,       -18,      0
103    
104  ;-----------------------------------------------------------------------------  ;-----------------------------------------------------------------------------
105  ; YV12->RGB data  ; YV12->RGB data
# Line 111  Line 132 
132  ;------------------------------------------------------------------------------  ;------------------------------------------------------------------------------
133    
134  %macro BGR_TO_YV12_INIT         2  %macro BGR_TO_YV12_INIT         2
135    movq mm7, [y_mul]    movq mm7, [bgr_y_mul]
136  %endmacro  %endmacro
137    
138    
# Line 175  Line 196 
196    
197    ; u_ptr, v_ptr    ; u_ptr, v_ptr
198    movq mm0, mm6                 ; = [  |b4|g4|r4]    movq mm0, mm6                 ; = [  |b4|g4|r4]
199    pmaddwd mm6, [v_mul]          ; *= V_MUL    pmaddwd mm6, [bgr_v_mul]          ; *= V_MUL
200    pmaddwd mm0, [u_mul]          ; *= U_MUL    pmaddwd mm0, [bgr_u_mul]          ; *= U_MUL
201      movq mm1, mm0
202      movq mm2, mm6
203      psrlq mm1, 32
204      psrlq mm2, 32
205      paddd mm0, mm1
206      paddd mm2, mm6
207    
208      movd edx, mm0
209      shr edx, 10
210      add edx, U_ADD
211      mov [ebx], dl
212    
213      movd edx, mm2
214      shr edx, 10
215      add edx, V_ADD
216      mov [ecx], dl
217    
218      pop edx
219    %endmacro
220    
221    ;------------------------------------------------------------------------------
222    ; RGB_TO_YV12( BYTES )
223    ;
224    ; BYTES         3=rgb(24bit), 4=rgba(32-bit)
225    ;
226    ; bytes=3/4, pixels = 2, vpixels=2
227    ;------------------------------------------------------------------------------
228    
229    %macro RGB_TO_YV12_INIT         2
230      movq mm7, [rgb_y_mul]
231    %endmacro
232    
233    
234    %macro RGB_TO_YV12                      2
235        ; y_out
236      pxor mm4, mm4
237      pxor mm5, mm5
238      movd mm0, [edi]               ; x_ptr[0...]
239      movd mm2, [edi+edx]           ; x_ptr[x_stride...]
240      punpcklbw mm0, mm4            ; [  |b |g |r ]
241      punpcklbw mm2, mm5            ; [  |b |g |r ]
242      movq mm6, mm0                 ; = [  |b4|g4|r4]
243      paddw mm6, mm2                ; +[  |b4|g4|r4]
244      pmaddwd mm0, mm7              ; *= Y_MUL
245      pmaddwd mm2, mm7              ; *= Y_MUL
246      movq mm4, mm0                 ; [r]
247      movq mm5, mm2                 ; [r]
248      psrlq mm4, 32                 ; +[g]
249      psrlq mm5, 32                 ; +[g]
250      paddd mm0, mm4                ; +[b]
251      paddd mm2, mm5                ; +[b]
252    
253      pxor mm4, mm4
254      pxor mm5, mm5
255      movd mm1, [edi+%1]            ; src[%1...]
256      movd mm3, [edi+edx+%1]        ; src[x_stride+%1...]
257      punpcklbw mm1, mm4            ; [  |b |g |r ]
258      punpcklbw mm3, mm5            ; [  |b |g |r ]
259      paddw mm6, mm1                ; +[  |b4|g4|r4]
260      paddw mm6, mm3                ; +[  |b4|g4|r4]
261      pmaddwd mm1, mm7              ; *= Y_MUL
262      pmaddwd mm3, mm7              ; *= Y_MUL
263      movq mm4, mm1                 ; [r]
264      movq mm5, mm3                 ; [r]
265      psrlq mm4, 32                 ; +[g]
266      psrlq mm5, 32                 ; +[g]
267      paddd mm1, mm4                ; +[b]
268      paddd mm3, mm5                ; +[b]
269    
270      push edx
271    
272      movd edx, mm0
273      shr edx, 8
274      add edx, Y_ADD
275      mov [esi], dl                 ; y_ptr[0]
276    
277      movd edx, mm1
278      shr edx, 8
279      add edx, Y_ADD
280      mov [esi + 1], dl             ; y_ptr[1]
281    
282      movd edx, mm2
283      shr edx, 8
284      add edx, Y_ADD
285      mov [esi + eax + 0], dl       ; y_ptr[y_stride + 0]
286    
287      movd edx, mm3
288      shr edx, 8
289      add edx, Y_ADD
290      mov [esi + eax + 1], dl       ; y_ptr[y_stride + 1]
291    
292      ; u_ptr, v_ptr
293      movq mm0, mm6                 ; = [  |b4|g4|r4]
294      pmaddwd mm6, [rgb_v_mul]          ; *= V_MUL
295      pmaddwd mm0, [rgb_u_mul]          ; *= U_MUL
296    movq mm1, mm0    movq mm1, mm0
297    movq mm2, mm6    movq mm2, mm6
298    psrlq mm1, 32    psrlq mm1, 32
# Line 415  Line 531 
531  ; input  ; input
532  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
533  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
534    MAKE_COLORSPACE  rgb_to_yv12_mmx,0,    3,2,2,  RGB_TO_YV12,  3, -1
535    MAKE_COLORSPACE  rgba_to_yv12_mmx,0,   4,2,2,  RGB_TO_YV12,  4, -1
536    
537  ; output  ; output
538  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
539  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
540    
541    
542    %ifidn __OUTPUT_FORMAT__,elf
543    section ".note.GNU-stack" noalloc noexec nowrite progbits
544    %endif
545    

Legend:
Removed from v.1519  
changed lines
  Added in v.1793

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