summaryrefslogtreecommitdiff
path: root/src/post/deinterlace/plugins/vfir.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/post/deinterlace/plugins/vfir.c')
-rw-r--r--src/post/deinterlace/plugins/vfir.c49
1 files changed, 28 insertions, 21 deletions
diff --git a/src/post/deinterlace/plugins/vfir.c b/src/post/deinterlace/plugins/vfir.c
index f60bbecd8..c57960f05 100644
--- a/src/post/deinterlace/plugins/vfir.c
+++ b/src/post/deinterlace/plugins/vfir.c
@@ -22,7 +22,11 @@
*/
#include <stdio.h>
-#include <stdint.h>
+#if defined (__SVR4) && defined (__sun)
+# include <sys/int_types.h>
+#else
+# include <stdint.h>
+#endif
#ifdef HAVE_CONFIG_H
# include "config.h"
@@ -44,26 +48,7 @@ static void deinterlace_line( uint8_t *dst, uint8_t *lum_m4,
uint8_t *lum_m3, uint8_t *lum_m2,
uint8_t *lum_m1, uint8_t *lum, int size )
{
- /**
- * C implementation.
- int sum;
-
- for(;size > 0;size--) {
- sum = -lum_m4[0];
- sum += lum_m3[0] << 2;
- sum += lum_m2[0] << 1;
- sum += lum_m1[0] << 2;
- sum += -lum[0];
- dst[0] = (sum + 4) >> 3; // This needs to be clipped at 0 and 255: cm[(sum + 4) >> 3];
- lum_m4++;
- lum_m3++;
- lum_m2++;
- lum_m1++;
- lum++;
- dst++;
- }
- */
-
+#ifdef ARCH_X86
mmx_t rounder;
rounder.uw[0]=4;
@@ -102,6 +87,24 @@ static void deinterlace_line( uint8_t *dst, uint8_t *lum_m4,
dst+=4;
}
emms();
+#else
+ int sum;
+
+ for(;size > 0;size--) {
+ sum = -lum_m4[0];
+ sum += lum_m3[0] << 2;
+ sum += lum_m2[0] << 1;
+ sum += lum_m1[0] << 2;
+ sum += -lum[0];
+ dst[0] = (sum + 4) >> 3; // This needs to be clipped at 0 and 255: cm[(sum + 4) >> 3];
+ lum_m4++;
+ lum_m3++;
+ lum_m2++;
+ lum_m1++;
+ lum++;
+ dst++;
+ }
+#endif
}
@@ -140,7 +143,11 @@ static deinterlace_method_t vfirmethod =
"ffmpeg: Vertical Blend",
"Vertical",
1,
+#ifdef ARCH_X86
MM_ACCEL_X86_MMXEXT,
+#else
+ 0,
+#endif
0,
0,
0,