neon filters: support optional color space conversion
authornotaz <notasas@gmail.com>
Fri, 2 Nov 2012 00:59:44 +0000 (02:59 +0200)
committernotaz <notasas@gmail.com>
Fri, 2 Nov 2012 00:59:44 +0000 (02:59 +0200)
arm/neon_eagle2x.Sinc
arm/neon_normalxx.Sinc
arm/neon_scale2x.Sinc

index cfbd303..ec2ba0d 100644 (file)
         vld1.16 {d27[3]}, [\reg1]       @ S3prev[7] = src[2 * (counter & 7) - 2 + srcstride]\r
     .endif\r
 \r
+    #ifdef DO_BGR_TO_RGB\r
+        bgr1555_to_rgb565 q14, q15, q8, q9, q10\r
+        bgr1555_to_rgb565 q6, q7, q8, q9, q10\r
+    #endif\r
+\r
         ubfx \reg1, \counter, #0, #3    @ reg1 = counter & 7\r
 \r
         lsl \reg1, #2\r
         vbsl q6, \qY, q12               @ E3 = < (X == Y && X == V) ? Y : C >\r
 \r
         vbsl q7, \qY, q12               @ E4 = < (Z == Y && Z == W) ? Y : C >\r
+\r
+    #ifdef DO_BGR_TO_RGB\r
+        bgr1555_to_rgb565 q14, q15, q0, q1, q2\r
+        bgr1555_to_rgb565 q6, q7, q0, q1, q2\r
+    #endif\r
+\r
         vst2.16 {q14-q15}, [\aldst1]!   @ [dst] = E1,E2; dst1 += 2*2*8\r
 \r
         cmp \counter, #8\r
         vbsl q6, \qY, q12               @ E3 = < (X == Y && X == V) ? Y : C >\r
 \r
         vbsl q7, \qY, q12               @ E4 = < (Z == Y && Z == W) ? Y : C >\r
+\r
+    #ifdef DO_BGR_TO_RGB\r
+        bgr1555_to_rgb565 q14, q15, q8, q9, q10\r
+        bgr1555_to_rgb565 q6, q7, q8, q9, q10\r
+    #endif\r
+\r
         vst2.16 {q14-q15}, [\aldst1]!   @ [dst] = E1,E2; dst1 += 2*2*8\r
 \r
         vst2.16 {q6-q7}, [\aldst2]!     @ [dst + dststride] = E3,E4; dst2 += 2*2*8\r
index 0391e12..0546ac2 100644 (file)
 #define A256 :256\r
 #endif\r
 \r
+.macro bgr1555_to_rgb565 dr0 dr1 t0 t1 t2\r
+        str r0, [sp, #-4]\r
+        mov r0, #0x07c0\r
+        vshl.u16 \t0, \dr0, #11\r
+        vshl.u16 \t1, \dr1, #11\r
+        vshl.u16 \dr0, \dr0, #1\r
+        vshl.u16 \dr1, \dr1, #1\r
+        vdup.16 \t2, r0\r
+        vsri.u16 \t0, \dr0, #11\r
+        vsri.u16 \t1, \dr1, #11\r
+        ldr r0, [sp, #-4]\r
+        vbif \dr0, \t0, \t2\r
+        vbif \dr1, \t1, \t2\r
+.endm\r
 \r
 .macro _neon_normalxx_8_16_line_middle src, dst, pal, counter, reg1, reg2, reg3, reg4, reg5, reg6, reg7, reg8, reg9, dststride, dA, dB\r
         ldr \reg1, [\src]                   @ reg1 = src[0-3]\r
index a3379ca..774f7ff 100644 (file)
         vorn q3, q10, q3                @ tmp3 = < C0 || !(H == F) >\r
 \r
         vbsl q2, q12, q14               @ E2 = < (C0 || !(D == H)) ? E : D >\r
-        vst2.16 {q0-q1}, [\dst1]        @ [dst] = E0,E1\r
 \r
         vbsl q3, q12, q15               @ E3 = < (C0 || !(H == F)) ? E : F >\r
 \r
+    #ifdef DO_BGR_TO_RGB\r
+        bgr1555_to_rgb565 q0, q1, q12, q14, q15\r
+        bgr1555_to_rgb565 q2, q3, q12, q14, q15\r
+    #endif\r
+\r
+        vst2.16 {q0-q1}, [\dst1]        @ [dst] = E0,E1\r
+\r
         bic \counter, \counter, #7\r
     .ifeqs "\qB", "q11"\r
         add \src1, \src1, \reg1, lsl #1\r
         vorn q3, q10, q3                @ tmp3 = < C0 || !(H == F) >\r
 \r
         vbsl q2, q12, q14               @ E2 = < (C0 || !(D == H)) ? E : D >\r
+\r
+        vbsl q3, q12, q15               @ E3 = < (C0 || !(H == F)) ? E : F >\r
+\r
+    #ifdef DO_BGR_TO_RGB\r
+        bgr1555_to_rgb565 q0, q1, q12, q14, q15\r
+        bgr1555_to_rgb565 q2, q3, q12, q14, q15\r
+    #endif\r
+\r
         vst2.16 {q0-q1}, [\aldst1]!     @ [dst] = E0,E1; dst1 += 2*2*8\r
 \r
         cmp \counter, #8\r
 \r
-        vbsl q3, q12, q15               @ E3 = < (C0 || !(H == F)) ? E : F >\r
-\r
         vst2.16 {q2-q3}, [\aldst2]!     @ [dst + dststride] = E2,E3; dst2 += 2*2*8\r
 \r
         bhi 2b\r
         vorn q3, q10, q3                @ tmp3 = < C0 || !(H == F) >\r
 \r
         vbsl q2, q12, q14               @ E2 = < (C0 || !(D == H)) ? E : D >\r
-        vst2.16 {q0-q1}, [\aldst1]!     @ [dst] = E0,E1; dst1 += 2*2*8\r
 \r
         vbsl q3, q12, q15               @ E3 = < (C0 || !(H == F)) ? E : F >\r
 \r
+    #ifdef DO_BGR_TO_RGB\r
+        bgr1555_to_rgb565 q0, q1, q12, q14, q15\r
+        bgr1555_to_rgb565 q2, q3, q12, q14, q15\r
+    #endif\r
+\r
+        vst2.16 {q0-q1}, [\aldst1]!     @ [dst] = E0,E1; dst1 += 2*2*8\r
+\r
         vst2.16 {q2-q3}, [\aldst2]!     @ [dst + dststride] = E2,E3; dst2 += 2*2*8\r
 \r
 .endm\r