annotate libmpcodecs/vf_phase.c @ 31689:c447fb125915

Pass libass messages to mp_msg
author greg
date Mon, 19 Jul 2010 00:12:08 +0000
parents a972c1a4a012
children 7af3e6f901fd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
30421
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
1 /*
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
2 * This file is part of MPlayer.
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
3 *
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
4 * MPlayer is free software; you can redistribute it and/or modify
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
5 * it under the terms of the GNU General Public License as published by
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
6 * the Free Software Foundation; either version 2 of the License, or
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
7 * (at your option) any later version.
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
8 *
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
9 * MPlayer is distributed in the hope that it will be useful,
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
12 * GNU General Public License for more details.
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
13 *
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
14 * You should have received a copy of the GNU General Public License along
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
15 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
17 */
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
18
12081
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
19 #include <stdio.h>
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
20 #include <stdlib.h>
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
21 #include <string.h>
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
22 #include <limits.h>
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
23
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 13188
diff changeset
24 #include "config.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 13188
diff changeset
25 #include "mp_msg.h"
12081
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
26
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
27 #include "img_format.h"
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
28 #include "mp_image.h"
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
29 #include "vf.h"
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
30
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 13188
diff changeset
31 #include "libvo/fastmemcpy.h"
12081
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
32
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
33 enum mode { PROGRESSIVE, TOP_FIRST, BOTTOM_FIRST,
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
34 TOP_FIRST_ANALYZE, BOTTOM_FIRST_ANALYZE,
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
35 ANALYZE, FULL_ANALYZE, AUTO, AUTO_ANALYZE };
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
36
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
37 #define fixed_mode(p) ((p)<=BOTTOM_FIRST)
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
38
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
39 struct vf_priv_s
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
40 {
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
41 enum mode mode;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
42 int verbose;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
43 unsigned char *buf[3];
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
44 };
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
45
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
46 /*
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
47 * Copy fields from either current or buffered previous frame to the
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
48 * output and store the current frame unmodified to the buffer.
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
49 */
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
50
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
51 static void do_plane(unsigned char *to, unsigned char *from,
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
52 int w, int h, int ts, int fs,
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
53 unsigned char **bufp, enum mode mode)
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
54 {
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
55 unsigned char *buf, *end;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
56 int top;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 25221
diff changeset
57
12081
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
58 if(!*bufp)
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
59 {
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
60 mode=PROGRESSIVE;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
61 if(!(*bufp=malloc(h*w))) return;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
62 }
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
63
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
64 for(end=to+h*ts, buf=*bufp, top=1; to<end; from+=fs, to+=ts, buf+=w, top^=1)
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
65 {
23457
a124f3abc1ec Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents: 18004
diff changeset
66 fast_memcpy(to, mode==(top?BOTTOM_FIRST:TOP_FIRST)?buf:from, w);
a124f3abc1ec Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents: 18004
diff changeset
67 fast_memcpy(buf, from, w);
12081
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
68 }
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
69 }
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
70
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
71 /*
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
72 * This macro interpolates the value of both fields at a point halfway
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
73 * between lines and takes the squared difference. In field resolution
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
74 * the point is a quarter pixel below a line in one field and a quarter
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
75 * pixel above a line in other.
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
76 *
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
77 * (the result is actually multiplied by 25)
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
78 */
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
79
17094
rathann
parents: 17012
diff changeset
80 #define diff(a, as, b, bs) (t=((*a-b[bs])<<2)+a[as<<1]-b[-bs], t*t)
12081
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
81
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
82 /*
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
83 * Find which field combination has the smallest average squared difference
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
84 * between the fields.
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
85 */
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
86
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
87 static enum mode analyze_plane(unsigned char *old, unsigned char *new,
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
88 int w, int h, int os, int ns, enum mode mode,
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
89 int verbose, int fields)
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
90 {
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
91 double bdiff, pdiff, tdiff, scale;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
92 int bdif, tdif, pdif;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
93 int top, t;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
94 unsigned char *end, *rend;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
95
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
96 if(mode==AUTO)
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
97 mode=fields&MP_IMGFIELD_ORDERED?fields&MP_IMGFIELD_TOP_FIRST?
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
98 TOP_FIRST:BOTTOM_FIRST:PROGRESSIVE;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
99 else if(mode==AUTO_ANALYZE)
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
100 mode=fields&MP_IMGFIELD_ORDERED?fields&MP_IMGFIELD_TOP_FIRST?
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
101 TOP_FIRST_ANALYZE:BOTTOM_FIRST_ANALYZE:FULL_ANALYZE;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 25221
diff changeset
102
12081
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
103 if(fixed_mode(mode))
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
104 bdiff=pdiff=tdiff=65536.0;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
105 else
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
106 {
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
107 bdiff=pdiff=tdiff=0.0;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
108
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
109 for(end=new+(h-2)*ns, new+=ns, old+=os, top=0;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
110 new<end; new+=ns-w, old+=os-w, top^=1)
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
111 {
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
112 pdif=tdif=bdif=0;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
113
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
114 switch(mode)
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
115 {
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
116 case TOP_FIRST_ANALYZE:
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
117 if(top)
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
118 for(rend=new+w; new<rend; new++, old++)
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
119 pdif+=diff(new, ns, new, ns),
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
120 tdif+=diff(new, ns, old, os);
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
121 else
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
122 for(rend=new+w; new<rend; new++, old++)
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
123 pdif+=diff(new, ns, new, ns),
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
124 tdif+=diff(old, os, new, ns);
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
125 break;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
126
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
127 case BOTTOM_FIRST_ANALYZE:
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
128 if(top)
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
129 for(rend=new+w; new<rend; new++, old++)
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
130 pdif+=diff(new, ns, new, ns),
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
131 bdif+=diff(old, os, new, ns);
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
132 else
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
133 for(rend=new+w; new<rend; new++, old++)
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
134 pdif+=diff(new, ns, new, ns),
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
135 bdif+=diff(new, ns, old, os);
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
136 break;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 25221
diff changeset
137
12081
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
138 case ANALYZE:
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
139 if(top)
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
140 for(rend=new+w; new<rend; new++, old++)
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
141 tdif+=diff(new, ns, old, os),
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
142 bdif+=diff(old, os, new, ns);
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
143 else
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
144 for(rend=new+w; new<rend; new++, old++)
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
145 bdif+=diff(new, ns, old, os),
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
146 tdif+=diff(old, os, new, ns);
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
147 break;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
148
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
149 default: /* FULL_ANALYZE */
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
150 if(top)
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
151 for(rend=new+w; new<rend; new++, old++)
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
152 pdif+=diff(new, ns, new, ns),
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
153 tdif+=diff(new, ns, old, os),
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
154 bdif+=diff(old, os, new, ns);
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
155 else
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
156 for(rend=new+w; new<rend; new++, old++)
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
157 pdif+=diff(new, ns, new, ns),
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
158 bdif+=diff(new, ns, old, os),
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
159 tdif+=diff(old, os, new, ns);
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
160 }
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
161
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
162 pdiff+=(double)pdif;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
163 tdiff+=(double)tdif;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
164 bdiff+=(double)bdif;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 25221
diff changeset
165 }
12081
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
166
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
167 scale=1.0/(w*(h-3))/25.0;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
168 pdiff*=scale;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
169 tdiff*=scale;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
170 bdiff*=scale;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 25221
diff changeset
171
12081
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
172 if(mode==TOP_FIRST_ANALYZE)
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
173 bdiff=65536.0;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
174 else if(mode==BOTTOM_FIRST_ANALYZE)
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
175 tdiff=65536.0;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
176 else if(mode==ANALYZE)
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
177 pdiff=65536.0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 25221
diff changeset
178
12081
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
179 if(bdiff<pdiff && bdiff<tdiff)
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
180 mode=BOTTOM_FIRST;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
181 else if(tdiff<pdiff && tdiff<bdiff)
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
182 mode=TOP_FIRST;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
183 else
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
184 mode=PROGRESSIVE;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
185 }
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
186
17969
843e0427b5b9 Change 'if(verbose)' to the more appropriate mp_msg_test.
diego
parents: 17906
diff changeset
187 if( mp_msg_test(MSGT_VFILTER,MSGL_V) )
12081
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
188 {
18004
bcd805923554 Part2 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu with LOTS of modifications by me
reynaldo
parents: 17969
diff changeset
189 mp_msg(MSGT_VFILTER, MSGL_INFO, "%c", mode==BOTTOM_FIRST?'b':mode==TOP_FIRST?'t':'p');
bcd805923554 Part2 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu with LOTS of modifications by me
reynaldo
parents: 17969
diff changeset
190 if(tdiff==65536.0) mp_msg(MSGT_VFILTER, MSGL_INFO," N/A "); else mp_msg(MSGT_VFILTER, MSGL_INFO," %8.2f", tdiff);
bcd805923554 Part2 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu with LOTS of modifications by me
reynaldo
parents: 17969
diff changeset
191 if(bdiff==65536.0) mp_msg(MSGT_VFILTER, MSGL_INFO," N/A "); else mp_msg(MSGT_VFILTER, MSGL_INFO," %8.2f", bdiff);
bcd805923554 Part2 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu with LOTS of modifications by me
reynaldo
parents: 17969
diff changeset
192 if(pdiff==65536.0) mp_msg(MSGT_VFILTER, MSGL_INFO," N/A "); else mp_msg(MSGT_VFILTER, MSGL_INFO," %8.2f", pdiff);
bcd805923554 Part2 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu with LOTS of modifications by me
reynaldo
parents: 17969
diff changeset
193 mp_msg(MSGT_VFILTER, MSGL_INFO," \n");
12081
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
194 }
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
195
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
196 return mode;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
197 }
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
198
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
199 static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts)
12081
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
200 {
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
201 mp_image_t *dmpi;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
202 int w;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
203 enum mode mode;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
204
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
205 if(!(dmpi=vf_get_image(vf->next, mpi->imgfmt,
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
206 MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE,
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
207 mpi->w, mpi->h)))
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
208 return 0;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
209
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
210 w=dmpi->w;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
211 if(!(dmpi->flags&MP_IMGFLAG_PLANAR))
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
212 w*=dmpi->bpp/8;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
213
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
214 mode=vf->priv->mode;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
215
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
216 if(!vf->priv->buf[0])
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
217 mode=PROGRESSIVE;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
218 else
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
219 mode=analyze_plane(vf->priv->buf[0], mpi->planes[0],
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
220 w, dmpi->h, w, mpi->stride[0], mode,
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
221 vf->priv->verbose, mpi->fields);
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
222
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
223 do_plane(dmpi->planes[0], mpi->planes[0],
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
224 w, dmpi->h,
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
225 dmpi->stride[0], mpi->stride[0],
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 25221
diff changeset
226 &vf->priv->buf[0], mode);
12081
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
227
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
228 if(dmpi->flags&MP_IMGFLAG_PLANAR)
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
229 {
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
230 do_plane(dmpi->planes[1], mpi->planes[1],
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
231 dmpi->chroma_width, dmpi->chroma_height,
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
232 dmpi->stride[1], mpi->stride[1],
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
233 &vf->priv->buf[1], mode);
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
234 do_plane(dmpi->planes[2], mpi->planes[2],
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
235 dmpi->chroma_width, dmpi->chroma_height,
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
236 dmpi->stride[2], mpi->stride[2],
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
237 &vf->priv->buf[2], mode);
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
238 }
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
239
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17094
diff changeset
240 return vf_next_put_image(vf, dmpi, MP_NOPTS_VALUE);
12081
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
241 }
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
242
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
243 static void uninit(struct vf_instance *vf)
12081
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
244 {
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
245 free(vf->priv->buf[0]);
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
246 free(vf->priv->buf[1]);
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
247 free(vf->priv->buf[2]);
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
248 free(vf->priv);
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
249 }
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
250
30638
a7b908875c14 Rename open() vf initialization function to vf_open().
diego
parents: 30421
diff changeset
251 static int vf_open(vf_instance_t *vf, char *args)
12081
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
252 {
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
253 vf->put_image = put_image;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
254 vf->uninit = uninit;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
255 vf->default_reqs = VFCAP_ACCEPT_STRIDE;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
256
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
257 if(!(vf->priv = calloc(1, sizeof(struct vf_priv_s))))
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
258 {
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
259 uninit(vf);
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
260 return 0;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
261 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 25221
diff changeset
262
12081
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
263 vf->priv->mode=AUTO_ANALYZE;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
264 vf->priv->verbose=0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 25221
diff changeset
265
12081
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
266 while(args && *args)
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
267 {
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
268 switch(*args)
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
269 {
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
270 case 't': vf->priv->mode=TOP_FIRST; break;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
271 case 'a': vf->priv->mode=AUTO; break;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
272 case 'b': vf->priv->mode=BOTTOM_FIRST; break;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
273 case 'u': vf->priv->mode=ANALYZE; break;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
274 case 'T': vf->priv->mode=TOP_FIRST_ANALYZE; break;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
275 case 'A': vf->priv->mode=AUTO_ANALYZE; break;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
276 case 'B': vf->priv->mode=BOTTOM_FIRST_ANALYZE; break;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
277 case 'U': vf->priv->mode=FULL_ANALYZE; break;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
278 case 'p': vf->priv->mode=PROGRESSIVE; break;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
279 case 'v': vf->priv->verbose=1; break;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
280 case ':': break;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
281
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
282 default:
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
283 uninit(vf);
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
284 return 0; /* bad args */
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
285 }
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
286
13188
f60bc2314146 small gcc warning fixes
rathann
parents: 12081
diff changeset
287 if( (args=strchr(args, ':')) ) args++;
12081
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
288 }
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
289
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
290 return 1;
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
291 }
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
292
25221
00fff9a3b735 Make all vf_info_t structs const
reimar
parents: 23457
diff changeset
293 const vf_info_t vf_info_phase =
12081
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
294 {
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
295 "phase shift fields",
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
296 "phase",
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
297 "Ville Saari",
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
298 "",
30638
a7b908875c14 Rename open() vf initialization function to vf_open().
diego
parents: 30421
diff changeset
299 vf_open,
12081
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
300 NULL
e34700c872ac vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
diff changeset
301 };