annotate libmpcodecs/vf_eq.c @ 11007:48b7d7aa444d

configure altivec patch by Magnus Damm <damm@opensource.se> * CC is not checked for Altivec support (see above). The patch adds checks for FSF-style flags and Darwin-style flags. The check is performed regardless of the gcc version. * Disabling of Altivec. --disable-altivec is broken today if /proc/cpuinfo shows that your cpu supports altivec. The patch takes care of that. * "GCC & CPU optimization abilities" always show that it is optimizing for the cpu configure is running on, it should show the optimization that is enabled for gcc instead. Cosmetic change only, but confusing as it is today IMHO. * Runtime CPU-detection now enables altivec for powerpc. Now with the patch it should be possible to use --enable-altivec, --disable-altivec, --enable-runtime-cpudetection regardless of powerpc cpu type. The configure script handles altivec support in the following order: 1. Altivec is enabled by default if your cpu supports it. 2. --enable-runtime-cpudetection will enable altivec support. 3. If you have forced altivec on/off with --enable-altivec/--disable-altivec, then your selection will override the previous altivec configuration. 4. If altivec is enabled but the compiler doesn't support it, altivec gets turned off.
author attila
date Sat, 04 Oct 2003 23:06:04 +0000
parents 77bddc6d9266
children 821f464b4d90
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7062
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
1 #include <stdio.h>
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
2 #include <stdlib.h>
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
3 #include <string.h>
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
4 #include <inttypes.h>
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
5
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
6 #include "../config.h"
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
7 #include "../mp_msg.h"
7065
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
8 #include "../cpudetect.h"
7062
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
9
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
10 #include "img_format.h"
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
11 #include "mp_image.h"
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
12 #include "vf.h"
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
13
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
14 #include "../libvo/video_out.h"
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
15 #include "../libvo/fastmemcpy.h"
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
16 #include "../postproc/rgb2rgb.h"
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
17
9599
77bddc6d9266 Support for the new options stuff
albeu
parents: 9593
diff changeset
18 #include "m_option.h"
77bddc6d9266 Support for the new options stuff
albeu
parents: 9593
diff changeset
19 #include "m_struct.h"
77bddc6d9266 Support for the new options stuff
albeu
parents: 9593
diff changeset
20
77bddc6d9266 Support for the new options stuff
albeu
parents: 9593
diff changeset
21 static struct vf_priv_s {
7062
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
22 unsigned char *buf;
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
23 int brightness;
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
24 int contrast;
9599
77bddc6d9266 Support for the new options stuff
albeu
parents: 9593
diff changeset
25 } vf_priv_dflt = {
77bddc6d9266 Support for the new options stuff
albeu
parents: 9593
diff changeset
26 NULL,
77bddc6d9266 Support for the new options stuff
albeu
parents: 9593
diff changeset
27 0,
77bddc6d9266 Support for the new options stuff
albeu
parents: 9593
diff changeset
28 0
7062
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
29 };
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
30
7065
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
31 #ifdef HAVE_MMX
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
32 static void process_MMX(unsigned char *dest, int dstride, unsigned char *src, int sstride,
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
33 int w, int h, int brightness, int contrast)
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
34 {
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
35 int i;
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
36 int pel;
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
37 int dstep = dstride-w;
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
38 int sstep = sstride-w;
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
39 short brvec[4];
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
40 short contvec[4];
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
41
7078
ba46984544bb optimization
michael
parents: 7065
diff changeset
42 contrast = ((contrast+100)*256*16)/100;
ba46984544bb optimization
michael
parents: 7065
diff changeset
43 brightness = ((brightness+100)*511)/200-128 - contrast/32;
7065
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
44
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
45 brvec[0] = brvec[1] = brvec[2] = brvec[3] = brightness;
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
46 contvec[0] = contvec[1] = contvec[2] = contvec[3] = contrast;
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
47
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
48 while (h--) {
7078
ba46984544bb optimization
michael
parents: 7065
diff changeset
49 asm volatile (
7065
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
50 "movq (%5), %%mm3 \n\t"
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
51 "movq (%6), %%mm4 \n\t"
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
52 "pxor %%mm0, %%mm0 \n\t"
7078
ba46984544bb optimization
michael
parents: 7065
diff changeset
53 "movl %4, %%eax\n\t"
7107
ebc1cd8014a5 align -> balign patch by (Bj«Órn Sandell <biorn at dce dot chalmers dot se>)
michael
parents: 7078
diff changeset
54 ".balign 16 \n\t"
7065
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
55 "1: \n\t"
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
56 "movq (%0), %%mm1 \n\t"
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
57 "movq (%0), %%mm2 \n\t"
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
58 "punpcklbw %%mm0, %%mm1 \n\t"
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
59 "punpckhbw %%mm0, %%mm2 \n\t"
7078
ba46984544bb optimization
michael
parents: 7065
diff changeset
60 "psllw $4, %%mm1 \n\t"
ba46984544bb optimization
michael
parents: 7065
diff changeset
61 "psllw $4, %%mm2 \n\t"
ba46984544bb optimization
michael
parents: 7065
diff changeset
62 "pmulhw %%mm4, %%mm1 \n\t"
ba46984544bb optimization
michael
parents: 7065
diff changeset
63 "pmulhw %%mm4, %%mm2 \n\t"
ba46984544bb optimization
michael
parents: 7065
diff changeset
64 "paddw %%mm3, %%mm1 \n\t"
ba46984544bb optimization
michael
parents: 7065
diff changeset
65 "paddw %%mm3, %%mm2 \n\t"
7065
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
66 "packuswb %%mm2, %%mm1 \n\t"
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
67 "addl $8, %0 \n\t"
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
68 "movq %%mm1, (%1) \n\t"
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
69 "addl $8, %1 \n\t"
7078
ba46984544bb optimization
michael
parents: 7065
diff changeset
70 "decl %%eax \n\t"
7065
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
71 "jnz 1b \n\t"
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
72 : "=r" (src), "=r" (dest)
7078
ba46984544bb optimization
michael
parents: 7065
diff changeset
73 : "0" (src), "1" (dest), "r" (w>>3), "r" (brvec), "r" (contvec)
ba46984544bb optimization
michael
parents: 7065
diff changeset
74 : "%eax"
7065
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
75 );
7078
ba46984544bb optimization
michael
parents: 7065
diff changeset
76
7065
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
77 for (i = w&7; i; i--)
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
78 {
7078
ba46984544bb optimization
michael
parents: 7065
diff changeset
79 pel = ((*src++* contrast)>>12) + brightness;
ba46984544bb optimization
michael
parents: 7065
diff changeset
80 if(pel&768) pel = (-pel)>>31;
ba46984544bb optimization
michael
parents: 7065
diff changeset
81 *dest++ = pel;
7065
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
82 }
7078
ba46984544bb optimization
michael
parents: 7065
diff changeset
83
7065
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
84 src += sstep;
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
85 dest += dstep;
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
86 }
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
87 asm volatile ( "emms \n\t" ::: "memory" );
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
88 }
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
89 #endif
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
90
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
91 static void process_C(unsigned char *dest, int dstride, unsigned char *src, int sstride,
7062
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
92 int w, int h, int brightness, int contrast)
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
93 {
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
94 int i;
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
95 int pel;
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
96 int dstep = dstride-w;
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
97 int sstep = sstride-w;
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
98
7078
ba46984544bb optimization
michael
parents: 7065
diff changeset
99 contrast = ((contrast+100)*256*256)/100;
ba46984544bb optimization
michael
parents: 7065
diff changeset
100 brightness = ((brightness+100)*511)/200-128 - contrast/512;
7062
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
101
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
102 while (h--) {
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
103 for (i = w; i; i--)
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
104 {
7078
ba46984544bb optimization
michael
parents: 7065
diff changeset
105 pel = ((*src++* contrast)>>16) + brightness;
ba46984544bb optimization
michael
parents: 7065
diff changeset
106 if(pel&768) pel = (-pel)>>31;
ba46984544bb optimization
michael
parents: 7065
diff changeset
107 *dest++ = pel;
7062
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
108 }
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
109 src += sstep;
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
110 dest += dstep;
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
111 }
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
112 }
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
113
7065
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
114 static void (*process)(unsigned char *dest, int dstride, unsigned char *src, int sstride,
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
115 int w, int h, int brightness, int contrast);
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
116
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
117 /* FIXME: add packed yuv version of process */
7062
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
118
7368
a894e99c1e51 changing return type of put_image void->int
arpi
parents: 7107
diff changeset
119 static int put_image(struct vf_instance_s* vf, mp_image_t *mpi)
7062
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
120 {
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
121 mp_image_t *dmpi;
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
122
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
123 dmpi=vf_get_image(vf->next, mpi->imgfmt,
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
124 MP_IMGTYPE_EXPORT, 0,
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
125 mpi->w, mpi->h);
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
126
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
127 dmpi->stride[0] = mpi->stride[0];
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
128 dmpi->planes[1] = mpi->planes[1];
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
129 dmpi->planes[2] = mpi->planes[2];
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
130 dmpi->stride[1] = mpi->stride[1];
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
131 dmpi->stride[2] = mpi->stride[2];
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
132
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
133 if (!vf->priv->buf) vf->priv->buf = malloc(mpi->stride[0]*mpi->h);
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
134
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
135 if ((vf->priv->brightness == 0) && (vf->priv->contrast == 0))
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
136 dmpi->planes[0] = mpi->planes[0];
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
137 else {
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
138 dmpi->planes[0] = vf->priv->buf;
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
139 process(dmpi->planes[0], dmpi->stride[0],
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
140 mpi->planes[0], mpi->stride[0],
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
141 mpi->w, mpi->h, vf->priv->brightness,
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
142 vf->priv->contrast);
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
143 }
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
144
7368
a894e99c1e51 changing return type of put_image void->int
arpi
parents: 7107
diff changeset
145 return vf_next_put_image(vf,dmpi);
7062
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
146 }
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
147
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
148 static int control(struct vf_instance_s* vf, int request, void* data)
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
149 {
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
150 vf_equalizer_t *eq;
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
151
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
152 switch (request) {
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
153 case VFCTRL_SET_EQUALIZER:
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
154 eq = data;
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
155 if (!strcmp(eq->item,"brightness")) {
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
156 vf->priv->brightness = eq->value;
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
157 return CONTROL_TRUE;
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
158 }
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
159 else if (!strcmp(eq->item,"contrast")) {
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
160 vf->priv->contrast = eq->value;
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
161 return CONTROL_TRUE;
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
162 }
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
163 break;
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
164 case VFCTRL_GET_EQUALIZER:
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
165 eq = data;
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
166 if (!strcmp(eq->item,"brightness")) {
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
167 eq->value = vf->priv->brightness;
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
168 return CONTROL_TRUE;
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
169 }
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
170 else if (!strcmp(eq->item,"contrast")) {
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
171 eq->value = vf->priv->contrast;
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
172 return CONTROL_TRUE;
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
173 }
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
174 break;
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
175 }
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
176 return vf_next_control(vf, request, data);
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
177 }
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
178
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
179 static int query_format(struct vf_instance_s* vf, unsigned int fmt)
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
180 {
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
181 switch (fmt) {
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
182 case IMGFMT_YVU9:
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
183 case IMGFMT_IF09:
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
184 case IMGFMT_YV12:
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
185 case IMGFMT_I420:
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
186 case IMGFMT_IYUV:
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
187 case IMGFMT_CLPL:
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
188 case IMGFMT_Y800:
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
189 case IMGFMT_Y8:
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
190 case IMGFMT_NV12:
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
191 case IMGFMT_444P:
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
192 case IMGFMT_422P:
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
193 case IMGFMT_411P:
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
194 return vf_next_query_format(vf, fmt);
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
195 }
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
196 return 0;
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
197 }
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
198
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
199 static void uninit(struct vf_instance_s* vf)
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
200 {
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
201 if (vf->priv->buf) free(vf->priv->buf);
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
202 free(vf->priv);
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
203 }
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
204
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
205 static int open(vf_instance_t *vf, char* args)
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
206 {
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
207 vf->control=control;
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
208 vf->query_format=query_format;
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
209 vf->put_image=put_image;
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
210 vf->uninit=uninit;
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
211
9599
77bddc6d9266 Support for the new options stuff
albeu
parents: 9593
diff changeset
212 if(!vf->priv) {
7062
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
213 vf->priv = malloc(sizeof(struct vf_priv_s));
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
214 memset(vf->priv, 0, sizeof(struct vf_priv_s));
9599
77bddc6d9266 Support for the new options stuff
albeu
parents: 9593
diff changeset
215 }
7062
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
216 if (args) sscanf(args, "%d:%d", &vf->priv->brightness, &vf->priv->contrast);
7065
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
217
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
218 process = process_C;
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
219 #ifdef HAVE_MMX
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
220 if(gCpuCaps.hasMMX) process = process_MMX;
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
221 #endif
7685130ba4bd MMX optimized code for soft equalizer filter
rfelker
parents: 7062
diff changeset
222
7062
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
223 return 1;
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
224 }
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
225
9599
77bddc6d9266 Support for the new options stuff
albeu
parents: 9593
diff changeset
226 #define ST_OFF(f) M_ST_OFF(struct vf_priv_s,f)
77bddc6d9266 Support for the new options stuff
albeu
parents: 9593
diff changeset
227 static m_option_t vf_opts_fields[] = {
77bddc6d9266 Support for the new options stuff
albeu
parents: 9593
diff changeset
228 {"brightness", ST_OFF(brightness), CONF_TYPE_INT, M_OPT_RANGE,-100 ,100, NULL},
77bddc6d9266 Support for the new options stuff
albeu
parents: 9593
diff changeset
229 {"contrast", ST_OFF(contrast), CONF_TYPE_INT, M_OPT_RANGE,-100 ,100, NULL},
77bddc6d9266 Support for the new options stuff
albeu
parents: 9593
diff changeset
230 { NULL, NULL, 0, 0, 0, 0, NULL }
77bddc6d9266 Support for the new options stuff
albeu
parents: 9593
diff changeset
231 };
77bddc6d9266 Support for the new options stuff
albeu
parents: 9593
diff changeset
232
77bddc6d9266 Support for the new options stuff
albeu
parents: 9593
diff changeset
233 static m_struct_t vf_opts = {
77bddc6d9266 Support for the new options stuff
albeu
parents: 9593
diff changeset
234 "eq",
77bddc6d9266 Support for the new options stuff
albeu
parents: 9593
diff changeset
235 sizeof(struct vf_priv_s),
77bddc6d9266 Support for the new options stuff
albeu
parents: 9593
diff changeset
236 &vf_priv_dflt,
77bddc6d9266 Support for the new options stuff
albeu
parents: 9593
diff changeset
237 vf_opts_fields
77bddc6d9266 Support for the new options stuff
albeu
parents: 9593
diff changeset
238 };
77bddc6d9266 Support for the new options stuff
albeu
parents: 9593
diff changeset
239
7062
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
240 vf_info_t vf_info_eq = {
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
241 "soft video equalizer",
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
242 "eq",
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
243 "Richard Felker",
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
244 "",
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 7368
diff changeset
245 open,
9599
77bddc6d9266 Support for the new options stuff
albeu
parents: 9593
diff changeset
246 &vf_opts
7062
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
247 };
9eae15166ebb soft video equalizer filter, currently supports brightness and
rfelker
parents:
diff changeset
248