annotate libmpcodecs/vf_smartblur.c @ 24576:6704a924d4aa

According to MSDN a thread must call CoUninitialize once for each successful call it has made to CoInitialize or CoInitializeEx, including any call that returns S_FALSE. Only the CoUninitialize call corresponding to the CoInitialize or CoInitializeEx call that initialized the library can close it. patch by Gianluigi Tiesi, mplayer netfarm it
author diego
date Sun, 23 Sep 2007 20:37:33 +0000
parents f8d4f8eff72b
children 00fff9a3b735
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
1 /*
7aa3dba949f1 smartblur
michael
parents:
diff changeset
2 Copyright (C) 2002 Michael Niedermayer <michaelni@gmx.at>
7aa3dba949f1 smartblur
michael
parents:
diff changeset
3
7aa3dba949f1 smartblur
michael
parents:
diff changeset
4 This program is free software; you can redistribute it and/or modify
7aa3dba949f1 smartblur
michael
parents:
diff changeset
5 it under the terms of the GNU General Public License as published by
7aa3dba949f1 smartblur
michael
parents:
diff changeset
6 the Free Software Foundation; either version 2 of the License, or
7aa3dba949f1 smartblur
michael
parents:
diff changeset
7 (at your option) any later version.
7aa3dba949f1 smartblur
michael
parents:
diff changeset
8
7aa3dba949f1 smartblur
michael
parents:
diff changeset
9 This program is distributed in the hope that it will be useful,
7aa3dba949f1 smartblur
michael
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
7aa3dba949f1 smartblur
michael
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7aa3dba949f1 smartblur
michael
parents:
diff changeset
12 GNU General Public License for more details.
7aa3dba949f1 smartblur
michael
parents:
diff changeset
13
7aa3dba949f1 smartblur
michael
parents:
diff changeset
14 You should have received a copy of the GNU General Public License
7aa3dba949f1 smartblur
michael
parents:
diff changeset
15 along with this program; if not, write to the Free Software
17367
401b440a6d76 Update licensing information: The FSF changed postal address.
diego
parents: 17012
diff changeset
16 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
17 */
7aa3dba949f1 smartblur
michael
parents:
diff changeset
18
7aa3dba949f1 smartblur
michael
parents:
diff changeset
19 #include <stdio.h>
7aa3dba949f1 smartblur
michael
parents:
diff changeset
20 #include <stdlib.h>
7aa3dba949f1 smartblur
michael
parents:
diff changeset
21 #include <string.h>
7aa3dba949f1 smartblur
michael
parents:
diff changeset
22 #include <inttypes.h>
7aa3dba949f1 smartblur
michael
parents:
diff changeset
23 #include <assert.h>
7aa3dba949f1 smartblur
michael
parents:
diff changeset
24
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16154
diff changeset
25 #include "config.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16154
diff changeset
26 #include "mp_msg.h"
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
27
7aa3dba949f1 smartblur
michael
parents:
diff changeset
28 #ifdef HAVE_MALLOC_H
7aa3dba949f1 smartblur
michael
parents:
diff changeset
29 #include <malloc.h>
7aa3dba949f1 smartblur
michael
parents:
diff changeset
30 #endif
7aa3dba949f1 smartblur
michael
parents:
diff changeset
31
21778
bf1fbe97cc40 Fix build with shared libavutil. Approved by Diego.
rathann
parents: 19870
diff changeset
32 #ifdef USE_LIBAVUTIL_SO
bf1fbe97cc40 Fix build with shared libavutil. Approved by Diego.
rathann
parents: 19870
diff changeset
33 #include <ffmpeg/avutil.h>
bf1fbe97cc40 Fix build with shared libavutil. Approved by Diego.
rathann
parents: 19870
diff changeset
34 #else
19870
1e5cf11e8b1f Use PIX_FMT_* instead of IMGFMT_* when calling sws_getContext()
lucabe
parents: 18861
diff changeset
35 #include "avutil.h"
21778
bf1fbe97cc40 Fix build with shared libavutil. Approved by Diego.
rathann
parents: 19870
diff changeset
36 #endif
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
37 #include "img_format.h"
7aa3dba949f1 smartblur
michael
parents:
diff changeset
38 #include "mp_image.h"
7aa3dba949f1 smartblur
michael
parents:
diff changeset
39 #include "vf.h"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents: 17906
diff changeset
40 #include "libswscale/swscale.h"
10233
35f52ad860a0 vf_scale.h & related cleanup & some small warning fix by dominik
michael
parents: 9975
diff changeset
41 #include "vf_scale.h"
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
42
7aa3dba949f1 smartblur
michael
parents:
diff changeset
43 //===========================================================================//
7aa3dba949f1 smartblur
michael
parents:
diff changeset
44
7aa3dba949f1 smartblur
michael
parents:
diff changeset
45 typedef struct FilterParam{
7aa3dba949f1 smartblur
michael
parents:
diff changeset
46 float radius;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
47 float strength;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
48 int threshold;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
49 float quality;
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 8263
diff changeset
50 struct SwsContext *filterContext;
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
51 }FilterParam;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
52
7aa3dba949f1 smartblur
michael
parents:
diff changeset
53 struct vf_priv_s {
7aa3dba949f1 smartblur
michael
parents:
diff changeset
54 FilterParam luma;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
55 FilterParam chroma;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
56 };
7aa3dba949f1 smartblur
michael
parents:
diff changeset
57
7aa3dba949f1 smartblur
michael
parents:
diff changeset
58
7aa3dba949f1 smartblur
michael
parents:
diff changeset
59 /***************************************************************************/
7aa3dba949f1 smartblur
michael
parents:
diff changeset
60
7aa3dba949f1 smartblur
michael
parents:
diff changeset
61 //FIXME stupid code duplication
7aa3dba949f1 smartblur
michael
parents:
diff changeset
62 static void getSubSampleFactors(int *h, int *v, int format){
7aa3dba949f1 smartblur
michael
parents:
diff changeset
63 switch(format){
7aa3dba949f1 smartblur
michael
parents:
diff changeset
64 case IMGFMT_YV12:
7aa3dba949f1 smartblur
michael
parents:
diff changeset
65 case IMGFMT_I420:
7aa3dba949f1 smartblur
michael
parents:
diff changeset
66 *h=1;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
67 *v=1;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
68 break;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
69 case IMGFMT_YVU9:
7aa3dba949f1 smartblur
michael
parents:
diff changeset
70 *h=2;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
71 *v=2;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
72 break;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
73 case IMGFMT_444P:
7aa3dba949f1 smartblur
michael
parents:
diff changeset
74 *h=0;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
75 *v=0;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
76 break;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
77 case IMGFMT_422P:
7aa3dba949f1 smartblur
michael
parents:
diff changeset
78 *h=1;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
79 *v=0;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
80 break;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
81 case IMGFMT_411P:
7aa3dba949f1 smartblur
michael
parents:
diff changeset
82 *h=2;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
83 *v=0;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
84 break;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
85 }
7aa3dba949f1 smartblur
michael
parents:
diff changeset
86 }
7aa3dba949f1 smartblur
michael
parents:
diff changeset
87
7aa3dba949f1 smartblur
michael
parents:
diff changeset
88 static int allocStuff(FilterParam *f, int width, int height){
7aa3dba949f1 smartblur
michael
parents:
diff changeset
89 SwsVector *vec;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
90 SwsFilter swsF;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
91
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 8263
diff changeset
92 vec = sws_getGaussianVec(f->radius, f->quality);
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 8263
diff changeset
93 sws_scaleVec(vec, f->strength);
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
94 vec->coeff[vec->length/2]+= 1.0 - f->strength;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
95 swsF.lumH= swsF.lumV= vec;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
96 swsF.chrH= swsF.chrV= NULL;
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 8263
diff changeset
97 f->filterContext= sws_getContext(
19870
1e5cf11e8b1f Use PIX_FMT_* instead of IMGFMT_* when calling sws_getContext()
lucabe
parents: 18861
diff changeset
98 width, height, PIX_FMT_GRAY8, width, height, PIX_FMT_GRAY8, get_sws_cpuflags(), &swsF, NULL, NULL);
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
99
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 8263
diff changeset
100 sws_freeVec(vec);
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
101
7aa3dba949f1 smartblur
michael
parents:
diff changeset
102 return 0;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
103 }
7aa3dba949f1 smartblur
michael
parents:
diff changeset
104
7aa3dba949f1 smartblur
michael
parents:
diff changeset
105 static int config(struct vf_instance_s* vf,
7aa3dba949f1 smartblur
michael
parents:
diff changeset
106 int width, int height, int d_width, int d_height,
7aa3dba949f1 smartblur
michael
parents:
diff changeset
107 unsigned int flags, unsigned int outfmt){
7aa3dba949f1 smartblur
michael
parents:
diff changeset
108
7aa3dba949f1 smartblur
michael
parents:
diff changeset
109 int sw, sh;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
110
7aa3dba949f1 smartblur
michael
parents:
diff changeset
111 allocStuff(&vf->priv->luma, width, height);
7aa3dba949f1 smartblur
michael
parents:
diff changeset
112
7aa3dba949f1 smartblur
michael
parents:
diff changeset
113 getSubSampleFactors(&sw, &sh, outfmt);
7aa3dba949f1 smartblur
michael
parents:
diff changeset
114 allocStuff(&vf->priv->chroma, width>>sw, height>>sh);
7aa3dba949f1 smartblur
michael
parents:
diff changeset
115
7aa3dba949f1 smartblur
michael
parents:
diff changeset
116 return vf_next_config(vf,width,height,d_width,d_height,flags,outfmt);
7aa3dba949f1 smartblur
michael
parents:
diff changeset
117 }
7aa3dba949f1 smartblur
michael
parents:
diff changeset
118
7aa3dba949f1 smartblur
michael
parents:
diff changeset
119 static void freeBuffers(FilterParam *f){
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 8263
diff changeset
120 if(f->filterContext) sws_freeContext(f->filterContext);
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
121 f->filterContext=NULL;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
122 }
7aa3dba949f1 smartblur
michael
parents:
diff changeset
123
7aa3dba949f1 smartblur
michael
parents:
diff changeset
124 static void uninit(struct vf_instance_s* vf){
7aa3dba949f1 smartblur
michael
parents:
diff changeset
125 if(!vf->priv) return;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
126
7aa3dba949f1 smartblur
michael
parents:
diff changeset
127 freeBuffers(&vf->priv->luma);
7aa3dba949f1 smartblur
michael
parents:
diff changeset
128 freeBuffers(&vf->priv->chroma);
7aa3dba949f1 smartblur
michael
parents:
diff changeset
129
7aa3dba949f1 smartblur
michael
parents:
diff changeset
130 free(vf->priv);
7aa3dba949f1 smartblur
michael
parents:
diff changeset
131 vf->priv=NULL;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
132 }
7aa3dba949f1 smartblur
michael
parents:
diff changeset
133
7aa3dba949f1 smartblur
michael
parents:
diff changeset
134 static inline void blur(uint8_t *dst, uint8_t *src, int w, int h, int dstStride, int srcStride, FilterParam *fp){
7aa3dba949f1 smartblur
michael
parents:
diff changeset
135 int x, y;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
136 FilterParam f= *fp;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
137 uint8_t *srcArray[3]= {src, NULL, NULL};
7aa3dba949f1 smartblur
michael
parents:
diff changeset
138 uint8_t *dstArray[3]= {dst, NULL, NULL};
7aa3dba949f1 smartblur
michael
parents:
diff changeset
139 int srcStrideArray[3]= {srcStride, 0, 0};
7aa3dba949f1 smartblur
michael
parents:
diff changeset
140 int dstStrideArray[3]= {dstStride, 0, 0};
7aa3dba949f1 smartblur
michael
parents:
diff changeset
141
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 8263
diff changeset
142 sws_scale(f.filterContext, srcArray, srcStrideArray, 0, h, dstArray, dstStrideArray);
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
143
7aa3dba949f1 smartblur
michael
parents:
diff changeset
144 if(f.threshold > 0){
7aa3dba949f1 smartblur
michael
parents:
diff changeset
145 for(y=0; y<h; y++){
7aa3dba949f1 smartblur
michael
parents:
diff changeset
146 for(x=0; x<w; x++){
7aa3dba949f1 smartblur
michael
parents:
diff changeset
147 const int orig= src[x + y*srcStride];
7aa3dba949f1 smartblur
michael
parents:
diff changeset
148 const int filtered= dst[x + y*dstStride];
7aa3dba949f1 smartblur
michael
parents:
diff changeset
149 const int diff= orig - filtered;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
150
7aa3dba949f1 smartblur
michael
parents:
diff changeset
151 if(diff > 0){
7aa3dba949f1 smartblur
michael
parents:
diff changeset
152 if(diff > 2*f.threshold){
7aa3dba949f1 smartblur
michael
parents:
diff changeset
153 dst[x + y*dstStride]= orig;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
154 }else if(diff > f.threshold){
7aa3dba949f1 smartblur
michael
parents:
diff changeset
155 dst[x + y*dstStride]= filtered + diff - f.threshold;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
156 }
7aa3dba949f1 smartblur
michael
parents:
diff changeset
157 }else{
7aa3dba949f1 smartblur
michael
parents:
diff changeset
158 if(-diff > 2*f.threshold){
7aa3dba949f1 smartblur
michael
parents:
diff changeset
159 dst[x + y*dstStride]= orig;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
160 }else if(-diff > f.threshold){
7aa3dba949f1 smartblur
michael
parents:
diff changeset
161 dst[x + y*dstStride]= filtered + diff + f.threshold;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
162 }
7aa3dba949f1 smartblur
michael
parents:
diff changeset
163 }
7aa3dba949f1 smartblur
michael
parents:
diff changeset
164 }
7aa3dba949f1 smartblur
michael
parents:
diff changeset
165 }
7aa3dba949f1 smartblur
michael
parents:
diff changeset
166 }else if(f.threshold < 0){
7aa3dba949f1 smartblur
michael
parents:
diff changeset
167 for(y=0; y<h; y++){
7aa3dba949f1 smartblur
michael
parents:
diff changeset
168 for(x=0; x<w; x++){
7aa3dba949f1 smartblur
michael
parents:
diff changeset
169 const int orig= src[x + y*srcStride];
7aa3dba949f1 smartblur
michael
parents:
diff changeset
170 const int filtered= dst[x + y*dstStride];
7aa3dba949f1 smartblur
michael
parents:
diff changeset
171 const int diff= orig - filtered;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
172
7aa3dba949f1 smartblur
michael
parents:
diff changeset
173 if(diff > 0){
7aa3dba949f1 smartblur
michael
parents:
diff changeset
174 if(diff > -2*f.threshold){
7aa3dba949f1 smartblur
michael
parents:
diff changeset
175 }else if(diff > -f.threshold){
7aa3dba949f1 smartblur
michael
parents:
diff changeset
176 dst[x + y*dstStride]= orig - diff - f.threshold;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
177 }else
7aa3dba949f1 smartblur
michael
parents:
diff changeset
178 dst[x + y*dstStride]= orig;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
179 }else{
7aa3dba949f1 smartblur
michael
parents:
diff changeset
180 if(diff < 2*f.threshold){
7aa3dba949f1 smartblur
michael
parents:
diff changeset
181 }else if(diff < f.threshold){
7aa3dba949f1 smartblur
michael
parents:
diff changeset
182 dst[x + y*dstStride]= orig - diff + f.threshold;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
183 }else
7aa3dba949f1 smartblur
michael
parents:
diff changeset
184 dst[x + y*dstStride]= orig;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
185 }
7aa3dba949f1 smartblur
michael
parents:
diff changeset
186 }
7aa3dba949f1 smartblur
michael
parents:
diff changeset
187 }
7aa3dba949f1 smartblur
michael
parents:
diff changeset
188 }
7aa3dba949f1 smartblur
michael
parents:
diff changeset
189 }
7aa3dba949f1 smartblur
michael
parents:
diff changeset
190
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17367
diff changeset
191 static int put_image(struct vf_instance_s* vf, mp_image_t *mpi, double pts){
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
192 int cw= mpi->w >> mpi->chroma_x_shift;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
193 int ch= mpi->h >> mpi->chroma_y_shift;
16154
abe49bc12544 when threshold != 0 the dest image must be readable
reimar
parents: 14542
diff changeset
194 FilterParam *f= &vf->priv;
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
195
7aa3dba949f1 smartblur
michael
parents:
diff changeset
196 mp_image_t *dmpi=vf_get_image(vf->next,mpi->imgfmt,
16154
abe49bc12544 when threshold != 0 the dest image must be readable
reimar
parents: 14542
diff changeset
197 MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE|
abe49bc12544 when threshold != 0 the dest image must be readable
reimar
parents: 14542
diff changeset
198 (f->threshold) ? MP_IMGFLAG_READABLE : 0,
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
199 mpi->w,mpi->h);
7aa3dba949f1 smartblur
michael
parents:
diff changeset
200
7aa3dba949f1 smartblur
michael
parents:
diff changeset
201 assert(mpi->flags&MP_IMGFLAG_PLANAR);
7aa3dba949f1 smartblur
michael
parents:
diff changeset
202
7aa3dba949f1 smartblur
michael
parents:
diff changeset
203 blur(dmpi->planes[0], mpi->planes[0], mpi->w,mpi->h, dmpi->stride[0], mpi->stride[0], &vf->priv->luma);
7aa3dba949f1 smartblur
michael
parents:
diff changeset
204 blur(dmpi->planes[1], mpi->planes[1], cw , ch , dmpi->stride[1], mpi->stride[1], &vf->priv->chroma);
7aa3dba949f1 smartblur
michael
parents:
diff changeset
205 blur(dmpi->planes[2], mpi->planes[2], cw , ch , dmpi->stride[2], mpi->stride[2], &vf->priv->chroma);
7aa3dba949f1 smartblur
michael
parents:
diff changeset
206
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17367
diff changeset
207 return vf_next_put_image(vf,dmpi, pts);
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
208 }
7aa3dba949f1 smartblur
michael
parents:
diff changeset
209
7aa3dba949f1 smartblur
michael
parents:
diff changeset
210 //===========================================================================//
7aa3dba949f1 smartblur
michael
parents:
diff changeset
211
7aa3dba949f1 smartblur
michael
parents:
diff changeset
212 static int query_format(struct vf_instance_s* vf, unsigned int fmt){
7aa3dba949f1 smartblur
michael
parents:
diff changeset
213 switch(fmt)
7aa3dba949f1 smartblur
michael
parents:
diff changeset
214 {
7aa3dba949f1 smartblur
michael
parents:
diff changeset
215 case IMGFMT_YV12:
7aa3dba949f1 smartblur
michael
parents:
diff changeset
216 case IMGFMT_I420:
7aa3dba949f1 smartblur
michael
parents:
diff changeset
217 case IMGFMT_IYUV:
7aa3dba949f1 smartblur
michael
parents:
diff changeset
218 case IMGFMT_YVU9:
7aa3dba949f1 smartblur
michael
parents:
diff changeset
219 case IMGFMT_444P:
7aa3dba949f1 smartblur
michael
parents:
diff changeset
220 case IMGFMT_422P:
7aa3dba949f1 smartblur
michael
parents:
diff changeset
221 case IMGFMT_411P:
7aa3dba949f1 smartblur
michael
parents:
diff changeset
222 return vf_next_query_format(vf, fmt);
7aa3dba949f1 smartblur
michael
parents:
diff changeset
223 }
7aa3dba949f1 smartblur
michael
parents:
diff changeset
224 return 0;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
225 }
7aa3dba949f1 smartblur
michael
parents:
diff changeset
226
7aa3dba949f1 smartblur
michael
parents:
diff changeset
227 static int open(vf_instance_t *vf, char* args){
7aa3dba949f1 smartblur
michael
parents:
diff changeset
228 int e;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
229
7aa3dba949f1 smartblur
michael
parents:
diff changeset
230 vf->config=config;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
231 vf->put_image=put_image;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
232 // vf->get_image=get_image;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
233 vf->query_format=query_format;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
234 vf->uninit=uninit;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
235 vf->priv=malloc(sizeof(struct vf_priv_s));
7aa3dba949f1 smartblur
michael
parents:
diff changeset
236 memset(vf->priv, 0, sizeof(struct vf_priv_s));
7aa3dba949f1 smartblur
michael
parents:
diff changeset
237
7aa3dba949f1 smartblur
michael
parents:
diff changeset
238 if(args==NULL) return 0;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
239
7aa3dba949f1 smartblur
michael
parents:
diff changeset
240 e=sscanf(args, "%f:%f:%d:%f:%f:%d",
7aa3dba949f1 smartblur
michael
parents:
diff changeset
241 &vf->priv->luma.radius,
7aa3dba949f1 smartblur
michael
parents:
diff changeset
242 &vf->priv->luma.strength,
7aa3dba949f1 smartblur
michael
parents:
diff changeset
243 &vf->priv->luma.threshold,
7aa3dba949f1 smartblur
michael
parents:
diff changeset
244 &vf->priv->chroma.radius,
7aa3dba949f1 smartblur
michael
parents:
diff changeset
245 &vf->priv->chroma.strength,
7aa3dba949f1 smartblur
michael
parents:
diff changeset
246 &vf->priv->chroma.threshold
7aa3dba949f1 smartblur
michael
parents:
diff changeset
247 );
7aa3dba949f1 smartblur
michael
parents:
diff changeset
248
7aa3dba949f1 smartblur
michael
parents:
diff changeset
249 vf->priv->luma.quality = vf->priv->chroma.quality= 3.0;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
250
7aa3dba949f1 smartblur
michael
parents:
diff changeset
251 if(e==3){
7aa3dba949f1 smartblur
michael
parents:
diff changeset
252 vf->priv->chroma.radius= vf->priv->luma.radius;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
253 vf->priv->chroma.strength= vf->priv->luma.strength;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
254 vf->priv->chroma.threshold = vf->priv->luma.threshold;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
255 }else if(e!=6)
7aa3dba949f1 smartblur
michael
parents:
diff changeset
256 return 0;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
257
7aa3dba949f1 smartblur
michael
parents:
diff changeset
258 return 1;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
259 }
7aa3dba949f1 smartblur
michael
parents:
diff changeset
260
7aa3dba949f1 smartblur
michael
parents:
diff changeset
261 vf_info_t vf_info_smartblur = {
7aa3dba949f1 smartblur
michael
parents:
diff changeset
262 "smart blur",
7aa3dba949f1 smartblur
michael
parents:
diff changeset
263 "smartblur",
7aa3dba949f1 smartblur
michael
parents:
diff changeset
264 "Michael Niedermayer",
7aa3dba949f1 smartblur
michael
parents:
diff changeset
265 "",
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
266 open,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
267 NULL
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
268 };
7aa3dba949f1 smartblur
michael
parents:
diff changeset
269
7aa3dba949f1 smartblur
michael
parents:
diff changeset
270 //===========================================================================//