annotate libmpcodecs/vf_tfields.c @ 12080:1abbfe730adc

Revert my old twos fix, it seems to break more files than it fixed. If your file sound wrong, please uncomment and test
author rtognimp
date Sun, 28 Mar 2004 22:03:37 +0000
parents 379f48cace77
children 821f464b4d90
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9514
08264c647f46 new filter
rfelker
parents:
diff changeset
1 #include <stdio.h>
08264c647f46 new filter
rfelker
parents:
diff changeset
2 #include <stdlib.h>
08264c647f46 new filter
rfelker
parents:
diff changeset
3 #include <string.h>
08264c647f46 new filter
rfelker
parents:
diff changeset
4
08264c647f46 new filter
rfelker
parents:
diff changeset
5 #include "../config.h"
08264c647f46 new filter
rfelker
parents:
diff changeset
6 #include "../mp_msg.h"
10020
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
7 #include "../cpudetect.h"
9514
08264c647f46 new filter
rfelker
parents:
diff changeset
8
08264c647f46 new filter
rfelker
parents:
diff changeset
9 #include "img_format.h"
08264c647f46 new filter
rfelker
parents:
diff changeset
10 #include "mp_image.h"
08264c647f46 new filter
rfelker
parents:
diff changeset
11 #include "vf.h"
08264c647f46 new filter
rfelker
parents:
diff changeset
12
08264c647f46 new filter
rfelker
parents:
diff changeset
13 #include "../libvo/fastmemcpy.h"
08264c647f46 new filter
rfelker
parents:
diff changeset
14
08264c647f46 new filter
rfelker
parents:
diff changeset
15 struct vf_priv_s {
08264c647f46 new filter
rfelker
parents:
diff changeset
16 int mode;
08264c647f46 new filter
rfelker
parents:
diff changeset
17 };
08264c647f46 new filter
rfelker
parents:
diff changeset
18
08264c647f46 new filter
rfelker
parents:
diff changeset
19 static inline void *my_memcpy_pic(void * dst, void * src, int bytesPerLine, int height, int dstStride, int srcStride)
08264c647f46 new filter
rfelker
parents:
diff changeset
20 {
08264c647f46 new filter
rfelker
parents:
diff changeset
21 int i;
08264c647f46 new filter
rfelker
parents:
diff changeset
22 void *retval=dst;
08264c647f46 new filter
rfelker
parents:
diff changeset
23
08264c647f46 new filter
rfelker
parents:
diff changeset
24 for(i=0; i<height; i++)
08264c647f46 new filter
rfelker
parents:
diff changeset
25 {
08264c647f46 new filter
rfelker
parents:
diff changeset
26 memcpy(dst, src, bytesPerLine);
08264c647f46 new filter
rfelker
parents:
diff changeset
27 src+= srcStride;
08264c647f46 new filter
rfelker
parents:
diff changeset
28 dst+= dstStride;
08264c647f46 new filter
rfelker
parents:
diff changeset
29 }
08264c647f46 new filter
rfelker
parents:
diff changeset
30
08264c647f46 new filter
rfelker
parents:
diff changeset
31 return retval;
08264c647f46 new filter
rfelker
parents:
diff changeset
32 }
08264c647f46 new filter
rfelker
parents:
diff changeset
33
08264c647f46 new filter
rfelker
parents:
diff changeset
34 static void deint(unsigned char *dest, int ds, unsigned char *src, int ss, int w, int h, int field)
08264c647f46 new filter
rfelker
parents:
diff changeset
35 {
08264c647f46 new filter
rfelker
parents:
diff changeset
36 int x, y;
08264c647f46 new filter
rfelker
parents:
diff changeset
37 src += ss;
08264c647f46 new filter
rfelker
parents:
diff changeset
38 dest += ds;
08264c647f46 new filter
rfelker
parents:
diff changeset
39 if (field) {
08264c647f46 new filter
rfelker
parents:
diff changeset
40 src += ss;
08264c647f46 new filter
rfelker
parents:
diff changeset
41 dest += ds;
08264c647f46 new filter
rfelker
parents:
diff changeset
42 h -= 2;
08264c647f46 new filter
rfelker
parents:
diff changeset
43 }
08264c647f46 new filter
rfelker
parents:
diff changeset
44 for (y=h/2; y; y--) {
08264c647f46 new filter
rfelker
parents:
diff changeset
45 for (x=0; x<w; x++) {
08264c647f46 new filter
rfelker
parents:
diff changeset
46 if (((src[x-ss] < src[x]) && (src[x+ss] < src[x])) ||
08264c647f46 new filter
rfelker
parents:
diff changeset
47 ((src[x-ss] > src[x]) && (src[x+ss] > src[x]))) {
08264c647f46 new filter
rfelker
parents:
diff changeset
48 //dest[x] = (src[x+ss] + src[x-ss])>>1;
08264c647f46 new filter
rfelker
parents:
diff changeset
49 dest[x] = ((src[x+ss]<<1) + (src[x-ss]<<1)
08264c647f46 new filter
rfelker
parents:
diff changeset
50 + src[x+ss+1] + src[x-ss+1]
08264c647f46 new filter
rfelker
parents:
diff changeset
51 + src[x+ss-1] + src[x-ss-1])>>3;
08264c647f46 new filter
rfelker
parents:
diff changeset
52 }
08264c647f46 new filter
rfelker
parents:
diff changeset
53 else dest[x] = src[x];
08264c647f46 new filter
rfelker
parents:
diff changeset
54 }
08264c647f46 new filter
rfelker
parents:
diff changeset
55 dest += ds<<1;
08264c647f46 new filter
rfelker
parents:
diff changeset
56 src += ss<<1;
08264c647f46 new filter
rfelker
parents:
diff changeset
57 }
08264c647f46 new filter
rfelker
parents:
diff changeset
58 }
08264c647f46 new filter
rfelker
parents:
diff changeset
59
10020
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
60 #ifdef HAVE_3DNOW
10049
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
61 static void qpel_li_3DNOW(unsigned char *d, unsigned char *s, int w, int h, int ds, int ss, int up)
10009
69f10d08c3be new mode for tfields filter -- shifts fields by a quarter-pixel so the
rfelker
parents: 9593
diff changeset
62 {
10020
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
63 int i, j, ssd=ss;
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
64 int crap1, crap2;
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
65 if (up) {
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
66 ssd = -ss;
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
67 memcpy(d, s, w);
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
68 d += ds;
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
69 s += ss;
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
70 }
10009
69f10d08c3be new mode for tfields filter -- shifts fields by a quarter-pixel so the
rfelker
parents: 9593
diff changeset
71 for (i=h-1; i; i--) {
10049
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
72 asm volatile(
10020
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
73 "1: \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
74 "movq (%%esi), %%mm0 \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
75 "movq (%%esi,%%eax), %%mm1 \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
76 "pavgusb %%mm0, %%mm1 \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
77 "addl $8, %%esi \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
78 "pavgusb %%mm0, %%mm1 \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
79 "movq %%mm1, (%%edi) \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
80 "addl $8, %%edi \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
81 "decl %%ecx \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
82 "jnz 1b \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
83 : "=S"(crap1), "=D"(crap2)
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
84 : "c"(w>>3), "S"(s), "D"(d), "a"(ssd)
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
85 );
10049
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
86 for (j=w-(w&7); j<w; j++)
10020
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
87 d[j] = (s[j+ssd] + 3*s[j])>>2;
10009
69f10d08c3be new mode for tfields filter -- shifts fields by a quarter-pixel so the
rfelker
parents: 9593
diff changeset
88 d += ds;
69f10d08c3be new mode for tfields filter -- shifts fields by a quarter-pixel so the
rfelker
parents: 9593
diff changeset
89 s += ss;
69f10d08c3be new mode for tfields filter -- shifts fields by a quarter-pixel so the
rfelker
parents: 9593
diff changeset
90 }
10020
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
91 if (!up) memcpy(d, s, w);
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
92 asm volatile("emms \n\t" : : : "memory");
10009
69f10d08c3be new mode for tfields filter -- shifts fields by a quarter-pixel so the
rfelker
parents: 9593
diff changeset
93 }
10020
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
94 #endif
10009
69f10d08c3be new mode for tfields filter -- shifts fields by a quarter-pixel so the
rfelker
parents: 9593
diff changeset
95
10020
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
96 #ifdef HAVE_MMX2
10049
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
97 static void qpel_li_MMX2(unsigned char *d, unsigned char *s, int w, int h, int ds, int ss, int up)
10009
69f10d08c3be new mode for tfields filter -- shifts fields by a quarter-pixel so the
rfelker
parents: 9593
diff changeset
98 {
10020
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
99 int i, j, ssd=ss;
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
100 int crap1, crap2;
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
101 if (up) {
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
102 ssd = -ss;
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
103 memcpy(d, s, w);
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
104 d += ds;
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
105 s += ss;
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
106 }
10009
69f10d08c3be new mode for tfields filter -- shifts fields by a quarter-pixel so the
rfelker
parents: 9593
diff changeset
107 for (i=h-1; i; i--) {
10049
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
108 asm volatile(
10020
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
109 "pxor %%mm7, %%mm7 \n\t"
10049
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
110 "2: \n\t"
10020
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
111 "movq (%%esi), %%mm0 \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
112 "movq (%%esi,%%eax), %%mm1 \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
113 "pavgb %%mm0, %%mm1 \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
114 "addl $8, %%esi \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
115 "pavgb %%mm0, %%mm1 \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
116 "movq %%mm1, (%%edi) \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
117 "addl $8, %%edi \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
118 "decl %%ecx \n\t"
10049
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
119 "jnz 2b \n\t"
10020
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
120 : "=S"(crap1), "=D"(crap2)
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
121 : "c"(w>>3), "S"(s), "D"(d), "a"(ssd)
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
122 );
10049
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
123 for (j=w-(w&7); j<w; j++)
10020
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
124 d[j] = (s[j+ssd] + 3*s[j])>>2;
10009
69f10d08c3be new mode for tfields filter -- shifts fields by a quarter-pixel so the
rfelker
parents: 9593
diff changeset
125 d += ds;
69f10d08c3be new mode for tfields filter -- shifts fields by a quarter-pixel so the
rfelker
parents: 9593
diff changeset
126 s += ss;
69f10d08c3be new mode for tfields filter -- shifts fields by a quarter-pixel so the
rfelker
parents: 9593
diff changeset
127 }
10020
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
128 if (!up) memcpy(d, s, w);
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
129 asm volatile("emms \n\t" : : : "memory");
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
130 }
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
131 #endif
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
132
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
133 #ifdef HAVE_MMX
10049
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
134 static void qpel_li_MMX(unsigned char *d, unsigned char *s, int w, int h, int ds, int ss, int up)
10020
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
135 {
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
136 int i, j, ssd=ss;
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
137 int crap1, crap2;
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
138 if (up) {
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
139 ssd = -ss;
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
140 memcpy(d, s, w);
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
141 d += ds;
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
142 s += ss;
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
143 }
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
144 for (i=h-1; i; i--) {
10049
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
145 asm volatile(
10020
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
146 "pxor %%mm7, %%mm7 \n\t"
10049
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
147 "3: \n\t"
10020
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
148 "movq (%%esi), %%mm0 \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
149 "movq (%%esi), %%mm1 \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
150 "movq (%%esi,%%eax), %%mm2 \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
151 "movq (%%esi,%%eax), %%mm3 \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
152 "addl $8, %%esi \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
153 "punpcklbw %%mm7, %%mm0 \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
154 "punpckhbw %%mm7, %%mm1 \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
155 "punpcklbw %%mm7, %%mm2 \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
156 "punpckhbw %%mm7, %%mm3 \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
157 "paddw %%mm0, %%mm2 \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
158 "paddw %%mm1, %%mm3 \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
159 "paddw %%mm0, %%mm2 \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
160 "paddw %%mm1, %%mm3 \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
161 "paddw %%mm0, %%mm2 \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
162 "paddw %%mm1, %%mm3 \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
163 "psrlw $2, %%mm2 \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
164 "psrlw $2, %%mm3 \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
165 "packsswb %%mm3, %%mm2 \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
166 "movq %%mm2, (%%edi) \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
167 "addl $8, %%edi \n\t"
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
168 "decl %%ecx \n\t"
10049
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
169 "jnz 3b \n\t"
10020
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
170 : "=S"(crap1), "=D"(crap2)
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
171 : "c"(w>>3), "S"(s), "D"(d), "a"(ssd)
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
172 );
10049
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
173 for (j=w-(w&7); j<w; j++)
10020
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
174 d[j] = (s[j+ssd] + 3*s[j])>>2;
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
175 d += ds;
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
176 s += ss;
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
177 }
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
178 if (!up) memcpy(d, s, w);
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
179 asm volatile("emms \n\t" : : : "memory");
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
180 }
10049
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
181
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
182 static void qpel_4tap_MMX(unsigned char *d, unsigned char *s, int w, int h, int ds, int ss, int up)
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
183 {
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
184 int i, j, ssd=ss;
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
185 static const short filter[] = {
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
186 29, 29, 29, 29, 110, 110, 110, 110,
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
187 9, 9, 9, 9, 3, 3, 3, 3,
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
188 64, 64, 64, 64 };
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
189 int crap1, crap2;
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
190 if (up) {
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
191 ssd = -ss;
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
192 memcpy(d, s, w);
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
193 d += ds; s += ss;
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
194 }
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
195 for (j=0; j<w; j++)
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
196 d[j] = (s[j+ssd] + 3*s[j])>>2;
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
197 d += ds; s += ss;
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
198 for (i=h-3; i; i--) {
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
199 asm volatile(
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
200 "pxor %%mm0, %%mm0 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
201 "movq (%%edx), %%mm4 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
202 "movq 8(%%edx), %%mm5 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
203 "movq 16(%%edx), %%mm6 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
204 "movq 24(%%edx), %%mm7 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
205 "4: \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
206
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
207 "movq (%%esi,%%eax), %%mm1 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
208 "movq (%%esi), %%mm2 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
209 "movq (%%esi,%%ebx), %%mm3 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
210 "punpcklbw %%mm0, %%mm1 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
211 "punpcklbw %%mm0, %%mm2 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
212 "pmullw %%mm4, %%mm1 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
213 "punpcklbw %%mm0, %%mm3 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
214 "pmullw %%mm5, %%mm2 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
215 "paddusw %%mm2, %%mm1 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
216 "pmullw %%mm6, %%mm3 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
217 "movq (%%esi,%%eax,2), %%mm2 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
218 "psubusw %%mm3, %%mm1 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
219 "punpcklbw %%mm0, %%mm2 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
220 "pmullw %%mm7, %%mm2 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
221 "psubusw %%mm2, %%mm1 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
222 "psrlw $7, %%mm1 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
223
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
224 "movq (%%esi,%%eax), %%mm2 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
225 "movq (%%esi), %%mm3 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
226 "punpckhbw %%mm0, %%mm2 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
227 "punpckhbw %%mm0, %%mm3 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
228 "pmullw %%mm4, %%mm2 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
229 "pmullw %%mm5, %%mm3 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
230 "paddusw %%mm3, %%mm2 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
231 "movq (%%esi,%%ebx), %%mm3 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
232 "punpckhbw %%mm0, %%mm3 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
233 "pmullw %%mm6, %%mm3 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
234 "psubusw %%mm3, %%mm2 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
235 "movq (%%esi,%%eax,2), %%mm3 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
236 "punpckhbw %%mm0, %%mm3 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
237 "addl $8, %%esi \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
238 "pmullw %%mm7, %%mm3 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
239 "psubusw %%mm3, %%mm2 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
240 "psrlw $7, %%mm2 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
241
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
242 "packuswb %%mm2, %%mm1 \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
243 "movq %%mm1, (%%edi) \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
244 "addl $8, %%edi \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
245 "decl %%ecx \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
246 "jnz 4b \n\t"
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
247 : "=S"(crap1), "=D"(crap2)
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
248 : "c"(w>>3), "S"(s), "D"(d), "a"(ssd), "b"(-ssd), "d"(filter)
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
249 );
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
250 for (j=w-(w&7); j<w; j++)
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
251 d[j] = (-9*s[j-ssd] + 111*s[j] + 29*s[j+ssd] - 3*s[j+ssd+ssd])>>7;
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
252 d += ds;
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
253 s += ss;
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
254 }
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
255 for (j=0; j<w; j++)
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
256 d[j] = (s[j+ssd] + 3*s[j])>>2;
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
257 d += ds; s += ss;
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
258 if (!up) memcpy(d, s, w);
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
259 asm volatile("emms \n\t" : : : "memory");
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
260 }
10020
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
261 #endif
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
262
10049
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
263 static inline int clamp(int a)
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
264 {
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
265 // If a<512, this is equivalent to:
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
266 // return (a<0) ? 0 : ( (a>255) ? 255 : a);
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
267 return (~(a>>31)) & (a | ((a<<23)>>31));
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
268 }
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
269
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
270 static void qpel_li_C(unsigned char *d, unsigned char *s, int w, int h, int ds, int ss, int up)
10020
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
271 {
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
272 int i, j, ssd=ss;
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
273 if (up) {
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
274 ssd = -ss;
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
275 memcpy(d, s, w);
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
276 d += ds;
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
277 s += ss;
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
278 }
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
279 for (i=h-1; i; i--) {
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
280 for (j=0; j<w; j++)
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
281 d[j] = (s[j+ssd] + 3*s[j])>>2;
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
282 d += ds;
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
283 s += ss;
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
284 }
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
285 if (!up) memcpy(d, s, w);
10009
69f10d08c3be new mode for tfields filter -- shifts fields by a quarter-pixel so the
rfelker
parents: 9593
diff changeset
286 }
9514
08264c647f46 new filter
rfelker
parents:
diff changeset
287
10049
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
288 static void qpel_4tap_C(unsigned char *d, unsigned char *s, int w, int h, int ds, int ss, int up)
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
289 {
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
290 int i, j, ssd=ss;
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
291 if (up) {
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
292 ssd = -ss;
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
293 memcpy(d, s, w);
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
294 d += ds; s += ss;
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
295 }
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
296 for (j=0; j<w; j++)
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
297 d[j] = (s[j+ssd] + 3*s[j] + 2)>>2;
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
298 d += ds; s += ss;
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
299 for (i=h-3; i; i--) {
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
300 for (j=0; j<w; j++)
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
301 d[j] = clamp((-9*s[j-ssd] + 111*s[j] + 29*s[j+ssd] - 3*s[j+ssd+ssd] + 64)>>7);
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
302 d += ds; s += ss;
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
303 }
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
304 for (j=0; j<w; j++)
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
305 d[j] = (s[j+ssd] + 3*s[j] + 2)>>2;
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
306 d += ds; s += ss;
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
307 if (!up) memcpy(d, s, w);
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
308 }
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
309
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
310 static void (*qpel_li)(unsigned char *d, unsigned char *s, int w, int h, int ds, int ss, int up);
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
311 static void (*qpel_4tap)(unsigned char *d, unsigned char *s, int w, int h, int ds, int ss, int up);
9514
08264c647f46 new filter
rfelker
parents:
diff changeset
312
08264c647f46 new filter
rfelker
parents:
diff changeset
313 static int put_image(struct vf_instance_s* vf, mp_image_t *mpi)
08264c647f46 new filter
rfelker
parents:
diff changeset
314 {
08264c647f46 new filter
rfelker
parents:
diff changeset
315 int ret;
08264c647f46 new filter
rfelker
parents:
diff changeset
316 mp_image_t *dmpi;
10049
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
317 void (*qpel)(unsigned char *, unsigned char *, int, int, int, int, int);
10078
379f48cace77 support more image formats. hopefully this bpp handling is correct...
rfelker
parents: 10052
diff changeset
318 int bpp=1;
379f48cace77 support more image formats. hopefully this bpp handling is correct...
rfelker
parents: 10052
diff changeset
319
379f48cace77 support more image formats. hopefully this bpp handling is correct...
rfelker
parents: 10052
diff changeset
320 if (!(mpi->flags & MP_IMGFLAG_PLANAR)) bpp = mpi->bpp/8;
10049
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
321
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
322 switch (vf->priv->mode) {
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
323 case 2:
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
324 qpel = qpel_li;
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
325 break;
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
326 case 3:
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
327 // TODO: add 3tap filter
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
328 qpel = qpel_4tap;
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
329 break;
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
330 case 4:
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
331 qpel = qpel_4tap;
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
332 break;
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
333 }
9514
08264c647f46 new filter
rfelker
parents:
diff changeset
334
08264c647f46 new filter
rfelker
parents:
diff changeset
335 switch (vf->priv->mode) {
08264c647f46 new filter
rfelker
parents:
diff changeset
336 case 0:
08264c647f46 new filter
rfelker
parents:
diff changeset
337 dmpi = vf_get_image(vf->next, mpi->imgfmt,
08264c647f46 new filter
rfelker
parents:
diff changeset
338 MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE,
08264c647f46 new filter
rfelker
parents:
diff changeset
339 mpi->width, mpi->height/2);
10078
379f48cace77 support more image formats. hopefully this bpp handling is correct...
rfelker
parents: 10052
diff changeset
340 memcpy_pic(dmpi->planes[0], mpi->planes[0], mpi->w*bpp, mpi->h/2,
9514
08264c647f46 new filter
rfelker
parents:
diff changeset
341 dmpi->stride[0], mpi->stride[0]*2);
08264c647f46 new filter
rfelker
parents:
diff changeset
342 if (mpi->flags & MP_IMGFLAG_PLANAR) {
08264c647f46 new filter
rfelker
parents:
diff changeset
343 memcpy_pic(dmpi->planes[1], mpi->planes[1],
08264c647f46 new filter
rfelker
parents:
diff changeset
344 mpi->chroma_width, mpi->chroma_height/2,
08264c647f46 new filter
rfelker
parents:
diff changeset
345 dmpi->stride[1], mpi->stride[1]*2);
08264c647f46 new filter
rfelker
parents:
diff changeset
346 memcpy_pic(dmpi->planes[2], mpi->planes[2],
08264c647f46 new filter
rfelker
parents:
diff changeset
347 mpi->chroma_width, mpi->chroma_height/2,
08264c647f46 new filter
rfelker
parents:
diff changeset
348 dmpi->stride[2], mpi->stride[2]*2);
08264c647f46 new filter
rfelker
parents:
diff changeset
349 }
08264c647f46 new filter
rfelker
parents:
diff changeset
350 ret = vf_next_put_image(vf, dmpi);
10052
b358b7509e1a sort of a hack, but at least this lets the framerate-increasing
rfelker
parents: 10049
diff changeset
351 vf_next_control(vf, VFCTRL_FLIP_PAGE, NULL);
9514
08264c647f46 new filter
rfelker
parents:
diff changeset
352
08264c647f46 new filter
rfelker
parents:
diff changeset
353 memcpy_pic(dmpi->planes[0], mpi->planes[0] + mpi->stride[0],
10078
379f48cace77 support more image formats. hopefully this bpp handling is correct...
rfelker
parents: 10052
diff changeset
354 mpi->w*bpp, mpi->h/2, dmpi->stride[0], mpi->stride[0]*2);
9514
08264c647f46 new filter
rfelker
parents:
diff changeset
355 if (mpi->flags & MP_IMGFLAG_PLANAR) {
08264c647f46 new filter
rfelker
parents:
diff changeset
356 memcpy_pic(dmpi->planes[1], mpi->planes[1] + mpi->stride[1],
08264c647f46 new filter
rfelker
parents:
diff changeset
357 mpi->chroma_width, mpi->chroma_height/2,
08264c647f46 new filter
rfelker
parents:
diff changeset
358 dmpi->stride[1], mpi->stride[1]*2);
08264c647f46 new filter
rfelker
parents:
diff changeset
359 memcpy_pic(dmpi->planes[2], mpi->planes[2] + mpi->stride[2],
08264c647f46 new filter
rfelker
parents:
diff changeset
360 mpi->chroma_width, mpi->chroma_height/2,
08264c647f46 new filter
rfelker
parents:
diff changeset
361 dmpi->stride[2], mpi->stride[2]*2);
08264c647f46 new filter
rfelker
parents:
diff changeset
362 }
08264c647f46 new filter
rfelker
parents:
diff changeset
363 return vf_next_put_image(vf, dmpi) || ret;
08264c647f46 new filter
rfelker
parents:
diff changeset
364 case 1:
08264c647f46 new filter
rfelker
parents:
diff changeset
365 dmpi = vf_get_image(vf->next, mpi->imgfmt,
08264c647f46 new filter
rfelker
parents:
diff changeset
366 MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE,
08264c647f46 new filter
rfelker
parents:
diff changeset
367 mpi->width, mpi->height);
10078
379f48cace77 support more image formats. hopefully this bpp handling is correct...
rfelker
parents: 10052
diff changeset
368 my_memcpy_pic(dmpi->planes[0], mpi->planes[0], mpi->w*bpp, mpi->h/2,
9514
08264c647f46 new filter
rfelker
parents:
diff changeset
369 dmpi->stride[0]*2, mpi->stride[0]*2);
08264c647f46 new filter
rfelker
parents:
diff changeset
370 deint(dmpi->planes[0], dmpi->stride[0], mpi->planes[0], mpi->stride[0], mpi->w, mpi->h, 0);
08264c647f46 new filter
rfelker
parents:
diff changeset
371 if (mpi->flags & MP_IMGFLAG_PLANAR) {
08264c647f46 new filter
rfelker
parents:
diff changeset
372 my_memcpy_pic(dmpi->planes[1], mpi->planes[1],
08264c647f46 new filter
rfelker
parents:
diff changeset
373 mpi->chroma_width, mpi->chroma_height/2,
08264c647f46 new filter
rfelker
parents:
diff changeset
374 dmpi->stride[1]*2, mpi->stride[1]*2);
08264c647f46 new filter
rfelker
parents:
diff changeset
375 my_memcpy_pic(dmpi->planes[2], mpi->planes[2],
08264c647f46 new filter
rfelker
parents:
diff changeset
376 mpi->chroma_width, mpi->chroma_height/2,
08264c647f46 new filter
rfelker
parents:
diff changeset
377 dmpi->stride[2]*2, mpi->stride[2]*2);
08264c647f46 new filter
rfelker
parents:
diff changeset
378 deint(dmpi->planes[1], dmpi->stride[1], mpi->planes[1], mpi->stride[1],
08264c647f46 new filter
rfelker
parents:
diff changeset
379 mpi->chroma_width, mpi->chroma_height, 0);
08264c647f46 new filter
rfelker
parents:
diff changeset
380 deint(dmpi->planes[2], dmpi->stride[2], mpi->planes[2], mpi->stride[2],
08264c647f46 new filter
rfelker
parents:
diff changeset
381 mpi->chroma_width, mpi->chroma_height, 0);
08264c647f46 new filter
rfelker
parents:
diff changeset
382 }
08264c647f46 new filter
rfelker
parents:
diff changeset
383 ret = vf_next_put_image(vf, dmpi);
10052
b358b7509e1a sort of a hack, but at least this lets the framerate-increasing
rfelker
parents: 10049
diff changeset
384 vf_next_control(vf, VFCTRL_FLIP_PAGE, NULL);
9514
08264c647f46 new filter
rfelker
parents:
diff changeset
385
08264c647f46 new filter
rfelker
parents:
diff changeset
386 my_memcpy_pic(dmpi->planes[0] + dmpi->stride[0], mpi->planes[0] + mpi->stride[0],
10078
379f48cace77 support more image formats. hopefully this bpp handling is correct...
rfelker
parents: 10052
diff changeset
387 mpi->w*bpp, mpi->h/2, dmpi->stride[0]*2, mpi->stride[0]*2);
9514
08264c647f46 new filter
rfelker
parents:
diff changeset
388 deint(dmpi->planes[0], dmpi->stride[0], mpi->planes[0], mpi->stride[0], mpi->w, mpi->h, 1);
08264c647f46 new filter
rfelker
parents:
diff changeset
389 if (mpi->flags & MP_IMGFLAG_PLANAR) {
08264c647f46 new filter
rfelker
parents:
diff changeset
390 my_memcpy_pic(dmpi->planes[1] + dmpi->stride[1], mpi->planes[1] + mpi->stride[1],
08264c647f46 new filter
rfelker
parents:
diff changeset
391 mpi->chroma_width, mpi->chroma_height/2,
08264c647f46 new filter
rfelker
parents:
diff changeset
392 dmpi->stride[1]*2, mpi->stride[1]*2);
08264c647f46 new filter
rfelker
parents:
diff changeset
393 my_memcpy_pic(dmpi->planes[2] + dmpi->stride[2], mpi->planes[2] + mpi->stride[2],
08264c647f46 new filter
rfelker
parents:
diff changeset
394 mpi->chroma_width, mpi->chroma_height/2,
08264c647f46 new filter
rfelker
parents:
diff changeset
395 dmpi->stride[2]*2, mpi->stride[2]*2);
08264c647f46 new filter
rfelker
parents:
diff changeset
396 deint(dmpi->planes[1], dmpi->stride[1], mpi->planes[1], mpi->stride[1],
08264c647f46 new filter
rfelker
parents:
diff changeset
397 mpi->chroma_width, mpi->chroma_height, 1);
08264c647f46 new filter
rfelker
parents:
diff changeset
398 deint(dmpi->planes[2], dmpi->stride[2], mpi->planes[2], mpi->stride[2],
08264c647f46 new filter
rfelker
parents:
diff changeset
399 mpi->chroma_width, mpi->chroma_height, 1);
08264c647f46 new filter
rfelker
parents:
diff changeset
400 }
08264c647f46 new filter
rfelker
parents:
diff changeset
401 return vf_next_put_image(vf, dmpi) || ret;
10009
69f10d08c3be new mode for tfields filter -- shifts fields by a quarter-pixel so the
rfelker
parents: 9593
diff changeset
402 case 2:
10049
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
403 case 3:
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
404 case 4:
10009
69f10d08c3be new mode for tfields filter -- shifts fields by a quarter-pixel so the
rfelker
parents: 9593
diff changeset
405 dmpi = vf_get_image(vf->next, mpi->imgfmt,
69f10d08c3be new mode for tfields filter -- shifts fields by a quarter-pixel so the
rfelker
parents: 9593
diff changeset
406 MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE,
69f10d08c3be new mode for tfields filter -- shifts fields by a quarter-pixel so the
rfelker
parents: 9593
diff changeset
407 mpi->width, mpi->height/2);
10078
379f48cace77 support more image formats. hopefully this bpp handling is correct...
rfelker
parents: 10052
diff changeset
408 qpel(dmpi->planes[0], mpi->planes[0], mpi->w*bpp, mpi->h/2,
10020
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
409 dmpi->stride[0], mpi->stride[0]*2, 0);
10009
69f10d08c3be new mode for tfields filter -- shifts fields by a quarter-pixel so the
rfelker
parents: 9593
diff changeset
410 if (mpi->flags & MP_IMGFLAG_PLANAR) {
10020
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
411 qpel(dmpi->planes[1], mpi->planes[1],
10009
69f10d08c3be new mode for tfields filter -- shifts fields by a quarter-pixel so the
rfelker
parents: 9593
diff changeset
412 mpi->chroma_width, mpi->chroma_height/2,
10020
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
413 dmpi->stride[1], mpi->stride[1]*2, 0);
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
414 qpel(dmpi->planes[2], mpi->planes[2],
10009
69f10d08c3be new mode for tfields filter -- shifts fields by a quarter-pixel so the
rfelker
parents: 9593
diff changeset
415 mpi->chroma_width, mpi->chroma_height/2,
10020
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
416 dmpi->stride[2], mpi->stride[2]*2, 0);
10009
69f10d08c3be new mode for tfields filter -- shifts fields by a quarter-pixel so the
rfelker
parents: 9593
diff changeset
417 }
69f10d08c3be new mode for tfields filter -- shifts fields by a quarter-pixel so the
rfelker
parents: 9593
diff changeset
418 ret = vf_next_put_image(vf, dmpi);
10052
b358b7509e1a sort of a hack, but at least this lets the framerate-increasing
rfelker
parents: 10049
diff changeset
419 vf_next_control(vf, VFCTRL_FLIP_PAGE, NULL);
10009
69f10d08c3be new mode for tfields filter -- shifts fields by a quarter-pixel so the
rfelker
parents: 9593
diff changeset
420
10020
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
421 qpel(dmpi->planes[0], mpi->planes[0] + mpi->stride[0],
10078
379f48cace77 support more image formats. hopefully this bpp handling is correct...
rfelker
parents: 10052
diff changeset
422 mpi->w*bpp, mpi->h/2, dmpi->stride[0], mpi->stride[0]*2, 1);
10009
69f10d08c3be new mode for tfields filter -- shifts fields by a quarter-pixel so the
rfelker
parents: 9593
diff changeset
423 if (mpi->flags & MP_IMGFLAG_PLANAR) {
10020
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
424 qpel(dmpi->planes[1], mpi->planes[1] + mpi->stride[1],
10009
69f10d08c3be new mode for tfields filter -- shifts fields by a quarter-pixel so the
rfelker
parents: 9593
diff changeset
425 mpi->chroma_width, mpi->chroma_height/2,
10020
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
426 dmpi->stride[1], mpi->stride[1]*2, 1);
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
427 qpel(dmpi->planes[2], mpi->planes[2] + mpi->stride[2],
10009
69f10d08c3be new mode for tfields filter -- shifts fields by a quarter-pixel so the
rfelker
parents: 9593
diff changeset
428 mpi->chroma_width, mpi->chroma_height/2,
10020
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
429 dmpi->stride[2], mpi->stride[2]*2, 1);
10009
69f10d08c3be new mode for tfields filter -- shifts fields by a quarter-pixel so the
rfelker
parents: 9593
diff changeset
430 }
69f10d08c3be new mode for tfields filter -- shifts fields by a quarter-pixel so the
rfelker
parents: 9593
diff changeset
431 return vf_next_put_image(vf, dmpi) || ret;
9514
08264c647f46 new filter
rfelker
parents:
diff changeset
432 }
08264c647f46 new filter
rfelker
parents:
diff changeset
433 return 0;
08264c647f46 new filter
rfelker
parents:
diff changeset
434 }
08264c647f46 new filter
rfelker
parents:
diff changeset
435
08264c647f46 new filter
rfelker
parents:
diff changeset
436 static int query_format(struct vf_instance_s* vf, unsigned int fmt)
08264c647f46 new filter
rfelker
parents:
diff changeset
437 {
08264c647f46 new filter
rfelker
parents:
diff changeset
438 /* FIXME - figure out which other formats work */
08264c647f46 new filter
rfelker
parents:
diff changeset
439 switch (fmt) {
08264c647f46 new filter
rfelker
parents:
diff changeset
440 case IMGFMT_YV12:
08264c647f46 new filter
rfelker
parents:
diff changeset
441 case IMGFMT_IYUV:
08264c647f46 new filter
rfelker
parents:
diff changeset
442 case IMGFMT_I420:
08264c647f46 new filter
rfelker
parents:
diff changeset
443 return vf_next_query_format(vf, fmt);
08264c647f46 new filter
rfelker
parents:
diff changeset
444 }
08264c647f46 new filter
rfelker
parents:
diff changeset
445 return 0;
08264c647f46 new filter
rfelker
parents:
diff changeset
446 }
08264c647f46 new filter
rfelker
parents:
diff changeset
447
08264c647f46 new filter
rfelker
parents:
diff changeset
448 static int config(struct vf_instance_s* vf,
08264c647f46 new filter
rfelker
parents:
diff changeset
449 int width, int height, int d_width, int d_height,
08264c647f46 new filter
rfelker
parents:
diff changeset
450 unsigned int flags, unsigned int outfmt)
08264c647f46 new filter
rfelker
parents:
diff changeset
451 {
08264c647f46 new filter
rfelker
parents:
diff changeset
452 switch (vf->priv->mode) {
08264c647f46 new filter
rfelker
parents:
diff changeset
453 case 0:
10009
69f10d08c3be new mode for tfields filter -- shifts fields by a quarter-pixel so the
rfelker
parents: 9593
diff changeset
454 case 2:
10049
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
455 case 3:
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
456 case 4:
9514
08264c647f46 new filter
rfelker
parents:
diff changeset
457 return vf_next_config(vf,width,height/2,d_width,d_height,flags,outfmt);
08264c647f46 new filter
rfelker
parents:
diff changeset
458 case 1:
08264c647f46 new filter
rfelker
parents:
diff changeset
459 return vf_next_config(vf,width,height,d_width,d_height,flags,outfmt);
08264c647f46 new filter
rfelker
parents:
diff changeset
460 }
08264c647f46 new filter
rfelker
parents:
diff changeset
461 return 0;
08264c647f46 new filter
rfelker
parents:
diff changeset
462 }
08264c647f46 new filter
rfelker
parents:
diff changeset
463
08264c647f46 new filter
rfelker
parents:
diff changeset
464 static void uninit(struct vf_instance_s* vf)
08264c647f46 new filter
rfelker
parents:
diff changeset
465 {
08264c647f46 new filter
rfelker
parents:
diff changeset
466 free(vf->priv);
08264c647f46 new filter
rfelker
parents:
diff changeset
467 }
08264c647f46 new filter
rfelker
parents:
diff changeset
468
08264c647f46 new filter
rfelker
parents:
diff changeset
469 static int open(vf_instance_t *vf, char* args)
08264c647f46 new filter
rfelker
parents:
diff changeset
470 {
08264c647f46 new filter
rfelker
parents:
diff changeset
471 struct vf_priv_s *p;
08264c647f46 new filter
rfelker
parents:
diff changeset
472 vf->config = config;
08264c647f46 new filter
rfelker
parents:
diff changeset
473 vf->put_image = put_image;
10078
379f48cace77 support more image formats. hopefully this bpp handling is correct...
rfelker
parents: 10052
diff changeset
474 //vf->query_format = query_format;
9514
08264c647f46 new filter
rfelker
parents:
diff changeset
475 vf->uninit = uninit;
08264c647f46 new filter
rfelker
parents:
diff changeset
476 vf->default_reqs = VFCAP_ACCEPT_STRIDE;
08264c647f46 new filter
rfelker
parents:
diff changeset
477 vf->priv = p = calloc(1, sizeof(struct vf_priv_s));
08264c647f46 new filter
rfelker
parents:
diff changeset
478 vf->priv->mode = 0;
08264c647f46 new filter
rfelker
parents:
diff changeset
479 if (args) sscanf(args, "%d", &vf->priv->mode);
10049
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
480 qpel_li = qpel_li_C;
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
481 qpel_4tap = qpel_4tap_C;
10020
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
482 #ifdef HAVE_MMX
10049
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
483 if(gCpuCaps.hasMMX) qpel_li = qpel_li_MMX;
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
484 if(gCpuCaps.hasMMX) qpel_4tap = qpel_4tap_MMX;
10020
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
485 #endif
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
486 #ifdef HAVE_MMX2
10049
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
487 if(gCpuCaps.hasMMX2) qpel_li = qpel_li_MMX2;
10020
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
488 #endif
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
489 #ifdef HAVE_3DNOW
10049
765c2276aa0c more 10l's -- fortunately part of the bug was that the buggy code didn't get called...
rfelker
parents: 10020
diff changeset
490 if(gCpuCaps.has3DNow) qpel_li = qpel_li_3DNOW;
10020
9829b7e61b55 new mmx/mmx2/3dnow code for improved performance
rfelker
parents: 10009
diff changeset
491 #endif
9514
08264c647f46 new filter
rfelker
parents:
diff changeset
492 return 1;
08264c647f46 new filter
rfelker
parents:
diff changeset
493 }
08264c647f46 new filter
rfelker
parents:
diff changeset
494
08264c647f46 new filter
rfelker
parents:
diff changeset
495 vf_info_t vf_info_tfields = {
08264c647f46 new filter
rfelker
parents:
diff changeset
496 "temporal field separation",
08264c647f46 new filter
rfelker
parents:
diff changeset
497 "tfields",
08264c647f46 new filter
rfelker
parents:
diff changeset
498 "Rich Felker",
08264c647f46 new filter
rfelker
parents:
diff changeset
499 "",
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9514
diff changeset
500 open,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9514
diff changeset
501 NULL
9514
08264c647f46 new filter
rfelker
parents:
diff changeset
502 };
08264c647f46 new filter
rfelker
parents:
diff changeset
503
08264c647f46 new filter
rfelker
parents:
diff changeset
504