annotate libmpcodecs/vf_sab.c @ 23158:0863ec34d2e6

10l to Diego for breaking svn (again). revert the change from r23172, that breaks compilation vcd_read.h may not be the right incude for the given architecture, but it also contains functions that are nor static nor inlined, defining them multiple times.
author iive
date Mon, 30 Apr 2007 00:45:52 +0000
parents bf1fbe97cc40
children f8d4f8eff72b
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
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
8100
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
37 #include "img_format.h"
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
38 #include "mp_image.h"
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
39 #include "vf.h"
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 13373
diff changeset
40 #include "libvo/fastmemcpy.h"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents: 17906
diff changeset
41 #include "libswscale/swscale.h"
10233
35f52ad860a0 vf_scale.h & related cleanup & some small warning fix by dominik
michael
parents: 9975
diff changeset
42 #include "vf_scale.h"
8100
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
43
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
44
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
45 //===========================================================================//
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
46
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
47 typedef struct FilterParam{
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
48 float radius;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
49 float preFilterRadius;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
50 float strength;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
51 float quality;
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 8100
diff changeset
52 struct SwsContext *preFilterContext;
8100
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
53 uint8_t *preFilterBuf;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
54 int preFilterStride;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
55 int distWidth;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
56 int distStride;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
57 int *distCoeff;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
58 int colorDiffCoeff[512];
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
59 }FilterParam;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
60
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
61 struct vf_priv_s {
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
62 FilterParam luma;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
63 FilterParam chroma;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
64 };
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
65
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
66
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
67 /***************************************************************************/
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
68
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
69 //FIXME stupid code duplication
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
70 static void getSubSampleFactors(int *h, int *v, int format){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
71 switch(format){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
72 case IMGFMT_YV12:
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
73 case IMGFMT_I420:
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
74 *h=1;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
75 *v=1;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
76 break;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
77 case IMGFMT_YVU9:
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
78 *h=2;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
79 *v=2;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
80 break;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
81 case IMGFMT_444P:
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
82 *h=0;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
83 *v=0;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
84 break;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
85 case IMGFMT_422P:
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
86 *h=1;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
87 *v=0;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
88 break;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
89 case IMGFMT_411P:
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
90 *h=2;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
91 *v=0;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
92 break;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
93 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
94 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
95
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
96 static int allocStuff(FilterParam *f, int width, int height){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
97 int stride= (width+7)&~7;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
98 SwsVector *vec;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
99 SwsFilter swsF;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
100 int i,x,y;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
101 f->preFilterBuf= (uint8_t*)memalign(8, stride*height);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
102 f->preFilterStride= stride;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
103
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 8100
diff changeset
104 vec = sws_getGaussianVec(f->preFilterRadius, f->quality);
8100
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
105 swsF.lumH= swsF.lumV= vec;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
106 swsF.chrH= swsF.chrV= NULL;
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 8100
diff changeset
107 f->preFilterContext= sws_getContext(
19870
1e5cf11e8b1f Use PIX_FMT_* instead of IMGFMT_* when calling sws_getContext()
lucabe
parents: 18861
diff changeset
108 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
109
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 8100
diff changeset
110 sws_freeVec(vec);
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 8100
diff changeset
111 vec = sws_getGaussianVec(f->strength, 5.0);
8100
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
112 for(i=0; i<512; i++){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
113 double d;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
114 int index= i-256 + vec->length/2;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
115
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
116 if(index<0 || index>=vec->length) d= 0.0;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
117 else d= vec->coeff[index];
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
118
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
119 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
120 }
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 8100
diff changeset
121 sws_freeVec(vec);
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 8100
diff changeset
122 vec = sws_getGaussianVec(f->radius, f->quality);
8100
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
123 f->distWidth= vec->length;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
124 f->distStride= (vec->length+7)&~7;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
125 f->distCoeff= (int32_t*)memalign(8, f->distWidth*f->distStride*sizeof(int32_t));
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
126
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
127 for(y=0; y<vec->length; y++){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
128 for(x=0; x<vec->length; x++){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
129 double d= vec->coeff[x] * vec->coeff[y];
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
130
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
131 f->distCoeff[x + y*f->distStride]= (int)(d*(1<<10) + 0.5);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
132 // if(y==vec->length/2)
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
133 // printf("%6d ", f->distCoeff[x + y*f->distStride]);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
134 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
135 }
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 8100
diff changeset
136 sws_freeVec(vec);
8100
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
137
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
138 return 0;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
139 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
140
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
141 static int config(struct vf_instance_s* vf,
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
142 int width, int height, int d_width, int d_height,
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
143 unsigned int flags, unsigned int outfmt){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
144
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
145 int sw, sh;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
146 //asm volatile("emms\n\t");
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
147 allocStuff(&vf->priv->luma, width, height);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
148
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
149 getSubSampleFactors(&sw, &sh, outfmt);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
150 allocStuff(&vf->priv->chroma, width>>sw, height>>sh);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
151
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
152 return vf_next_config(vf,width,height,d_width,d_height,flags,outfmt);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
153 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
154
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
155 static void freeBuffers(FilterParam *f){
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 8100
diff changeset
156 if(f->preFilterContext) sws_freeContext(f->preFilterContext);
8100
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
157 f->preFilterContext=NULL;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
158
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
159 if(f->preFilterBuf) free(f->preFilterBuf);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
160 f->preFilterBuf=NULL;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
161
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
162 if(f->distCoeff) free(f->distCoeff);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
163 f->distCoeff=NULL;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
164 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
165
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
166 static void uninit(struct vf_instance_s* vf){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
167 if(!vf->priv) return;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
168
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
169 freeBuffers(&vf->priv->luma);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
170 freeBuffers(&vf->priv->chroma);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
171
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
172 free(vf->priv);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
173 vf->priv=NULL;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
174 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
175
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
176 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
177 int x, y;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
178 FilterParam f= *fp;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
179 const int radius= f.distWidth/2;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
180 uint8_t *srcArray[3]= {src, NULL, NULL};
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
181 uint8_t *dstArray[3]= {f.preFilterBuf, NULL, NULL};
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
182 int srcStrideArray[3]= {srcStride, 0, 0};
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
183 int dstStrideArray[3]= {f.preFilterStride, 0, 0};
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
184
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 8100
diff changeset
185 // 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
186 sws_scale(f.preFilterContext, srcArray, srcStrideArray, 0, h, dstArray, dstStrideArray);
8100
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
187
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
188 for(y=0; y<h; y++){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
189 for(x=0; x<w; x++){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
190 int sum=0;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
191 int div=0;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
192 int dy;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
193 const int preVal= f.preFilterBuf[x + y*f.preFilterStride];
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
194 #if 0
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
195 const int srcVal= src[x + y*srcStride];
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
196 if((x/32)&1){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
197 dst[x + y*dstStride]= srcVal;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
198 if(y%32==0) dst[x + y*dstStride]= 0;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
199 continue;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
200 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
201 #endif
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
202 if(x >= radius && x < w - radius){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
203 for(dy=0; dy<radius*2+1; dy++){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
204 int dx;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
205 int iy= y+dy - radius;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
206 if (iy<0) iy= -iy;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
207 else if(iy>=h) iy= h-iy-1;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
208
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
209 for(dx=0; dx<radius*2+1; dx++){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
210 const int ix= x+dx - radius;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
211 int 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 factor= f.colorDiffCoeff[256+preVal - f.preFilterBuf[ix + iy*f.preFilterStride] ]
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
214 *f.distCoeff[dx + dy*f.distStride];
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
215 sum+= src[ix + iy*srcStride] *factor;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
216 div+= factor;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
217 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
218 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
219 }else{
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
220 for(dy=0; dy<radius*2+1; dy++){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
221 int dx;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
222 int iy= y+dy - radius;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
223 if (iy<0) iy= -iy;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
224 else if(iy>=h) iy= h-iy-1;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
225
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
226 for(dx=0; dx<radius*2+1; dx++){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
227 int ix= x+dx - radius;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
228 int factor;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
229 if (ix<0) ix= -ix;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
230 else if(ix>=w) ix= w-ix-1;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
231
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
232 factor= f.colorDiffCoeff[256+preVal - f.preFilterBuf[ix + iy*f.preFilterStride] ]
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
233 *f.distCoeff[dx + dy*f.distStride];
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
234 sum+= src[ix + iy*srcStride] *factor;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
235 div+= factor;
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 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
239 dst[x + y*dstStride]= (sum + div/2)/div;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
240 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
241 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
242 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
243
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17367
diff changeset
244 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
245 int cw= mpi->w >> mpi->chroma_x_shift;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
246 int ch= mpi->h >> mpi->chroma_y_shift;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
247
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
248 mp_image_t *dmpi=vf_get_image(vf->next,mpi->imgfmt,
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
249 MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE,
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
250 mpi->w,mpi->h);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
251
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
252 assert(mpi->flags&MP_IMGFLAG_PLANAR);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
253
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
254 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
255 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
256 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
257
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17367
diff changeset
258 return vf_next_put_image(vf,dmpi, pts);
8100
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
259 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
260
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
261 //===========================================================================//
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
262
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
263 static int query_format(struct vf_instance_s* vf, unsigned int fmt){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
264 switch(fmt)
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
265 {
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
266 case IMGFMT_YV12:
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
267 case IMGFMT_I420:
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
268 case IMGFMT_IYUV:
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
269 case IMGFMT_YVU9:
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
270 case IMGFMT_444P:
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
271 case IMGFMT_422P:
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
272 case IMGFMT_411P:
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
273 return vf_next_query_format(vf, fmt);
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
274 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
275 return 0;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
276 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
277
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
278 static int open(vf_instance_t *vf, char* args){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
279 int e;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
280
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
281 vf->config=config;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
282 vf->put_image=put_image;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
283 // vf->get_image=get_image;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
284 vf->query_format=query_format;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
285 vf->uninit=uninit;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
286 vf->priv=malloc(sizeof(struct vf_priv_s));
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
287 memset(vf->priv, 0, sizeof(struct vf_priv_s));
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
288
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
289 if(args==NULL) return 0;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
290
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
291 e=sscanf(args, "%f:%f:%f:%f:%f:%f",
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
292 &vf->priv->luma.radius,
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
293 &vf->priv->luma.preFilterRadius,
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
294 &vf->priv->luma.strength,
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
295 &vf->priv->chroma.radius,
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
296 &vf->priv->chroma.preFilterRadius,
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
297 &vf->priv->chroma.strength
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
298 );
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
299
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
300 vf->priv->luma.quality = vf->priv->chroma.quality= 3.0;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
301
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
302 if(e==3){
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
303 vf->priv->chroma.radius= vf->priv->luma.radius;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
304 vf->priv->chroma.preFilterRadius = vf->priv->luma.preFilterRadius;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
305 vf->priv->chroma.strength= vf->priv->luma.strength;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
306 }else if(e!=6)
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
307 return 0;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
308
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
309 // if(vf->priv->luma.radius < 0) return 0;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
310 // if(vf->priv->chroma.radius < 0) return 0;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
311
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
312 return 1;
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
313 }
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
314
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
315 vf_info_t vf_info_sab = {
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
316 "shape adaptive blur",
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
317 "sab",
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
318 "Michael Niedermayer",
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
319 "",
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
320 open,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
321 NULL
8100
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
322 };
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
323
fd0da9a7d2e3 shape adaptive blur (slightly slow though)
michael
parents:
diff changeset
324 //===========================================================================//