annotate libmpcodecs/vf_sab.c @ 26273:8c92e7e4ccd9

command.h: Remove unnecessary includes Remove #include of "mp_core.h" and "input/input.h". Their only use was that functions declared in command.h took pointers to structs defined in those headers. Declare the structs directly as incomplete types instead.
author uau
date Mon, 31 Mar 2008 04:10:54 +0000
parents 1318e956c092
children 82601a38e2a7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8100
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
1 /*
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
2 Copyright (C) 2002 Michael Niedermayer <michaelni@gmx.at>
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
3
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
4 This program is free software; you can redistribute it and/or modify
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
5 it under the terms of the GNU General Public License as published by
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
6 the Free Software Foundation; either version 2 of the License, or
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
7 (at your option) any later version.
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
8
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
9 This program is distributed in the hope that it will be useful,
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
12 GNU General Public License for more details.
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
13
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
14 You should have received a copy of the GNU General Public License
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
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
8100
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
17 */
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
18
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
19 #include <stdio.h>
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
20 #include <stdlib.h>
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
21 #include <string.h>
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
22 #include <inttypes.h>
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
23 #include <assert.h>
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
24
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 13373
diff changeset
25 #include "config.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 13373
diff changeset
26 #include "mp_msg.h"
8100
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
27
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
28 #ifdef HAVE_MALLOC_H
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
29 #include <malloc.h>
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
30 #endif
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
31
26069
1318e956c092 FFmpeg now uses different (unified) #include paths.
diego
parents: 26006
diff changeset
32 #include "libavutil/avutil.h"
8100
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
33 #include "img_format.h"
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
34 #include "mp_image.h"
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
35 #include "vf.h"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents: 17906
diff changeset
36 #include "libswscale/swscale.h"
10233
35f52ad860a0 vf_scale.h & related cleanup & some small warning fix by dominik
michael
parents: 9975
diff changeset
37 #include "vf_scale.h"
8100
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
38
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
39
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
40 //===========================================================================//
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
41
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
42 typedef struct FilterParam{
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
43 float radius;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
44 float preFilterRadius;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
45 float strength;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
46 float quality;
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 8100
diff changeset
47 struct SwsContext *preFilterContext;
8100
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
48 uint8_t *preFilterBuf;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
49 int preFilterStride;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
50 int distWidth;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
51 int distStride;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
52 int *distCoeff;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
53 int colorDiffCoeff[512];
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
54 }FilterParam;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
55
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
56 struct vf_priv_s {
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
57 FilterParam luma;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
58 FilterParam chroma;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
59 };
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
60
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
61
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
62 /***************************************************************************/
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
63
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
64 //FIXME stupid code duplication
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
65 static void getSubSampleFactors(int *h, int *v, int format){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
66 switch(format){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
67 case IMGFMT_YV12:
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
68 case IMGFMT_I420:
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
69 *h=1;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
70 *v=1;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
71 break;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
72 case IMGFMT_YVU9:
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
73 *h=2;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
74 *v=2;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
75 break;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
76 case IMGFMT_444P:
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
77 *h=0;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
78 *v=0;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
79 break;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
80 case IMGFMT_422P:
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
81 *h=1;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
82 *v=0;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
83 break;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
84 case IMGFMT_411P:
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
85 *h=2;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
86 *v=0;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
87 break;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
88 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
89 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
90
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
91 static int allocStuff(FilterParam *f, int width, int height){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
92 int stride= (width+7)&~7;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
93 SwsVector *vec;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
94 SwsFilter swsF;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
95 int i,x,y;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
96 f->preFilterBuf= (uint8_t*)memalign(8, stride*height);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
97 f->preFilterStride= stride;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
98
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 8100
diff changeset
99 vec = sws_getGaussianVec(f->preFilterRadius, f->quality);
8100
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
100 swsF.lumH= swsF.lumV= vec;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
101 swsF.chrH= swsF.chrV= NULL;
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 8100
diff changeset
102 f->preFilterContext= sws_getContext(
19870
1e5cf11e8b1f Use PIX_FMT_* instead of IMGFMT_* when calling sws_getContext()
lucabe
parents: 18861
diff changeset
103 width, height, PIX_FMT_GRAY8, width, height, PIX_FMT_GRAY8, get_sws_cpuflags(), &swsF, NULL, NULL);
8100
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
104
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 8100
diff changeset
105 sws_freeVec(vec);
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 8100
diff changeset
106 vec = sws_getGaussianVec(f->strength, 5.0);
8100
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
107 for(i=0; i<512; i++){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
108 double d;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
109 int index= i-256 + vec->length/2;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
110
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
111 if(index<0 || index>=vec->length) d= 0.0;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
112 else d= vec->coeff[index];
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
113
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
114 f->colorDiffCoeff[i]= (int)(d/vec->coeff[vec->length/2]*(1<<12) + 0.5);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
115 }
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 8100
diff changeset
116 sws_freeVec(vec);
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 8100
diff changeset
117 vec = sws_getGaussianVec(f->radius, f->quality);
8100
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
118 f->distWidth= vec->length;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
119 f->distStride= (vec->length+7)&~7;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
120 f->distCoeff= (int32_t*)memalign(8, f->distWidth*f->distStride*sizeof(int32_t));
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
121
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
122 for(y=0; y<vec->length; y++){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
123 for(x=0; x<vec->length; x++){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
124 double d= vec->coeff[x] * vec->coeff[y];
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
125
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
126 f->distCoeff[x + y*f->distStride]= (int)(d*(1<<10) + 0.5);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
127 // if(y==vec->length/2)
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
128 // printf("%6d ", f->distCoeff[x + y*f->distStride]);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
129 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
130 }
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 8100
diff changeset
131 sws_freeVec(vec);
8100
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
132
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
133 return 0;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
134 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
135
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
136 static int config(struct vf_instance_s* vf,
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
137 int width, int height, int d_width, int d_height,
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
138 unsigned int flags, unsigned int outfmt){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
139
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
140 int sw, sh;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
141 //asm volatile("emms\n\t");
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
142 allocStuff(&vf->priv->luma, width, height);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
143
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
144 getSubSampleFactors(&sw, &sh, outfmt);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
145 allocStuff(&vf->priv->chroma, width>>sw, height>>sh);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
146
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
147 return vf_next_config(vf,width,height,d_width,d_height,flags,outfmt);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
148 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
149
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
150 static void freeBuffers(FilterParam *f){
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 8100
diff changeset
151 if(f->preFilterContext) sws_freeContext(f->preFilterContext);
8100
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
152 f->preFilterContext=NULL;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
153
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
154 if(f->preFilterBuf) free(f->preFilterBuf);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
155 f->preFilterBuf=NULL;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
156
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
157 if(f->distCoeff) free(f->distCoeff);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
158 f->distCoeff=NULL;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
159 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
160
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
161 static void uninit(struct vf_instance_s* vf){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
162 if(!vf->priv) return;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
163
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
164 freeBuffers(&vf->priv->luma);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
165 freeBuffers(&vf->priv->chroma);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
166
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
167 free(vf->priv);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
168 vf->priv=NULL;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
169 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
170
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
171 static inline void blur(uint8_t *dst, uint8_t *src, int w, int h, int dstStride, int srcStride, FilterParam *fp){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
172 int x, y;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
173 FilterParam f= *fp;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
174 const int radius= f.distWidth/2;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
175 uint8_t *srcArray[3]= {src, NULL, NULL};
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
176 uint8_t *dstArray[3]= {f.preFilterBuf, NULL, NULL};
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
177 int srcStrideArray[3]= {srcStride, 0, 0};
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
178 int dstStrideArray[3]= {f.preFilterStride, 0, 0};
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
179
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 8100
diff changeset
180 // f.preFilterContext->swScale(f.preFilterContext, srcArray, srcStrideArray, 0, h, dstArray, dstStrideArray);
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 8100
diff changeset
181 sws_scale(f.preFilterContext, srcArray, srcStrideArray, 0, h, dstArray, dstStrideArray);
8100
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
182
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
183 for(y=0; y<h; y++){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
184 for(x=0; x<w; x++){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
185 int sum=0;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
186 int div=0;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
187 int dy;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
188 const int preVal= f.preFilterBuf[x + y*f.preFilterStride];
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
189 #if 0
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
190 const int srcVal= src[x + y*srcStride];
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
191 if((x/32)&1){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
192 dst[x + y*dstStride]= srcVal;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
193 if(y%32==0) dst[x + y*dstStride]= 0;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
194 continue;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
195 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
196 #endif
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
197 if(x >= radius && x < w - radius){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
198 for(dy=0; dy<radius*2+1; dy++){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
199 int dx;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
200 int iy= y+dy - radius;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
201 if (iy<0) iy= -iy;
26006
ac00f0e343df vf_sab mirrors coefficients past the edge of the picture instead of cropping:
diego
parents: 25221
diff changeset
202 else if(iy>=h) iy= h+h-iy-1;
8100
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
203
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
204 for(dx=0; dx<radius*2+1; dx++){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
205 const int ix= x+dx - radius;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
206 int factor;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
207
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
208 factor= f.colorDiffCoeff[256+preVal - f.preFilterBuf[ix + iy*f.preFilterStride] ]
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
209 *f.distCoeff[dx + dy*f.distStride];
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
210 sum+= src[ix + iy*srcStride] *factor;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
211 div+= factor;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
212 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
213 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
214 }else{
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
215 for(dy=0; dy<radius*2+1; dy++){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
216 int dx;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
217 int iy= y+dy - radius;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
218 if (iy<0) iy= -iy;
26006
ac00f0e343df vf_sab mirrors coefficients past the edge of the picture instead of cropping:
diego
parents: 25221
diff changeset
219 else if(iy>=h) iy= h+h-iy-1;
8100
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
220
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
221 for(dx=0; dx<radius*2+1; dx++){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
222 int ix= x+dx - radius;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
223 int factor;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
224 if (ix<0) ix= -ix;
26006
ac00f0e343df vf_sab mirrors coefficients past the edge of the picture instead of cropping:
diego
parents: 25221
diff changeset
225 else if(ix>=w) ix= w+w-ix-1;
8100
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
226
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
227 factor= f.colorDiffCoeff[256+preVal - f.preFilterBuf[ix + iy*f.preFilterStride] ]
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
228 *f.distCoeff[dx + dy*f.distStride];
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
229 sum+= src[ix + iy*srcStride] *factor;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
230 div+= factor;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
231 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
232 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
233 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
234 dst[x + y*dstStride]= (sum + div/2)/div;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
235 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
236 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
237 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
238
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17367
diff changeset
239 static int put_image(struct vf_instance_s* vf, mp_image_t *mpi, double pts){
8100
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
240 int cw= mpi->w >> mpi->chroma_x_shift;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
241 int ch= mpi->h >> mpi->chroma_y_shift;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
242
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
243 mp_image_t *dmpi=vf_get_image(vf->next,mpi->imgfmt,
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
244 MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE,
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
245 mpi->w,mpi->h);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
246
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
247 assert(mpi->flags&MP_IMGFLAG_PLANAR);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
248
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
249 blur(dmpi->planes[0], mpi->planes[0], mpi->w,mpi->h, dmpi->stride[0], mpi->stride[0], &vf->priv->luma);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
250 blur(dmpi->planes[1], mpi->planes[1], cw , ch , dmpi->stride[1], mpi->stride[1], &vf->priv->chroma);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
251 blur(dmpi->planes[2], mpi->planes[2], cw , ch , dmpi->stride[2], mpi->stride[2], &vf->priv->chroma);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
252
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17367
diff changeset
253 return vf_next_put_image(vf,dmpi, pts);
8100
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
254 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
255
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
256 //===========================================================================//
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
257
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
258 static int query_format(struct vf_instance_s* vf, unsigned int fmt){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
259 switch(fmt)
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
260 {
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
261 case IMGFMT_YV12:
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
262 case IMGFMT_I420:
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
263 case IMGFMT_IYUV:
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
264 case IMGFMT_YVU9:
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
265 case IMGFMT_444P:
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
266 case IMGFMT_422P:
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
267 case IMGFMT_411P:
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
268 return vf_next_query_format(vf, fmt);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
269 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
270 return 0;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
271 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
272
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
273 static int open(vf_instance_t *vf, char* args){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
274 int e;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
275
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
276 vf->config=config;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
277 vf->put_image=put_image;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
278 // vf->get_image=get_image;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
279 vf->query_format=query_format;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
280 vf->uninit=uninit;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
281 vf->priv=malloc(sizeof(struct vf_priv_s));
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
282 memset(vf->priv, 0, sizeof(struct vf_priv_s));
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
283
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
284 if(args==NULL) return 0;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
285
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
286 e=sscanf(args, "%f:%f:%f:%f:%f:%f",
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
287 &vf->priv->luma.radius,
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
288 &vf->priv->luma.preFilterRadius,
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
289 &vf->priv->luma.strength,
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
290 &vf->priv->chroma.radius,
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
291 &vf->priv->chroma.preFilterRadius,
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
292 &vf->priv->chroma.strength
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
293 );
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
294
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
295 vf->priv->luma.quality = vf->priv->chroma.quality= 3.0;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
296
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
297 if(e==3){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
298 vf->priv->chroma.radius= vf->priv->luma.radius;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
299 vf->priv->chroma.preFilterRadius = vf->priv->luma.preFilterRadius;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
300 vf->priv->chroma.strength= vf->priv->luma.strength;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
301 }else if(e!=6)
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
302 return 0;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
303
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
304 // if(vf->priv->luma.radius < 0) return 0;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
305 // if(vf->priv->chroma.radius < 0) return 0;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
306
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
307 return 1;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
308 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
309
25221
00fff9a3b735 Make all vf_info_t structs const
reimar
parents: 23373
diff changeset
310 const vf_info_t vf_info_sab = {
8100
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
311 "shape adaptive blur",
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
312 "sab",
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
313 "Michael Niedermayer",
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
314 "",
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
315 open,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
316 NULL
8100
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
317 };
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
318
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
319 //===========================================================================//