Mercurial > mplayer.hg
annotate libmpcodecs/vf_rectangle.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 | e9a2af584986 |
children | 835822ce4bb1 |
rev | line source |
---|---|
6820
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
1 #include <stdio.h> |
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
2 #include <stdlib.h> |
6887 | 3 #include <string.h> |
6820
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
4 #include "mp_image.h" |
7738 | 5 #include "../mp_msg.h" |
6820
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
6 #include "vf.h" |
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
7 |
7127 | 8 #include "../libvo/fastmemcpy.h" |
9 | |
6820
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
10 struct vf_priv_s { |
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
11 int x, y, w, h; |
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
12 }; |
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
13 |
6887 | 14 static int |
15 config(struct vf_instance_s* vf, | |
16 int width, int height, int d_width, int d_height, | |
17 unsigned int flags, unsigned int outfmt) | |
18 { | |
19 if (vf->priv->w < 0 || width < vf->priv->w) | |
20 vf->priv->w = width; | |
21 if (vf->priv->h < 0 || height < vf->priv->h) | |
22 vf->priv->h = height; | |
23 if (vf->priv->x < 0) | |
24 vf->priv->x = (width - vf->priv->w) / 2; | |
25 if (vf->priv->y < 0) | |
26 vf->priv->y = (height - vf->priv->h) / 2; | |
27 if (vf->priv->w + vf->priv->x > width | |
28 || vf->priv->h + vf->priv->y > height) { | |
7738 | 29 mp_msg(MSGT_VFILTER,MSGL_WARN,"rectangle: bad position/width/height - rectangle area is out of the original!\n"); |
6887 | 30 return 0; |
31 } | |
32 return vf_next_config(vf, width, height, d_width, d_height, flags, outfmt); | |
33 } | |
34 | |
35 static int | |
36 control(struct vf_instance_s* vf, int request, void *data) | |
37 { | |
38 const int *const tmp = data; | |
39 switch(request){ | |
40 case VFCTRL_CHANGE_RECTANGLE: | |
41 switch (tmp[0]){ | |
42 case 0: | |
43 vf->priv->w += tmp[1]; | |
44 return 1; | |
45 break; | |
46 case 1: | |
47 vf->priv->h += tmp[1]; | |
48 return 1; | |
49 break; | |
50 case 2: | |
51 vf->priv->x += tmp[1]; | |
52 return 1; | |
53 break; | |
54 case 3: | |
55 vf->priv->y += tmp[1]; | |
56 return 1; | |
57 break; | |
58 default: | |
7738 | 59 mp_msg(MSGT_VFILTER,MSGL_FATAL,"Unknown param %d \n", tmp[0]); |
6887 | 60 return 0; |
61 } | |
62 } | |
63 return vf_next_control(vf, request, data); | |
64 return 0; | |
65 } | |
7368 | 66 static int |
6820
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
67 put_image(struct vf_instance_s* vf, mp_image_t* mpi){ |
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
68 mp_image_t* dmpi; |
8737 | 69 unsigned int bpp = mpi->bpp / 8; |
6887 | 70 unsigned int x, y, w, h; |
71 dmpi = vf_get_image(vf->next, mpi->imgfmt, MP_IMGTYPE_TEMP, | |
72 MP_IMGFLAG_ACCEPT_STRIDE | MP_IMGFLAG_PREFER_ALIGNED_STRIDE, | |
73 mpi->w, mpi->h); | |
8737 | 74 |
75 memcpy_pic(dmpi->planes[0],mpi->planes[0],mpi->w*bpp, mpi->h, | |
76 dmpi->stride[0],mpi->stride[0]); | |
77 if(mpi->flags&MP_IMGFLAG_PLANAR && mpi->flags&MP_IMGFLAG_YUV){ | |
78 memcpy_pic(dmpi->planes[1],mpi->planes[1], | |
79 mpi->w>>mpi->chroma_x_shift, mpi->h>>mpi->chroma_y_shift, | |
80 dmpi->stride[1],mpi->stride[1]); | |
81 memcpy_pic(dmpi->planes[2],mpi->planes[2], | |
82 mpi->w>>mpi->chroma_x_shift, mpi->h>>mpi->chroma_y_shift, | |
83 dmpi->stride[2],mpi->stride[2]); | |
84 } | |
6820
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
85 |
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
86 /* Draw the rectangle */ |
6887 | 87 |
8737 | 88 mp_msg(MSGT_VFILTER,MSGL_INFO, "rectangle: -vop rectangle=%d:%d:%d:%d \n", vf->priv->w, vf->priv->h, vf->priv->x, vf->priv->y); |
6887 | 89 |
90 if (vf->priv->x < 0) | |
6820
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
91 x = 0; |
6887 | 92 else if (dmpi->width < vf->priv->x) |
93 x = dmpi->width; | |
94 else | |
95 x = vf->priv->x; | |
96 if (vf->priv->x + vf->priv->w - 1 < 0) | |
97 w = vf->priv->x + vf->priv->w - 1 - x; | |
98 else if (dmpi->width < vf->priv->x + vf->priv->w - 1) | |
99 w = dmpi->width - x; | |
100 else | |
101 w = vf->priv->x + vf->priv->w - 1 - x; | |
102 if (vf->priv->y < 0) | |
6820
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
103 y = 0; |
6887 | 104 else if (dmpi->height < vf->priv->y) |
105 y = dmpi->height; | |
106 else | |
107 y = vf->priv->y; | |
108 if (vf->priv->y + vf->priv->h - 1 < 0) | |
109 h = vf->priv->y + vf->priv->h - 1 - y; | |
110 else if (dmpi->height < vf->priv->y + vf->priv->h - 1) | |
111 h = dmpi->height - y; | |
112 else | |
113 h = vf->priv->y + vf->priv->h - 1 - y; | |
114 | |
115 if (0 <= vf->priv->y && vf->priv->y <= dmpi->height) { | |
116 unsigned char *p = dmpi->planes[0] + y * dmpi->stride[0] + x * bpp; | |
117 unsigned int count = w * bpp; | |
118 while (count--) | |
119 p[count] = 0xff - p[count]; | |
120 } | |
121 if (h != 1 && vf->priv->y + vf->priv->h - 1 <= mpi->height) { | |
122 unsigned char *p = dmpi->planes[0] + (vf->priv->y + vf->priv->h - 1) * dmpi->stride[0] + x * bpp; | |
123 unsigned int count = w * bpp; | |
124 while (count--) | |
125 p[count] = 0xff - p[count]; | |
126 } | |
127 if (0 <= vf->priv->x && vf->priv->x <= dmpi->width) { | |
128 unsigned char *p = dmpi->planes[0] + y * dmpi->stride[0] + x * bpp; | |
129 unsigned int count = h; | |
6820
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
130 while (count--) { |
6887 | 131 unsigned int i = bpp; |
132 while (i--) | |
133 p[i] = 0xff - p[i]; | |
134 p += dmpi->stride[0]; | |
6820
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
135 } |
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
136 } |
6887 | 137 if (w != 1 && vf->priv->x + vf->priv->w - 1 <= mpi->width) { |
138 unsigned char *p = dmpi->planes[0] + y * dmpi->stride[0] + (vf->priv->x + vf->priv->w - 1) * bpp; | |
139 unsigned int count = h; | |
6820
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
140 while (count--) { |
6887 | 141 unsigned int i = bpp; |
6820
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
142 while (i--) |
6887 | 143 p[i] = 0xff - p[i]; |
144 p += dmpi->stride[0]; | |
6820
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
145 } |
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
146 } |
7368 | 147 return vf_next_put_image(vf, dmpi); |
6820
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
148 } |
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
149 |
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
150 static int |
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
151 open(vf_instance_t* vf, char* args) { |
6887 | 152 vf->config = config; |
153 vf->control = control; | |
6820
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
154 vf->put_image = put_image; |
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
155 vf->priv = malloc(sizeof(struct vf_priv_s)); |
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
156 vf->priv->x = -1; |
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
157 vf->priv->y = -1; |
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
158 vf->priv->w = -1; |
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
159 vf->priv->h = -1; |
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
160 if (args) |
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
161 sscanf(args, "%d:%d:%d:%d", |
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
162 &vf->priv->w, &vf->priv->h, &vf->priv->x, &vf->priv->y); |
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
163 return 1; |
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
164 } |
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
165 |
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
166 vf_info_t vf_info_rectangle = { |
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
167 "draw rectangle", |
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
168 "rectangle", |
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
169 "Kim Minh Kaplan", |
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
170 "", |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
8737
diff
changeset
|
171 open, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
8737
diff
changeset
|
172 NULL |
6820
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
diff
changeset
|
173 }; |