annotate libmpcodecs/vf_boxblur.c @ 15533:ddf15d233d58

Do not switch to audio tracks whose codec private data differs from the main audio track's as this will most likely result in messed up audio output. Patch by Michael Behrisch <list () behrisch ! de>
author mosu
date Sat, 21 May 2005 06:50:08 +0000
parents e9a2af584986
children c0ab9ab83f4c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8010
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
1 /*
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
2 Copyright (C) 2002 Michael Niedermayer <michaelni@gmx.at>
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
3
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
4 This program is free software; you can redistribute it and/or modify
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
5 it under the terms of the GNU General Public License as published by
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
6 the Free Software Foundation; either version 2 of the License, or
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
7 (at your option) any later version.
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
8
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
9 This program is distributed in the hope that it will be useful,
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
12 GNU General Public License for more details.
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
13
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
14 You should have received a copy of the GNU General Public License
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
15 along with this program; if not, write to the Free Software
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
16 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
17 */
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
18
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
19 #include <stdio.h>
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
20 #include <stdlib.h>
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
21 #include <string.h>
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
22 #include <inttypes.h>
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
23 #include <assert.h>
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
24
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
25 #include "../config.h"
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
26 #include "../mp_msg.h"
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
27
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
28 #ifdef HAVE_MALLOC_H
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
29 #include <malloc.h>
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
30 #endif
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
31
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
32 #include "img_format.h"
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
33 #include "mp_image.h"
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
34 #include "vf.h"
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
35 #include "../libvo/fastmemcpy.h"
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
36
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
37
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
38 //===========================================================================//
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
39
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
40 typedef struct FilterParam{
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
41 int radius;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
42 int power;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
43 }FilterParam;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
44
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
45 struct vf_priv_s {
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
46 FilterParam lumaParam;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
47 FilterParam chromaParam;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
48 };
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
49
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
50
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
51 /***************************************************************************/
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
52
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
53
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
54 static int config(struct vf_instance_s* vf,
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
55 int width, int height, int d_width, int d_height,
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
56 unsigned int flags, unsigned int outfmt){
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
57
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
58 return vf_next_config(vf,width,height,d_width,d_height,flags,outfmt);
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
59 }
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
60
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
61 static inline void blur(uint8_t *dst, uint8_t *src, int w, int radius, int dstStep, int srcStep){
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
62 int x;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
63 const int length= radius*2 + 1;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
64 const int inv= ((1<<16) + length/2)/length;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
65
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
66 int sum= 0;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
67
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
68 for(x=0; x<radius; x++){
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
69 sum+= src[x*srcStep]<<1;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
70 }
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
71 sum+= src[radius*srcStep];
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
72
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
73 for(x=0; x<=radius; x++){
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
74 sum+= src[(radius+x)*srcStep] - src[(radius-x)*srcStep];
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
75 dst[x*dstStep]= (sum*inv + (1<<15))>>16;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
76 }
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
77
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
78 for(; x<w-radius; x++){
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
79 sum+= src[(radius+x)*srcStep] - src[(x-radius-1)*srcStep];
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
80 dst[x*dstStep]= (sum*inv + (1<<15))>>16;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
81 }
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
82
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
83 for(; x<w; x++){
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
84 sum+= src[(2*w-radius-x-1)*srcStep] - src[(x-radius-1)*srcStep];
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
85 dst[x*dstStep]= (sum*inv + (1<<15))>>16;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
86 }
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
87 }
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
88
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
89 static inline void blur2(uint8_t *dst, uint8_t *src, int w, int radius, int power, int dstStep, int srcStep){
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
90 uint8_t temp[2][4096];
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
91 uint8_t *a= temp[0], *b=temp[1];
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
92
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
93 if(radius){
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
94 blur(a, src, w, radius, 1, srcStep);
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
95 for(; power>2; power--){
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
96 uint8_t *c;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
97 blur(b, a, w, radius, 1, 1);
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
98 c=a; a=b; b=c;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
99 }
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
100 if(power>1)
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
101 blur(dst, a, w, radius, dstStep, 1);
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
102 else{
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
103 int i;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
104 for(i=0; i<w; i++)
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
105 dst[i*dstStep]= a[i];
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
106 }
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
107 }else{
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
108 int i;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
109 for(i=0; i<w; i++)
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
110 dst[i*dstStep]= src[i*srcStep];
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
111 }
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
112 }
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
113
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
114 static void hBlur(uint8_t *dst, uint8_t *src, int w, int h, int dstStride, int srcStride, int radius, int power){
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
115 int y;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
116
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
117 if(radius==0 && dst==src) return;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
118
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
119 for(y=0; y<h; y++){
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
120 blur2(dst + y*dstStride, src + y*srcStride, w, radius, power, 1, 1);
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
121 }
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
122 }
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
123
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
124 //FIXME optimize (x before y !!!)
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
125 static void vBlur(uint8_t *dst, uint8_t *src, int w, int h, int dstStride, int srcStride, int radius, int power){
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
126 int x;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
127
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
128 if(radius==0 && dst==src) return;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
129
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
130 for(x=0; x<w; x++){
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
131 blur2(dst + x, src + x, h, radius, power, dstStride, srcStride);
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
132 }
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
133 }
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
134
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
135 static int put_image(struct vf_instance_s* vf, mp_image_t *mpi){
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
136 int cw= mpi->w >> mpi->chroma_x_shift;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
137 int ch= mpi->h >> mpi->chroma_y_shift;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
138
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
139 mp_image_t *dmpi=vf_get_image(vf->next,mpi->imgfmt,
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
140 MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE,
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
141 mpi->w,mpi->h);
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
142
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
143 assert(mpi->flags&MP_IMGFLAG_PLANAR);
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
144
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
145 hBlur(dmpi->planes[0], mpi->planes[0], mpi->w,mpi->h,
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
146 dmpi->stride[0], mpi->stride[0], vf->priv->lumaParam.radius, vf->priv->lumaParam.power);
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
147 hBlur(dmpi->planes[1], mpi->planes[1], cw,ch,
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
148 dmpi->stride[1], mpi->stride[1], vf->priv->chromaParam.radius, vf->priv->chromaParam.power);
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
149 hBlur(dmpi->planes[2], mpi->planes[2], cw,ch,
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
150 dmpi->stride[2], mpi->stride[2], vf->priv->chromaParam.radius, vf->priv->chromaParam.power);
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
151
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
152 vBlur(dmpi->planes[0], dmpi->planes[0], mpi->w,mpi->h,
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
153 dmpi->stride[0], dmpi->stride[0], vf->priv->lumaParam.radius, vf->priv->lumaParam.power);
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
154 vBlur(dmpi->planes[1], dmpi->planes[1], cw,ch,
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
155 dmpi->stride[1], dmpi->stride[1], vf->priv->chromaParam.radius, vf->priv->chromaParam.power);
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
156 vBlur(dmpi->planes[2], dmpi->planes[2], cw,ch,
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
157 dmpi->stride[2], dmpi->stride[2], vf->priv->chromaParam.radius, vf->priv->chromaParam.power);
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
158
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
159 return vf_next_put_image(vf,dmpi);
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
160 }
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
161
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
162 //===========================================================================//
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
163
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
164 static int query_format(struct vf_instance_s* vf, unsigned int fmt){
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
165 switch(fmt)
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
166 {
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
167 case IMGFMT_YV12:
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
168 case IMGFMT_I420:
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
169 case IMGFMT_IYUV:
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
170 case IMGFMT_YVU9:
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
171 case IMGFMT_444P:
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
172 case IMGFMT_422P:
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
173 case IMGFMT_411P:
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
174 return vf_next_query_format(vf, fmt);
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
175 }
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
176 return 0;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
177 }
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
178
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
179 static int open(vf_instance_t *vf, char* args){
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
180 int e;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
181
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
182 vf->config=config;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
183 vf->put_image=put_image;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
184 // vf->get_image=get_image;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
185 vf->query_format=query_format;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
186 vf->priv=malloc(sizeof(struct vf_priv_s));
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
187 memset(vf->priv, 0, sizeof(struct vf_priv_s));
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
188
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
189 if(args==NULL) return 0;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
190
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
191 e=sscanf(args, "%d:%d:%d:%d",
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
192 &vf->priv->lumaParam.radius,
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
193 &vf->priv->lumaParam.power,
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
194 &vf->priv->chromaParam.radius,
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
195 &vf->priv->chromaParam.power
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
196 );
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
197
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
198 if(e==2){
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
199 vf->priv->chromaParam.radius= vf->priv->lumaParam.radius;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
200 vf->priv->chromaParam.power = vf->priv->lumaParam.power;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
201 }else if(e!=4)
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
202 return 0;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
203
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
204 if(vf->priv->lumaParam.radius < 0) return 0;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
205 if(vf->priv->chromaParam.radius < 0) return 0;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
206
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
207 return 1;
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
208 }
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
209
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
210 vf_info_t vf_info_boxblur = {
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
211 "box blur",
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
212 "boxblur",
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
213 "Michael Niedermayer",
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
214 "",
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8123
diff changeset
215 open,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8123
diff changeset
216 NULL
8010
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
217 };
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
218
329e9a5a154f boxblur, another useless filter
michael
parents:
diff changeset
219 //===========================================================================//