Kaynağa Gözat

Se ve que no puedo hacer que un define dependa de otro...

Fabian 11 yıl önce
ebeveyn
işleme
1b8fbf6b25
1 değiştirilmiş dosya ile 2 ekleme ve 4 silme
  1. 2 4
      filtros/diff_asm.asm

+ 2 - 4
filtros/diff_asm.asm

@@ -14,7 +14,7 @@ global diff_asm
 ; Algunos defines ultiles
 %define PIXEL_SIZE  4
 %define SHIFT_VALUE 8                   ; Potencia de 2 para hacer el calculo del promedio en enteros.
-%define DIV_VALUE   (2^SHIFT_VALUE)/3   ; Multiplico por el valor sobre 3 para hacer un shift de 8bits a la derecha. (DIV * P)>>8
+%define DIV_VALUE   85                  ; Multiplico por el valor sobre 3 para hacer un shift de 8bits a la derecha. (DIV * P)>>8
                                         ; TODO: El valor SHIFT_VALUE NO PUEDE ser mayor a 8 o pierdo información en la multiplicacion
                                         ; Para ser mayor tengo que multiplicar y tener en cuenta la parte alta (pmulhw)
                                         ; Se que el valor máximo que va a haber que multiplicar es es (255*3), por eso puedo
@@ -62,7 +62,6 @@ diff_asm:
     movdqu xmm1, xmm0           ; Copio xmm0 a xmm1
     punpckhbw xmm0, xmm2        ; Desempaqueto la parte alta => xmm0 = |B(P1)|G(P1)|R(P1)|A(P1)|B(P2)|G(P2)|R(P2)|A(P2)|
     punpcklbw xmm1, xmm2        ; Desempaqueto la parte baja => xmm1 = |B(P3)|G(P3)|R(P3)|A(P3)|B(P4)|G(P4)|R(P4)|A(P4)|
-
                                 ; Sumo horizontalmente los pixeles:
     phaddw xmm0, xmm1           ; xmm0 = |B(P1)+G(P1)|R(P1)+A(P1)|B(P2)+G(P2)|R(P2)+A(P2)|....|
     phaddw xmm0, xmm2           ; xmm0 = |B+G+R+A (P1)| B+G+R+A(P2) | B+G+R+A(P3) | B+G+R+A(P4)| 0x0 | 0x0 | 0x0 | 0x0 |
@@ -70,9 +69,8 @@ diff_asm:
 .dividir:
     pmullw xmm0, xmm3           ; Multiplico y almaceno parte baja, no llego a usar la parte alta si SHIFT_VALUE < 8
     psrlw xmm0, SHIFT_VALUE     ; Divido por el valor
-
+.shuffle:
     packuswb xmm0, xmm2         ; xmm0 = |P1|P2|P3|P4|0x0|0x0|0x0|0x0|0x0|....|
-
     movdqu xmm2, [SHUFFLE_MASK] ; Cargo la mascara para shuffle
     pshufb xmm0, xmm2           ; Le hago un shuffle a xmm0 con los nuevos valores calculados
 .write: