소스 검색

Descripción del código en C del blur.

Fabian 11 년 전
부모
커밋
f9066382a7

+ 0 - 1
filtros/blur_c.c

@@ -23,7 +23,6 @@ float* convulcion_matrix(float sigma, int r) {
 	// Recorro cada pixel
 	for (int y = -r; y <= r; y++) {
 		for (int x = -r; x <= r; x++) {
-			// Por cada pixel obtengo la sub-matriz de convulsion para cada componente
 			conv_matrix[contador] = (1 / (2*M_PI*sigma*sigma)) * exp(- (pow(x,2)+pow(y,2))/(2*sigma*sigma));
 			#if DEBUG
 				printf("%.8f\t", conv_matrix[contador]);

+ 0 - 15
informe/include/blur1_1.asm

@@ -1,15 +0,0 @@
-.pixel:
-	movdqu xmm0, [rbx] ;guardo 4 pixeles, uno no me sirve
-	pslldq xmm0, 4 ;destruyo al pixel que no me sirve
-	movdqa xmm1, xmm0 ;copio
-	pxor xmm4, xmm4
-	punpcklbw xmm0, xmm4 ; xmm0 =  00000000 | 0r0g0b0a
-	punpckhbw xmm1, xmm4 ; xmm1 =  0r0g0b0a | 0r0g0b0a
-	paddw xmm2, xmm0
-	paddw xmm2, xmm1
-	;tengo que sumar horizontalmente, o dividir en high y low y sumar eso
-	add rbx, r9 ;me voy una fila para adelante
-	dec r8
-	cmp r8, 0
-	jne .pixel
-

+ 0 - 14
informe/include/blur1_2.asm

@@ -1,14 +0,0 @@
-.finFila:
-	dec rsi ;reduzco cuantas filas me faltan
-	cmp rsi, 0
-	je .finArchivo
-	;copio [fila][ancho-1] y [fila+1][0]
-	movdqu xmm0, [rdx] ;guardo 4 pixeles, solo voy a usar la parte baja
-	movd dword [rax], xmm0
-	psrldq xmm0, 4 ;shift derecha 1 pix
-	movd dword [rax+4], xmm0
-	add rdx, 8 ;me voy de [fila][ancho-1] a [fila+1][1]
-	add rax, 8 ;me voy de [fila][ancho-1] a [fila+1][1]
-	mov rcx, rdi ;reinicio cuantas columnas me faltan
-	jmp .fila
-

+ 0 - 12
informe/include/blur2_1.asm

@@ -1,12 +0,0 @@
-.columna:
-	lea r9, [rbx + r11]				; r9 = Puntero a la imagen + fila Actual
-	add r9, r10						; r9 = Punt. Imagen + Fila Actual + Columna Actual
-	sub r9, r13						; Resto una fila
-	movdqu xmm0, [r9 - PIXEL_SIZE]	; Leo tambien el dato anterior: xmm0 = |Up0|Up1|Up2|Up3|
-	movdqu xmm2, [r9 + PIXEL_SIZE]	; xmm2 = |Up2|Up3|Up4|Up5|
-	add r9, r13						; Sumo una fila (voy a la actual)
-	movdqu xmm3, [r9 - PIXEL_SIZE]	; xmm3 = |p0|p1|p2|p3|
-	movdqu xmm5, [r9 + PIXEL_SIZE]	; xmm5 = |p2|p3|p4|p5|
-	add r9, r13						; Sumo una fila (sig)
-	movdqu xmm6, [r9 - PIXEL_SIZE]	; xmm6 = |Dp0|Dp1|Dp2|Dp3|
-	movdqu xmm8, [r9 + PIXEL_SIZE]	; xmm8 = |Dp2|Dp3|Dp4|Dp5|

+ 0 - 4
informe/include/blur2_2.asm

@@ -1,4 +0,0 @@
-	movdqa xmm1, xmm0			; Copia
-	punpcklbw xmm0, xmm15		; xmm0 = |Up0|Up1|
-	punpckhbw xmm1, xmm15		; xmm1 = |Up2|Up3|
-	punpckhbw xmm2, xmm15		; xmm2 = |Up4|Up5|

+ 0 - 19
informe/include/blur2_3.asm

@@ -1,19 +0,0 @@
-	; Genero los nuevos registros para la suma
-	movdqa xmm9, xmm3
-	psrldq xmm9, 8				; xmm9 = |SUM(p1)|0x0|
-	movdqa xmm10, xmm4
-	pslldq xmm10, 8				; xmm10 = |0x0|SUM(p2)|
-	paddusw xmm9, xmm10			; xmm9 = |SUM(p1)|SUM(p2)|
-	
-	movdqa xmm10, xmm4
-	psrldq xmm10, 8				; xmm10 = |SUM(p3)|0x0|
-	movdqa xmm11, xmm5
-	pslldq xmm11, 8				; xmm11 = |0x0|SUM(p4)|
-	paddusw xmm10, xmm11		; xmm10 = |SUM(p3)|SUM(p4)|
-	
-	; Sumo los pixeles de una misma fila
-	paddusw xmm3, xmm4			; xmm3 = |SUM(p0)+SUM(p2)|SUM(p1)+SUM(p3)|
-	paddusw xmm3, xmm9			; xmm3 = |SUM(p0)+SUM(p2)+SUM(p1)|SUM(p1)+SUM(p3)+SUM(p2)|
-	paddusw xmm5, xmm4			; xmm4 = |SUM(p4)+SUM(p2)|SUM(p5)+SUM(p3)|
-	paddusw xmm5, xmm10			; xmm4 = |SUM(p4)+SUM(p2)+SUM(p3)|SUM(p5)+SUM(p3)+SUM(p4)|
-	

+ 0 - 16
informe/include/blur2_4.asm

@@ -1,16 +0,0 @@
-	lea rsi, [r12 + r15 * PIXEL_SIZE]	; Origen: Primera fila no se procesa
-	lea rdi, [rbx + r15 * PIXEL_SIZE]	; Destino: Primera fila no se procesa
-.ciclo:
-	mov rcx, rdx				; Cargo el ancho -2 pixeles
-	add rdi, PIXEL_SIZE			; Origen: Tengo que saltear el primer pixel
-	add rsi, PIXEL_SIZE			; Destino: Tengo que saltear el primer pixel
-	cld							; Flag de direccion (forward)
-	rep movsd					; Repetime movsd
-	inc rax 					; Ya procese una fila, aumento 
-	add rdi, PIXEL_SIZE			; Salto ultimo pixel
-	add rsi, PIXEL_SIZE
-	cmp rax, r14
-	jle .ciclo					; Mientras sea menor vuelvo al ciclo 
-
-mov rdi, r12					; Cargo parametro r12
-call free						; Libero la memoria

+ 1 - 0
informe/include/blur_asm.asm

@@ -0,0 +1 @@
+../../filtros/blur_asm.asm

+ 1 - 0
informe/include/blur_c.c

@@ -0,0 +1 @@
+../../filtros/blur_c.c

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 18 - 32
informe/subBlur.tex