Mercurial > mplayer.hg
annotate libmpcodecs/vf_swapuv.c @ 31672:61eac0d05f20
Use sigaction() instead of signal(), the latter has a unavoidable
race-condition on "broken by backwards-compatibility" systems like Solaris.
(upon receiving a signal, the handler is reset to SIG_DFL, thus a
second signal will kill the process, the problem could also be reduced
by re-installing the handler inside the handler, but there's still a
race-condition and the risk of the handler being called inside the handler).
author | reimar |
---|---|
date | Thu, 15 Jul 2010 18:09:14 +0000 |
parents | a972c1a4a012 |
children | 7af3e6f901fd |
rev | line source |
---|---|
8002 | 1 /* |
26727 | 2 * Copyright (C) 2002 Michael Niedermayer <michaelni@gmx.at> |
3 * | |
4 * This file is part of MPlayer. | |
5 * | |
6 * MPlayer is free software; you can redistribute it and/or modify | |
7 * it under the terms of the GNU General Public License as published by | |
8 * the Free Software Foundation; either version 2 of the License, or | |
9 * (at your option) any later version. | |
10 * | |
11 * MPlayer is distributed in the hope that it will be useful, | |
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 * GNU General Public License for more details. | |
15 * | |
16 * You should have received a copy of the GNU General Public License along | |
17 * with MPlayer; if not, write to the Free Software Foundation, Inc., | |
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | |
19 */ | |
8002 | 20 |
21 #include <stdio.h> | |
22 #include <stdlib.h> | |
23 #include <string.h> | |
24 #include <inttypes.h> | |
25 #include <assert.h> | |
26 | |
17012 | 27 #include "mp_msg.h" |
8002 | 28 #include "img_format.h" |
29 #include "mp_image.h" | |
30 #include "vf.h" | |
31 | |
32 | |
33 //===========================================================================// | |
34 | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30638
diff
changeset
|
35 static void get_image(struct vf_instance *vf, mp_image_t *mpi){ |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29087
diff
changeset
|
36 mp_image_t *dmpi= vf_get_image(vf->next, mpi->imgfmt, |
8050 | 37 mpi->type, mpi->flags, mpi->w, mpi->h); |
8002 | 38 |
8050 | 39 mpi->planes[0]=dmpi->planes[0]; |
40 mpi->planes[1]=dmpi->planes[2]; | |
41 mpi->planes[2]=dmpi->planes[1]; | |
42 mpi->stride[0]=dmpi->stride[0]; | |
43 mpi->stride[1]=dmpi->stride[2]; | |
44 mpi->stride[2]=dmpi->stride[1]; | |
45 mpi->width=dmpi->width; | |
8002 | 46 |
8050 | 47 mpi->flags|=MP_IMGFLAG_DIRECT; |
48 mpi->priv=(void*)dmpi; | |
8002 | 49 } |
50 | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30638
diff
changeset
|
51 static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts){ |
8050 | 52 mp_image_t *dmpi; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29087
diff
changeset
|
53 |
8050 | 54 if(mpi->flags&MP_IMGFLAG_DIRECT){ |
55 dmpi=(mp_image_t*)mpi->priv; | |
56 } else { | |
57 dmpi=vf_get_image(vf->next, mpi->imgfmt, MP_IMGTYPE_EXPORT, 0, mpi->w, mpi->h); | |
8002 | 58 assert(mpi->flags&MP_IMGFLAG_PLANAR); |
59 dmpi->planes[0]=mpi->planes[0]; | |
60 dmpi->planes[1]=mpi->planes[2]; | |
61 dmpi->planes[2]=mpi->planes[1]; | |
62 dmpi->stride[0]=mpi->stride[0]; | |
63 dmpi->stride[1]=mpi->stride[2]; | |
64 dmpi->stride[2]=mpi->stride[1]; | |
8050 | 65 dmpi->width=mpi->width; |
66 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29087
diff
changeset
|
67 |
9934 | 68 vf_clone_mpi_attributes(dmpi, mpi); |
8050 | 69 |
17906
20aca9baf5d8
passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents:
17367
diff
changeset
|
70 return vf_next_put_image(vf,dmpi, pts); |
8002 | 71 } |
72 | |
73 //===========================================================================// | |
74 | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30638
diff
changeset
|
75 static int query_format(struct vf_instance *vf, unsigned int fmt){ |
8002 | 76 switch(fmt) |
77 { | |
78 case IMGFMT_YV12: | |
79 case IMGFMT_I420: | |
80 case IMGFMT_IYUV: | |
81 case IMGFMT_YVU9: | |
82 case IMGFMT_444P: | |
83 case IMGFMT_422P: | |
84 case IMGFMT_411P: | |
85 return vf_next_query_format(vf, fmt); | |
86 } | |
87 return 0; | |
88 } | |
89 | |
30638
a7b908875c14
Rename open() vf initialization function to vf_open().
diego
parents:
29263
diff
changeset
|
90 static int vf_open(vf_instance_t *vf, char *args){ |
8002 | 91 vf->put_image=put_image; |
8050 | 92 vf->get_image=get_image; |
8002 | 93 vf->query_format=query_format; |
94 return 1; | |
95 } | |
96 | |
25221 | 97 const vf_info_t vf_info_swapuv = { |
15030 | 98 "UV swapper", |
8002 | 99 "swapuv", |
100 "Michael Niedermayer", | |
101 "", | |
30638
a7b908875c14
Rename open() vf initialization function to vf_open().
diego
parents:
29263
diff
changeset
|
102 vf_open, |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
8050
diff
changeset
|
103 NULL |
8002 | 104 }; |
105 | |
106 //===========================================================================// |