annotate libmpcodecs/vf_smartblur.c @ 33771:6e774a02d00c

Remove gtkClearStruct code from mplayer() in interface.c. Move it as static function guiInfoMediumClear() where it is used and rename the symbolic constants used with this code.
author ib
date Sat, 09 Jul 2011 11:48:13 +0000
parents 53073a44a899
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
1 /*
26727
82601a38e2a7 Use standard license headers.
diego
parents: 26069
diff changeset
2 * Copyright (C) 2002 Michael Niedermayer <michaelni@gmx.at>
82601a38e2a7 Use standard license headers.
diego
parents: 26069
diff changeset
3 *
82601a38e2a7 Use standard license headers.
diego
parents: 26069
diff changeset
4 * This file is part of MPlayer.
82601a38e2a7 Use standard license headers.
diego
parents: 26069
diff changeset
5 *
82601a38e2a7 Use standard license headers.
diego
parents: 26069
diff changeset
6 * MPlayer is free software; you can redistribute it and/or modify
82601a38e2a7 Use standard license headers.
diego
parents: 26069
diff changeset
7 * it under the terms of the GNU General Public License as published by
82601a38e2a7 Use standard license headers.
diego
parents: 26069
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
82601a38e2a7 Use standard license headers.
diego
parents: 26069
diff changeset
9 * (at your option) any later version.
82601a38e2a7 Use standard license headers.
diego
parents: 26069
diff changeset
10 *
82601a38e2a7 Use standard license headers.
diego
parents: 26069
diff changeset
11 * MPlayer is distributed in the hope that it will be useful,
82601a38e2a7 Use standard license headers.
diego
parents: 26069
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
82601a38e2a7 Use standard license headers.
diego
parents: 26069
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
82601a38e2a7 Use standard license headers.
diego
parents: 26069
diff changeset
14 * GNU General Public License for more details.
82601a38e2a7 Use standard license headers.
diego
parents: 26069
diff changeset
15 *
82601a38e2a7 Use standard license headers.
diego
parents: 26069
diff changeset
16 * You should have received a copy of the GNU General Public License along
82601a38e2a7 Use standard license headers.
diego
parents: 26069
diff changeset
17 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
82601a38e2a7 Use standard license headers.
diego
parents: 26069
diff changeset
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
82601a38e2a7 Use standard license headers.
diego
parents: 26069
diff changeset
19 */
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
20
7aa3dba949f1 smartblur
michael
parents:
diff changeset
21 #include <stdio.h>
7aa3dba949f1 smartblur
michael
parents:
diff changeset
22 #include <stdlib.h>
7aa3dba949f1 smartblur
michael
parents:
diff changeset
23 #include <string.h>
7aa3dba949f1 smartblur
michael
parents:
diff changeset
24 #include <inttypes.h>
7aa3dba949f1 smartblur
michael
parents:
diff changeset
25 #include <assert.h>
7aa3dba949f1 smartblur
michael
parents:
diff changeset
26
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16154
diff changeset
27 #include "mp_msg.h"
26069
1318e956c092 FFmpeg now uses different (unified) #include paths.
diego
parents: 25221
diff changeset
28 #include "libavutil/avutil.h"
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
29 #include "img_format.h"
7aa3dba949f1 smartblur
michael
parents:
diff changeset
30 #include "mp_image.h"
7aa3dba949f1 smartblur
michael
parents:
diff changeset
31 #include "vf.h"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents: 17906
diff changeset
32 #include "libswscale/swscale.h"
10233
35f52ad860a0 vf_scale.h & related cleanup & some small warning fix by dominik
michael
parents: 9975
diff changeset
33 #include "vf_scale.h"
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
34
7aa3dba949f1 smartblur
michael
parents:
diff changeset
35 //===========================================================================//
7aa3dba949f1 smartblur
michael
parents:
diff changeset
36
7aa3dba949f1 smartblur
michael
parents:
diff changeset
37 typedef struct FilterParam{
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
38 float radius;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
39 float strength;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
40 int threshold;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
41 float quality;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
42 struct SwsContext *filterContext;
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
43 }FilterParam;
7aa3dba949f1 smartblur
michael
parents:
diff changeset
44
7aa3dba949f1 smartblur
michael
parents:
diff changeset
45 struct vf_priv_s {
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
46 FilterParam luma;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
47 FilterParam chroma;
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
48 };
7aa3dba949f1 smartblur
michael
parents:
diff changeset
49
7aa3dba949f1 smartblur
michael
parents:
diff changeset
50
7aa3dba949f1 smartblur
michael
parents:
diff changeset
51 /***************************************************************************/
7aa3dba949f1 smartblur
michael
parents:
diff changeset
52
7aa3dba949f1 smartblur
michael
parents:
diff changeset
53 //FIXME stupid code duplication
7aa3dba949f1 smartblur
michael
parents:
diff changeset
54 static void getSubSampleFactors(int *h, int *v, int format){
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
55 switch(format){
33332
8b0d95785db2 Avoid "'sh' may be used uninitialized in this function" warning.
reimar
parents: 33311
diff changeset
56 default:
8b0d95785db2 Avoid "'sh' may be used uninitialized in this function" warning.
reimar
parents: 33311
diff changeset
57 assert(0);
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
58 case IMGFMT_YV12:
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
59 case IMGFMT_I420:
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
60 *h=1;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
61 *v=1;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
62 break;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
63 case IMGFMT_YVU9:
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
64 *h=2;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
65 *v=2;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
66 break;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
67 case IMGFMT_444P:
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
68 *h=0;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
69 *v=0;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
70 break;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
71 case IMGFMT_422P:
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
72 *h=1;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
73 *v=0;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
74 break;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
75 case IMGFMT_411P:
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
76 *h=2;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
77 *v=0;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
78 break;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
79 }
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
80 }
7aa3dba949f1 smartblur
michael
parents:
diff changeset
81
7aa3dba949f1 smartblur
michael
parents:
diff changeset
82 static int allocStuff(FilterParam *f, int width, int height){
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
83 SwsVector *vec;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
84 SwsFilter swsF;
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
85
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
86 vec = sws_getGaussianVec(f->radius, f->quality);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
87 sws_scaleVec(vec, f->strength);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
88 vec->coeff[vec->length/2]+= 1.0 - f->strength;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
89 swsF.lumH= swsF.lumV= vec;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
90 swsF.chrH= swsF.chrV= NULL;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
91 f->filterContext= sws_getContext(
33415
53073a44a899 Fix build after removal of SWS_CPU_CAPS_* from libswscale in FFmpeg.
iive
parents: 33332
diff changeset
92 width, height, PIX_FMT_GRAY8, width, height, PIX_FMT_GRAY8, SWS_BICUBIC, &swsF, NULL, NULL);
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
93
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
94 sws_freeVec(vec);
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
95
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
96 return 0;
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
97 }
7aa3dba949f1 smartblur
michael
parents:
diff changeset
98
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
99 static int config(struct vf_instance *vf,
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
100 int width, int height, int d_width, int d_height,
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
101 unsigned int flags, unsigned int outfmt){
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
102
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
103 int sw, sh;
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
104
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
105 allocStuff(&vf->priv->luma, width, height);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
106
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
107 getSubSampleFactors(&sw, &sh, outfmt);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
108 allocStuff(&vf->priv->chroma, width>>sw, height>>sh);
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
109
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
110 return vf_next_config(vf,width,height,d_width,d_height,flags,outfmt);
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
111 }
7aa3dba949f1 smartblur
michael
parents:
diff changeset
112
7aa3dba949f1 smartblur
michael
parents:
diff changeset
113 static void freeBuffers(FilterParam *f){
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
114 if(f->filterContext) sws_freeContext(f->filterContext);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
115 f->filterContext=NULL;
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
116 }
7aa3dba949f1 smartblur
michael
parents:
diff changeset
117
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
118 static void uninit(struct vf_instance *vf){
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
119 if(!vf->priv) return;
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
120
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
121 freeBuffers(&vf->priv->luma);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
122 freeBuffers(&vf->priv->chroma);
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
123
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
124 free(vf->priv);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
125 vf->priv=NULL;
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
126 }
7aa3dba949f1 smartblur
michael
parents:
diff changeset
127
7aa3dba949f1 smartblur
michael
parents:
diff changeset
128 static inline void blur(uint8_t *dst, uint8_t *src, int w, int h, int dstStride, int srcStride, FilterParam *fp){
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
129 int x, y;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
130 FilterParam f= *fp;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
131 const uint8_t* const srcArray[MP_MAX_PLANES] = {src};
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
132 uint8_t *dstArray[MP_MAX_PLANES]= {dst};
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
133 int srcStrideArray[MP_MAX_PLANES]= {srcStride};
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
134 int dstStrideArray[MP_MAX_PLANES]= {dstStride};
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
135
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
136 sws_scale(f.filterContext, srcArray, srcStrideArray, 0, h, dstArray, dstStrideArray);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
137
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
138 if(f.threshold > 0){
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
139 for(y=0; y<h; y++){
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
140 for(x=0; x<w; x++){
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
141 const int orig= src[x + y*srcStride];
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
142 const int filtered= dst[x + y*dstStride];
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
143 const int diff= orig - filtered;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
144
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
145 if(diff > 0){
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
146 if(diff > 2*f.threshold){
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
147 dst[x + y*dstStride]= orig;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
148 }else if(diff > f.threshold){
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
149 dst[x + y*dstStride]= filtered + diff - f.threshold;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
150 }
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
151 }else{
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
152 if(-diff > 2*f.threshold){
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
153 dst[x + y*dstStride]= orig;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
154 }else if(-diff > f.threshold){
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
155 dst[x + y*dstStride]= filtered + diff + f.threshold;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
156 }
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
157 }
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
158 }
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
159 }
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
160 }else if(f.threshold < 0){
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
161 for(y=0; y<h; y++){
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
162 for(x=0; x<w; x++){
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
163 const int orig= src[x + y*srcStride];
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
164 const int filtered= dst[x + y*dstStride];
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
165 const int diff= orig - filtered;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
166
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
167 if(diff > 0){
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
168 if(diff > -2*f.threshold){
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
169 }else if(diff > -f.threshold){
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
170 dst[x + y*dstStride]= orig - diff - f.threshold;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
171 }else
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
172 dst[x + y*dstStride]= orig;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
173 }else{
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
174 if(diff < 2*f.threshold){
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
175 }else if(diff < f.threshold){
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
176 dst[x + y*dstStride]= orig - diff + f.threshold;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
177 }else
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
178 dst[x + y*dstStride]= orig;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
179 }
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
180 }
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
181 }
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
182 }
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
183 }
7aa3dba949f1 smartblur
michael
parents:
diff changeset
184
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
185 static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts){
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
186 int cw= mpi->w >> mpi->chroma_x_shift;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
187 int ch= mpi->h >> mpi->chroma_y_shift;
33311
00ab9ef28181 vf_smartblur: fix threshold condition.
cboesch
parents: 32702
diff changeset
188 int threshold = vf->priv->luma.threshold || vf->priv->chroma.threshold;
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
189
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
190 mp_image_t *dmpi=vf_get_image(vf->next,mpi->imgfmt,
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
191 MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE|
33311
00ab9ef28181 vf_smartblur: fix threshold condition.
cboesch
parents: 32702
diff changeset
192 (threshold ? MP_IMGFLAG_READABLE : 0),
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
193 mpi->w,mpi->h);
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
194
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
195 assert(mpi->flags&MP_IMGFLAG_PLANAR);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
196
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
197 blur(dmpi->planes[0], mpi->planes[0], mpi->w,mpi->h, dmpi->stride[0], mpi->stride[0], &vf->priv->luma);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
198 blur(dmpi->planes[1], mpi->planes[1], cw , ch , dmpi->stride[1], mpi->stride[1], &vf->priv->chroma);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
199 blur(dmpi->planes[2], mpi->planes[2], cw , ch , dmpi->stride[2], mpi->stride[2], &vf->priv->chroma);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
200
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
201 return vf_next_put_image(vf,dmpi, pts);
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
202 }
7aa3dba949f1 smartblur
michael
parents:
diff changeset
203
7aa3dba949f1 smartblur
michael
parents:
diff changeset
204 //===========================================================================//
7aa3dba949f1 smartblur
michael
parents:
diff changeset
205
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
206 static int query_format(struct vf_instance *vf, unsigned int fmt){
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
207 switch(fmt)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
208 {
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
209 case IMGFMT_YV12:
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
210 case IMGFMT_I420:
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
211 case IMGFMT_IYUV:
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
212 case IMGFMT_YVU9:
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
213 case IMGFMT_444P:
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
214 case IMGFMT_422P:
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
215 case IMGFMT_411P:
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
216 return vf_next_query_format(vf, fmt);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
217 }
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
218 return 0;
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
219 }
7aa3dba949f1 smartblur
michael
parents:
diff changeset
220
30638
a7b908875c14 Rename open() vf initialization function to vf_open().
diego
parents: 29263
diff changeset
221 static int vf_open(vf_instance_t *vf, char *args){
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
222 int e;
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
223
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
224 vf->config=config;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
225 vf->put_image=put_image;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
226 // vf->get_image=get_image;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
227 vf->query_format=query_format;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
228 vf->uninit=uninit;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
229 vf->priv=malloc(sizeof(struct vf_priv_s));
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
230 memset(vf->priv, 0, sizeof(struct vf_priv_s));
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
231
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
232 if(args==NULL) return 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
233
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
234 e=sscanf(args, "%f:%f:%d:%f:%f:%d",
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
235 &vf->priv->luma.radius,
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
236 &vf->priv->luma.strength,
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
237 &vf->priv->luma.threshold,
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
238 &vf->priv->chroma.radius,
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
239 &vf->priv->chroma.strength,
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
240 &vf->priv->chroma.threshold
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
241 );
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
242
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
243 vf->priv->luma.quality = vf->priv->chroma.quality= 3.0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
244
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
245 if(e==3){
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
246 vf->priv->chroma.radius= vf->priv->luma.radius;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
247 vf->priv->chroma.strength= vf->priv->luma.strength;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
248 vf->priv->chroma.threshold = vf->priv->luma.threshold;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
249 }else if(e!=6)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
250 return 0;
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
251
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32136
diff changeset
252 return 1;
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
253 }
7aa3dba949f1 smartblur
michael
parents:
diff changeset
254
25221
00fff9a3b735 Make all vf_info_t structs const
reimar
parents: 23373
diff changeset
255 const vf_info_t vf_info_smartblur = {
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
256 "smart blur",
7aa3dba949f1 smartblur
michael
parents:
diff changeset
257 "smartblur",
7aa3dba949f1 smartblur
michael
parents:
diff changeset
258 "Michael Niedermayer",
7aa3dba949f1 smartblur
michael
parents:
diff changeset
259 "",
30638
a7b908875c14 Rename open() vf initialization function to vf_open().
diego
parents: 29263
diff changeset
260 vf_open,
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
261 NULL
8106
7aa3dba949f1 smartblur
michael
parents:
diff changeset
262 };
7aa3dba949f1 smartblur
michael
parents:
diff changeset
263
7aa3dba949f1 smartblur
michael
parents:
diff changeset
264 //===========================================================================//