Mercurial > mplayer.hg
annotate libmpcodecs/vf_mirror.c @ 32282:606e4157cd4c
Split alloc and init of context so that parameters can be set in the context
instead of requireing being passed through function parameters. This also
makes sws work with AVOptions.
author | michael |
---|---|
date | Sun, 26 Sep 2010 19:33:57 +0000 |
parents | a972c1a4a012 |
children | 7af3e6f901fd |
rev | line source |
---|---|
30421
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
1 /* |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
2 * This file is part of MPlayer. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
3 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
4 * MPlayer is free software; you can redistribute it and/or modify |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
5 * it under the terms of the GNU General Public License as published by |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
6 * the Free Software Foundation; either version 2 of the License, or |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
7 * (at your option) any later version. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
8 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
9 * MPlayer is distributed in the hope that it will be useful, |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
12 * GNU General Public License for more details. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
13 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
14 * You should have received a copy of the GNU General Public License along |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
15 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
17 */ |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
18 |
5763 | 19 #include <stdio.h> |
20 #include <stdlib.h> | |
21 #include <string.h> | |
22 #include <inttypes.h> | |
23 | |
17012 | 24 #include "config.h" |
25 #include "mp_msg.h" | |
5763 | 26 |
27 #include "img_format.h" | |
28 #include "mp_image.h" | |
29 #include "vf.h" | |
30 | |
31 | |
8748 | 32 static void mirror(unsigned char* dst,unsigned char* src,int dststride,int srcstride,int w,int h,int bpp,unsigned int fmt){ |
5772 | 33 int y; |
34 for(y=0;y<h;y++){ | |
35 int x; | |
5763 | 36 switch(bpp){ |
37 case 1: | |
5772 | 38 for(x=0;x<w;x++) dst[x]=src[w-x-1]; |
5763 | 39 break; |
40 case 2: | |
8748 | 41 switch(fmt){ |
42 case IMGFMT_UYVY: { | |
43 // packed YUV is tricky. U,V are 32bpp while Y is 16bpp: | |
44 int w2=w>>1; | |
45 for(x=0;x<w2;x++){ | |
46 // TODO: optimize this... | |
47 dst[x*4+0]=src[0+(w2-x-1)*4]; | |
48 dst[x*4+1]=src[3+(w2-x-1)*4]; | |
49 dst[x*4+2]=src[2+(w2-x-1)*4]; | |
50 dst[x*4+3]=src[1+(w2-x-1)*4]; | |
51 } | |
52 break; } | |
53 case IMGFMT_YUY2: | |
54 case IMGFMT_YVYU: { | |
55 // packed YUV is tricky. U,V are 32bpp while Y is 16bpp: | |
56 int w2=w>>1; | |
57 for(x=0;x<w2;x++){ | |
58 // TODO: optimize this... | |
59 dst[x*4+0]=src[2+(w2-x-1)*4]; | |
60 dst[x*4+1]=src[1+(w2-x-1)*4]; | |
61 dst[x*4+2]=src[0+(w2-x-1)*4]; | |
62 dst[x*4+3]=src[3+(w2-x-1)*4]; | |
63 } | |
64 break; } | |
65 default: | |
66 for(x=0;x<w;x++) *((short*)(dst+x*2))=*((short*)(src+(w-x-1)*2)); | |
67 } | |
5763 | 68 break; |
69 case 3: | |
5772 | 70 for(x=0;x<w;x++){ |
71 dst[x*3+0]=src[0+(w-x-1)*3]; | |
72 dst[x*3+1]=src[1+(w-x-1)*3]; | |
73 dst[x*3+2]=src[2+(w-x-1)*3]; | |
5763 | 74 } |
75 break; | |
76 case 4: | |
5772 | 77 for(x=0;x<w;x++) *((int*)(dst+x*4))=*((int*)(src+(w-x-1)*4)); |
5763 | 78 } |
5772 | 79 src+=srcstride; |
5763 | 80 dst+=dststride; |
81 } | |
82 } | |
83 | |
84 //===========================================================================// | |
85 | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30638
diff
changeset
|
86 static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts){ |
5763 | 87 mp_image_t *dmpi; |
88 | |
89 // hope we'll get DR buffer: | |
90 dmpi=vf_get_image(vf->next,mpi->imgfmt, | |
91 MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE, | |
92 mpi->w, mpi->h); | |
93 | |
94 if(mpi->flags&MP_IMGFLAG_PLANAR){ | |
95 mirror(dmpi->planes[0],mpi->planes[0], | |
96 dmpi->stride[0],mpi->stride[0], | |
8748 | 97 dmpi->w,dmpi->h,1,mpi->imgfmt); |
5763 | 98 mirror(dmpi->planes[1],mpi->planes[1], |
99 dmpi->stride[1],mpi->stride[1], | |
8748 | 100 dmpi->w>>mpi->chroma_x_shift,dmpi->h>>mpi->chroma_y_shift,1,mpi->imgfmt); |
5763 | 101 mirror(dmpi->planes[2],mpi->planes[2], |
102 dmpi->stride[2],mpi->stride[2], | |
8748 | 103 dmpi->w>>mpi->chroma_x_shift,dmpi->h>>mpi->chroma_y_shift,1,mpi->imgfmt); |
5763 | 104 } else { |
105 mirror(dmpi->planes[0],mpi->planes[0], | |
106 dmpi->stride[0],mpi->stride[0], | |
8748 | 107 dmpi->w,dmpi->h,dmpi->bpp>>3,mpi->imgfmt); |
9279 | 108 dmpi->planes[1]=mpi->planes[1]; // passthrough rgb8 palette |
5763 | 109 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
25221
diff
changeset
|
110 |
17906
20aca9baf5d8
passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents:
17012
diff
changeset
|
111 return vf_next_put_image(vf,dmpi, pts); |
5763 | 112 } |
113 | |
114 //===========================================================================// | |
115 | |
30638
a7b908875c14
Rename open() vf initialization function to vf_open().
diego
parents:
30421
diff
changeset
|
116 static int vf_open(vf_instance_t *vf, char *args){ |
5763 | 117 //vf->config=config; |
118 vf->put_image=put_image; | |
119 return 1; | |
120 } | |
121 | |
25221 | 122 const vf_info_t vf_info_mirror = { |
5772 | 123 "horizontal mirror", |
5763 | 124 "mirror", |
125 "Eyck", | |
126 "", | |
30638
a7b908875c14
Rename open() vf initialization function to vf_open().
diego
parents:
30421
diff
changeset
|
127 vf_open, |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9279
diff
changeset
|
128 NULL |
5763 | 129 }; |
130 | |
131 //===========================================================================// |