[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 1540, Sun Aug 29 10:02:38 2004 UTC revision 1763, Sun Nov 12 01:40:36 2006 UTC
# Line 84  Line 84 
84  ;-----------------------------------------------------------------------------  ;-----------------------------------------------------------------------------
85  ;         FIX(Y_B)      FIX(Y_G)        FIX(Y_R) Ignored  ;         FIX(Y_B)      FIX(Y_G)        FIX(Y_R) Ignored
86    
87  y_mul: dw    25,      129,        66,      0  bgr_y_mul: dw    25,      129,        66,      0
88  u_mul: dw   112,      -74,       -38,      0  bgr_u_mul: dw   112,      -74,       -38,      0
89  v_mul: dw   -18,      -94,       112,      0  bgr_v_mul: dw   -18,      -94,       112,      0
90    
91    ;-----------------------------------------------------------------------------
92    ; BGR->YV12 multiplication matrices
93    ;-----------------------------------------------------------------------------
94    ;         FIX(Y_R)      FIX(Y_G)        FIX(Y_B) Ignored
95    
96    rgb_y_mul: dw    66,      129,        25,      0
97    rgb_u_mul: dw   -38,      -74,       112,      0
98    rgb_v_mul: dw   112,      -94,       -18,      0
99    
100  ;-----------------------------------------------------------------------------  ;-----------------------------------------------------------------------------
101  ; YV12->RGB data  ; YV12->RGB data
# Line 120  Line 128 
128  ;------------------------------------------------------------------------------  ;------------------------------------------------------------------------------
129    
130  %macro BGR_TO_YV12_INIT         2  %macro BGR_TO_YV12_INIT         2
131    movq mm7, [y_mul]    movq mm7, [bgr_y_mul]
132  %endmacro  %endmacro
133    
134    
# Line 184  Line 192 
192    
193    ; u_ptr, v_ptr    ; u_ptr, v_ptr
194    movq mm0, mm6                 ; = [  |b4|g4|r4]    movq mm0, mm6                 ; = [  |b4|g4|r4]
195    pmaddwd mm6, [v_mul]          ; *= V_MUL    pmaddwd mm6, [bgr_v_mul]          ; *= V_MUL
196    pmaddwd mm0, [u_mul]          ; *= U_MUL    pmaddwd mm0, [bgr_u_mul]          ; *= U_MUL
197      movq mm1, mm0
198      movq mm2, mm6
199      psrlq mm1, 32
200      psrlq mm2, 32
201      paddd mm0, mm1
202      paddd mm2, mm6
203    
204      movd edx, mm0
205      shr edx, 10
206      add edx, U_ADD
207      mov [ebx], dl
208    
209      movd edx, mm2
210      shr edx, 10
211      add edx, V_ADD
212      mov [ecx], dl
213    
214      pop edx
215    %endmacro
216    
217    ;------------------------------------------------------------------------------
218    ; RGB_TO_YV12( BYTES )
219    ;
220    ; BYTES         3=rgb(24bit), 4=rgba(32-bit)
221    ;
222    ; bytes=3/4, pixels = 2, vpixels=2
223    ;------------------------------------------------------------------------------
224    
225    %macro RGB_TO_YV12_INIT         2
226      movq mm7, [rgb_y_mul]
227    %endmacro
228    
229    
230    %macro RGB_TO_YV12                      2
231        ; y_out
232      pxor mm4, mm4
233      pxor mm5, mm5
234      movd mm0, [edi]               ; x_ptr[0...]
235      movd mm2, [edi+edx]           ; x_ptr[x_stride...]
236      punpcklbw mm0, mm4            ; [  |b |g |r ]
237      punpcklbw mm2, mm5            ; [  |b |g |r ]
238      movq mm6, mm0                 ; = [  |b4|g4|r4]
239      paddw mm6, mm2                ; +[  |b4|g4|r4]
240      pmaddwd mm0, mm7              ; *= Y_MUL
241      pmaddwd mm2, mm7              ; *= Y_MUL
242      movq mm4, mm0                 ; [r]
243      movq mm5, mm2                 ; [r]
244      psrlq mm4, 32                 ; +[g]
245      psrlq mm5, 32                 ; +[g]
246      paddd mm0, mm4                ; +[b]
247      paddd mm2, mm5                ; +[b]
248    
249      pxor mm4, mm4
250      pxor mm5, mm5
251      movd mm1, [edi+%1]            ; src[%1...]
252      movd mm3, [edi+edx+%1]        ; src[x_stride+%1...]
253      punpcklbw mm1, mm4            ; [  |b |g |r ]
254      punpcklbw mm3, mm5            ; [  |b |g |r ]
255      paddw mm6, mm1                ; +[  |b4|g4|r4]
256      paddw mm6, mm3                ; +[  |b4|g4|r4]
257      pmaddwd mm1, mm7              ; *= Y_MUL
258      pmaddwd mm3, mm7              ; *= Y_MUL
259      movq mm4, mm1                 ; [r]
260      movq mm5, mm3                 ; [r]
261      psrlq mm4, 32                 ; +[g]
262      psrlq mm5, 32                 ; +[g]
263      paddd mm1, mm4                ; +[b]
264      paddd mm3, mm5                ; +[b]
265    
266      push edx
267    
268      movd edx, mm0
269      shr edx, 8
270      add edx, Y_ADD
271      mov [esi], dl                 ; y_ptr[0]
272    
273      movd edx, mm1
274      shr edx, 8
275      add edx, Y_ADD
276      mov [esi + 1], dl             ; y_ptr[1]
277    
278      movd edx, mm2
279      shr edx, 8
280      add edx, Y_ADD
281      mov [esi + eax + 0], dl       ; y_ptr[y_stride + 0]
282    
283      movd edx, mm3
284      shr edx, 8
285      add edx, Y_ADD
286      mov [esi + eax + 1], dl       ; y_ptr[y_stride + 1]
287    
288      ; u_ptr, v_ptr
289      movq mm0, mm6                 ; = [  |b4|g4|r4]
290      pmaddwd mm6, [rgb_v_mul]          ; *= V_MUL
291      pmaddwd mm0, [rgb_u_mul]          ; *= U_MUL
292    movq mm1, mm0    movq mm1, mm0
293    movq mm2, mm6    movq mm2, mm6
294    psrlq mm1, 32    psrlq mm1, 32
# Line 424  Line 527 
527  ; input  ; input
528  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
529  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
530    MAKE_COLORSPACE  rgb_to_yv12_mmx,0,    3,2,2,  RGB_TO_YV12,  3, -1
531    MAKE_COLORSPACE  rgba_to_yv12_mmx,0,   4,2,2,  RGB_TO_YV12,  4, -1
532    
533  ; output  ; output
534  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

Legend:
Removed from v.1540  
changed lines
  Added in v.1763

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