annotate libmpcodecs/vf_bmovl.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 744d56a47d09
children 5331f38c8db7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
1 /* vf_bmovl.c v0.9.1 - BitMap OVerLay videofilter for MPlayer
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
2 *
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
3 * (C) 2002 Per Wigren <wigren@home.se>
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
4 * Licenced under the GNU General Public License
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
5 *
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
6 * Use MPlayer as a framebuffer to read bitmaps and commands from a FIFO
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
7 * and display them in the window.
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
8 *
7895
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
9 * Commands are:
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
10 *
7895
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
11 * RGBA32 width height xpos ypos alpha clear
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
12 * * Followed by width*height*4 bytes of raw RGBA32 data.
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
13 * ABGR32 width height xpos ypos alpha clear
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
14 * * Followed by width*height*4 bytes of raw ABGR32 data.
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
15 * RGB24 width height xpos ypos alpha clear
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
16 * * Followed by width*height*3 bytes of raw RGB32 data.
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
17 * BGR24 width height xpos ypos alpha clear
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
18 * * Followed by width*height*3 bytes of raw BGR32 data.
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
19 *
7895
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
20 * ALPHA width height xpos ypos alpha
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
21 * * Change alpha for area
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
22 * CLEAR width height xpos ypos
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
23 * * Clear area
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
24 * OPAQUE
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
25 * * Disable all alpha transparency!
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
26 * Send "ALPHA 0 0 0 0 0" to enable again!
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
27 * HIDE
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
28 * * Hide bitmap
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
29 * SHOW
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
30 * * Show bitmap
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
31 *
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
32 * Arguments are:
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
33 * width, height Size of image/area
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
34 * xpos, ypos Start blitting at X/Y position
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
35 * alpha Set alpha difference. 0 means same as original.
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
36 * 255 makes everything opaque
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
37 * -255 makes everything transparent
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
38 * If you set this to -255 you can then send a sequence of
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
39 * ALPHA-commands to set the area to -225, -200, -175 etc
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
40 * for a nice fade-in-effect! ;)
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
41 * clear Clear the framebuffer before blitting. 1 means clear.
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
42 * If 0, the image will just be blitted on top of the old
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
43 * one, so you don't need to send 1,8MB of RGBA32 data
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
44 * everytime a small part of the screen is updated.
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
45 *
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
46 * Arguments for the filter are hidden:opaque:fifo
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
47 * For example 1:0:/tmp/myfifo.fifo will start the filter hidden, transparent
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
48 * and use /tmp/myfifo.fifo as the fifo.
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
49 *
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
50 * If you find bugs, please send me patches! ;)
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
51 *
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
52 * This filter was developed for use in Freevo (http://freevo.sf.net), but
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
53 * anyone is free to use it! ;)
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
54 *
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
55 */
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
56
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
57 #include <stdio.h>
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
58 #include <stdlib.h>
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
59 #include <string.h>
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
60 #include <unistd.h>
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
61 #include <errno.h>
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
62 #include <sys/stat.h>
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
63 #include <sys/types.h>
7858
6ccc14497807 time.h required for select()
arpi
parents: 7855
diff changeset
64 #include <sys/time.h>
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
65 #include <fcntl.h>
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
66 #include "mp_image.h"
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
67 #include "vf.h"
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
68 #include "img_format.h"
9832
298e261aecd7 disable vf_bmovl for systems without posix select
faust3
parents: 9593
diff changeset
69 #include "../config.h"
298e261aecd7 disable vf_bmovl for systems without posix select
faust3
parents: 9593
diff changeset
70
298e261aecd7 disable vf_bmovl for systems without posix select
faust3
parents: 9593
diff changeset
71 #ifndef HAVE_NO_POSIX_SELECT
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
72
8878
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
73 #include "../mp_msg.h"
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
74
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
75 #include "../libvo/fastmemcpy.h"
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
76
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
77 #define IS_RAWIMG 0x100
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
78 #define IS_IMG 0x200
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
79
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
80 #define NONE 0x000
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
81 #define IMG_RGBA32 0x101
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
82 #define IMG_ABGR32 0x102
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
83 #define IMG_RGB24 0x103
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
84 #define IMG_BGR24 0x104
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
85 #define IMG_PNG 0x201
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
86 #define CMD_CLEAR 0x001
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
87 #define CMD_ALPHA 0x002
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
88
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
89 #define TRUE 1
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
90 #define FALSE 0
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
91
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
92 #define MAX(a,b) ((a) > (b) ? (a) : (b))
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
93 #define MIN(a,b) ((a) < (b) ? (a) : (b))
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
94 #define INRANGE(a,b,c) ( ((a) < (b)) ? (b) : ( ((a) > (c)) ? (c) : (a) ) )
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
95
9131
67d28a3f918a The code for converting RGB to YUV in bmovl is slow because it uses
arpi
parents: 9110
diff changeset
96 #define rgb2y(R,G,B) ( (( 263*R + 516*G + 100*B) >> 10) + 16 )
67d28a3f918a The code for converting RGB to YUV in bmovl is slow because it uses
arpi
parents: 9110
diff changeset
97 #define rgb2u(R,G,B) ( ((-152*R - 298*G + 450*B) >> 10) + 128 )
67d28a3f918a The code for converting RGB to YUV in bmovl is slow because it uses
arpi
parents: 9110
diff changeset
98 #define rgb2v(R,G,B) ( (( 450*R - 376*G - 73*B) >> 10) + 128 )
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
99
8878
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
100 #define DBG(a) (mp_msg(MSGT_VFILTER, MSGL_DBG2, "DEBUG: %d\n", a))
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
101
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
102 struct vf_priv_s {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
103 int w, h, x1, y1, x2, y2;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
104 struct {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
105 unsigned char *y, *u, *v, *a, *oa;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
106 } bitmap;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
107 int stream_fd;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
108 fd_set stream_fdset;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
109 int opaque, hidden;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
110 };
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
111
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
112 static int
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
113 query_format(struct vf_instance_s* vf, unsigned int fmt){
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
114 if(fmt==IMGFMT_YV12) return VFCAP_CSP_SUPPORTED;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
115 return 0;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
116 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
117
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
118
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
119 static int
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
120 config(struct vf_instance_s* vf,
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
121 int width, int height, int d_width, int d_height,
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
122 unsigned int flags, unsigned int outfmt)
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
123 {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
124 vf->priv->bitmap.y = malloc( width*height );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
125 vf->priv->bitmap.u = malloc( width*height/4 );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
126 vf->priv->bitmap.v = malloc( width*height/4 );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
127 vf->priv->bitmap.a = malloc( width*height );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
128 vf->priv->bitmap.oa = malloc( width*height );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
129 if(!( vf->priv->bitmap.y &&
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
130 vf->priv->bitmap.u &&
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
131 vf->priv->bitmap.v &&
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
132 vf->priv->bitmap.a &&
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
133 vf->priv->bitmap.oa )) {
8878
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
134 mp_msg(MSGT_VFILTER, MSGL_ERR, "vf_bmovl: Could not allocate memory for bitmap buffer: %s\n", strerror(errno) );
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
135 return FALSE;
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
136 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
137
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
138 // Set default to black...
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
139 memset( vf->priv->bitmap.u, 128, width*height/4 );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
140 memset( vf->priv->bitmap.v, 128, width*height/4 );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
141
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
142 vf->priv->w = vf->priv->x1 = width;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
143 vf->priv->h = vf->priv->y1 = height;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
144 vf->priv->y2 = vf->priv->x2 = 0;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
145
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
146 return vf_next_config(vf, width, height, d_width, d_height, flags, outfmt);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
147 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
148
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
149 static void
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
150 uninit(struct vf_instance_s *vf)
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
151 {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
152 if(vf->priv) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
153 free(vf->priv->bitmap.y);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
154 free(vf->priv->bitmap.u);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
155 free(vf->priv->bitmap.v);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
156 free(vf->priv->bitmap.a);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
157 free(vf->priv->bitmap.oa);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
158 free(vf->priv);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
159 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
160 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
161
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
162 static int
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
163 _read_cmd(int fd, char *cmd, char *args) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
164 int done=FALSE, pos=0;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
165 char tmp;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
166
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
167 while(!done) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
168 if(! read( fd, &tmp, 1 ) ) return FALSE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
169 if( (tmp>='A' && tmp<='Z') || (tmp>='0' && tmp<='9') )
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
170 cmd[pos]=tmp;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
171 else if(tmp == ' ') {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
172 cmd[pos]='\0';
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
173 done=TRUE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
174 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
175 else if(tmp == '\n') {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
176 cmd[pos]='\0';
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
177 args[0]='\0';
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
178 return TRUE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
179 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
180 if(pos++>20) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
181 cmd[0]='\0';
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
182 return TRUE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
183 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
184 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
185 done=FALSE; pos=0;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
186 while(!done) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
187 if(! read( fd, &tmp, 1 ) ) return FALSE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
188 if( (tmp >= ' ') && (pos<100) ) args[pos]=tmp;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
189 else {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
190 args[pos]='\0';
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
191 done=TRUE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
192 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
193 pos++;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
194 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
195 return TRUE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
196 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
197
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
198
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
199 static int
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
200 put_image(struct vf_instance_s* vf, mp_image_t* mpi){
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
201 int buf_x=0, buf_y=0, buf_pos=0;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
202 int xpos=0, ypos=0, pos=0;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
203 unsigned char red=0, green=0, blue=0;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
204 int alpha;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
205 mp_image_t* dmpi;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
206
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
207 dmpi = vf_get_image(vf->next, mpi->imgfmt, MP_IMGTYPE_TEMP,
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
208 MP_IMGFLAG_ACCEPT_STRIDE | MP_IMGFLAG_PREFER_ALIGNED_STRIDE,
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
209 mpi->w, mpi->h);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
210
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
211 memcpy( dmpi->planes[0], mpi->planes[0], mpi->stride[0] * mpi->height);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
212 memcpy( dmpi->planes[1], mpi->planes[1], mpi->stride[1] * mpi->chroma_height);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
213 memcpy( dmpi->planes[2], mpi->planes[2], mpi->stride[2] * mpi->chroma_height);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
214
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
215 if(vf->priv->stream_fd >= 0) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
216 struct timeval tv;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
217
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
218 FD_SET( vf->priv->stream_fd, &vf->priv->stream_fdset );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
219 tv.tv_sec=0; tv.tv_usec=0;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
220
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
221 if( select( vf->priv->stream_fd+1, &vf->priv->stream_fdset, NULL, NULL, &tv ) > 0) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
222 // We've got new data from the FIFO
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
223
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
224 char cmd[20], args[100];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
225 int imgw,imgh,imgx,imgy,clear,imgalpha,pxsz=1,command;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
226 unsigned char *buffer = NULL;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
227
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
228 if(! _read_cmd( vf->priv->stream_fd, cmd, args) ) {
8878
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
229 mp_msg(MSGT_VFILTER, MSGL_ERR, "\nvf_bmovl: Error reading commands: %s\n\n", strerror(errno));
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
230 return FALSE;
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
231 }
8878
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
232 mp_msg(MSGT_VFILTER, MSGL_DBG2, "\nDEBUG: Got: %s+%s\n", cmd, args);
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
233
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
234 command=NONE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
235 if ( strncmp(cmd,"RGBA32",6)==0 ) { pxsz=4; command = IMG_RGBA32; }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
236 else if( strncmp(cmd,"ABGR32",6)==0 ) { pxsz=4; command = IMG_ABGR32; }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
237 else if( strncmp(cmd,"RGB24" ,5)==0 ) { pxsz=3; command = IMG_RGB24; }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
238 else if( strncmp(cmd,"BGR24" ,5)==0 ) { pxsz=3; command = IMG_BGR24; }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
239 else if( strncmp(cmd,"CLEAR" ,5)==0 ) { pxsz=1; command = CMD_CLEAR; }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
240 else if( strncmp(cmd,"ALPHA" ,5)==0 ) { pxsz=1; command = CMD_ALPHA; }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
241 else if( strncmp(cmd,"OPAQUE",6)==0 ) vf->priv->opaque=TRUE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
242 else if( strncmp(cmd,"SHOW", 4)==0 ) vf->priv->hidden=FALSE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
243 else if( strncmp(cmd,"HIDE", 4)==0 ) vf->priv->hidden=TRUE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
244 else if( strncmp(cmd,"FLUSH" ,5)==0 ) return vf_next_put_image(vf, dmpi);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
245 else {
8878
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
246 mp_msg(MSGT_VFILTER, MSGL_WARN, "\nvf_bmovl: Unknown command: '%s'. Ignoring.\n", cmd);
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
247 return vf_next_put_image(vf, dmpi);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
248 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
249
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
250 if(command == CMD_ALPHA) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
251 sscanf( args, "%d %d %d %d %d", &imgw, &imgh, &imgx, &imgy, &imgalpha);
8878
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
252 mp_msg(MSGT_VFILTER, MSGL_DBG2, "\nDEBUG: ALPHA: %d %d %d %d %d\n\n",
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
253 imgw, imgh, imgx, imgy, imgalpha);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
254 if(imgw==0 && imgh==0) vf->priv->opaque=FALSE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
255 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
256
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
257 if(command & IS_RAWIMG) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
258 sscanf( args, "%d %d %d %d %d %d",
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
259 &imgw, &imgh, &imgx, &imgy, &imgalpha, &clear);
8878
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
260 mp_msg(MSGT_VFILTER, MSGL_DBG2, "\nDEBUG: RAWIMG: %d %d %d %d %d %d\n\n",
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
261 imgw, imgh, imgx, imgy, imgalpha, clear);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
262
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
263 buffer = malloc(imgw*imgh*pxsz);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
264 if(!buffer) {
8878
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
265 mp_msg(MSGT_VFILTER, MSGL_WARN, "\nvf_bmovl: Couldn't allocate temporary buffer! Skipping...\n\n");
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
266 return vf_next_put_image(vf, dmpi);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
267 }
8878
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
268 mp_msg(MSGT_VFILTER, MSGL_DBG2, "Got %d bytes...\n", read( vf->priv->stream_fd, buffer, (imgw*imgh*pxsz) ) );
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
269
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
270 if(clear) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
271 memset( vf->priv->bitmap.y, 0, vf->priv->w*vf->priv->h );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
272 memset( vf->priv->bitmap.u, 128, vf->priv->w*vf->priv->h/4 );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
273 memset( vf->priv->bitmap.v, 128, vf->priv->w*vf->priv->h/4 );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
274 memset( vf->priv->bitmap.a, 0, vf->priv->w*vf->priv->h );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
275 memset( vf->priv->bitmap.oa, 0, vf->priv->w*vf->priv->h );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
276 vf->priv->x1 = dmpi->width;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
277 vf->priv->y1 = dmpi->height;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
278 vf->priv->x2 = vf->priv->y2 = 0;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
279 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
280 // Define how much of our bitmap that contains graphics!
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
281 vf->priv->x1 = MAX( 0, MIN(vf->priv->x1, imgx) );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
282 vf->priv->y1 = MAX( 0, MIN(vf->priv->y1, imgy) );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
283 vf->priv->x2 = MIN( vf->priv->w, MAX(vf->priv->x2, ( imgx + imgw)) );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
284 vf->priv->y2 = MIN( vf->priv->h, MAX(vf->priv->y2, ( imgy + imgh)) );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
285 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
286
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
287 if( command == CMD_CLEAR ) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
288 sscanf( args, "%d %d %d %d", &imgw, &imgh, &imgx, &imgy);
8878
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
289 mp_msg(MSGT_VFILTER, MSGL_DBG2, "\nDEBUG: CLEAR: %d %d %d %d\n\n", imgw, imgh, imgx, imgy);
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
290
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
291 for( ypos=imgy ; (ypos < (imgy+imgh)) && (ypos < vf->priv->y2) ; ypos++ ) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
292 memset( vf->priv->bitmap.y + (ypos*vf->priv->w) + imgx, 0, imgw );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
293 memset( vf->priv->bitmap.a + (ypos*vf->priv->w) + imgx, 0, imgw );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
294 memset( vf->priv->bitmap.oa + (ypos*vf->priv->w) + imgx, 0, imgw );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
295 if(ypos%2) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
296 memset( vf->priv->bitmap.u + ((ypos/2)*dmpi->stride[1]) + (imgx/2), 128, imgw/2 );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
297 memset( vf->priv->bitmap.v + ((ypos/2)*dmpi->stride[2]) + (imgx/2), 128, imgw/2 );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
298 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
299 } // Recalculate area that contains graphics
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
300 if( (imgx <= vf->priv->x1) && ( (imgw+imgx) >= vf->priv->x2) ) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
301 if( (imgy <= vf->priv->y1) && ( (imgy+imgh) >= vf->priv->y1) )
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
302 vf->priv->y1 = imgy+imgh;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
303 if( (imgy <= vf->priv->y2) && ( (imgy+imgh) >= vf->priv->y2) )
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
304 vf->priv->y2 = imgy;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
305 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
306 if( (imgy <= vf->priv->y1) && ( (imgy+imgh) >= vf->priv->y2) ) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
307 if( (imgx <= vf->priv->x1) && ( (imgx+imgw) >= vf->priv->x1) )
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
308 vf->priv->x1 = imgx+imgw;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
309 if( (imgx <= vf->priv->x2) && ( (imgx+imgw) >= vf->priv->x2) )
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
310 vf->priv->x2 = imgx;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
311 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
312 return vf_next_put_image(vf, dmpi);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
313 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
314
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
315 for( buf_y=0 ; (buf_y < imgh) && (buf_y < (vf->priv->h-imgy)) ; buf_y++ ) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
316 for( buf_x=0 ; (buf_x < (imgw*pxsz)) && (buf_x < ((vf->priv->w+imgx)*pxsz)) ; buf_x += pxsz ) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
317 if(command & IS_RAWIMG) buf_pos = (buf_y * imgw * pxsz) + buf_x;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
318 pos = ((buf_y+imgy) * vf->priv->w) + ((buf_x/pxsz)+imgx);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
319
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
320 switch(command) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
321 case IMG_RGBA32:
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
322 red = buffer[buf_pos+0];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
323 green = buffer[buf_pos+1];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
324 blue = buffer[buf_pos+2];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
325 alpha = buffer[buf_pos+3];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
326 break;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
327 case IMG_ABGR32:
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
328 alpha = buffer[buf_pos+0];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
329 blue = buffer[buf_pos+1];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
330 green = buffer[buf_pos+2];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
331 red = buffer[buf_pos+3];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
332 break;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
333 case IMG_RGB24:
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
334 red = buffer[buf_pos+0];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
335 green = buffer[buf_pos+1];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
336 blue = buffer[buf_pos+2];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
337 alpha = 0xFF;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
338 break;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
339 case IMG_BGR24:
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
340 blue = buffer[buf_pos+0];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
341 green = buffer[buf_pos+1];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
342 red = buffer[buf_pos+2];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
343 alpha = 0xFF;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
344 break;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
345 case CMD_ALPHA:
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
346 vf->priv->bitmap.a[pos] = INRANGE((vf->priv->bitmap.oa[pos]+imgalpha),0,255);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
347 break;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
348 default:
8878
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
349 mp_msg(MSGT_VFILTER, MSGL_ERR, "vf_bmovl: Internal error!\n");
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
350 return FALSE;
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
351 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
352 if( command & IS_RAWIMG ) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
353 vf->priv->bitmap.y[pos] = rgb2y(red,green,blue);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
354 vf->priv->bitmap.oa[pos] = alpha;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
355 vf->priv->bitmap.a[pos] = INRANGE((alpha+imgalpha),0,255);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
356 if((buf_y%2) && ((buf_x/pxsz)%2)) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
357 pos = ( ((buf_y+imgy)/2) * dmpi->stride[1] ) + (((buf_x/pxsz)+imgx)/2);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
358 vf->priv->bitmap.u[pos] = rgb2u(red,green,blue);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
359 vf->priv->bitmap.v[pos] = rgb2v(red,green,blue);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
360 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
361 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
362 } // for buf_x
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
363 } // for buf_y
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
364 free (buffer);
8878
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
365 } else if(errno) mp_msg(MSGT_VFILTER, MSGL_WARN, "\nvf_bmovl: Error %d in fifo: %s\n\n", errno, strerror(errno));
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
366 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
367
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
368 if(vf->priv->hidden) return vf_next_put_image(vf, dmpi);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
369
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
370 if(vf->priv->opaque) { // Just copy buffer memory to screen
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
371 for( ypos=vf->priv->y1 ; ypos < vf->priv->y2 ; ypos++ ) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
372 memcpy( dmpi->planes[0] + (ypos*dmpi->stride[0]) + vf->priv->x1,
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
373 vf->priv->bitmap.y + (ypos*vf->priv->w) + vf->priv->x1,
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
374 vf->priv->x2 - vf->priv->x1 );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
375 if(ypos%2) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
376 memcpy( dmpi->planes[1] + ((ypos/2)*dmpi->stride[1]) + (vf->priv->x1/2),
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
377 vf->priv->bitmap.u + (((ypos/2)*(vf->priv->w)/2)) + (vf->priv->x1/2),
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
378 (vf->priv->x2 - vf->priv->x1)/2 );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
379 memcpy( dmpi->planes[2] + ((ypos/2)*dmpi->stride[2]) + (vf->priv->x1/2),
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
380 vf->priv->bitmap.v + (((ypos/2)*(vf->priv->w)/2)) + (vf->priv->x1/2),
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
381 (vf->priv->x2 - vf->priv->x1)/2 );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
382 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
383 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
384 } else { // Blit the bitmap to the videoscreen, pixel for pixel
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
385 for( ypos=vf->priv->y1 ; ypos < vf->priv->y2 ; ypos++ ) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
386 for ( xpos=vf->priv->x1 ; xpos < vf->priv->x2 ; xpos++ ) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
387 pos = (ypos * dmpi->stride[0]) + xpos;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
388
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
389 alpha = vf->priv->bitmap.a[pos];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
390
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
391 if (alpha == 0) continue; // Completly transparent pixel
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
392
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
393 if (alpha == 255) { // Opaque pixel
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
394 dmpi->planes[0][pos] = vf->priv->bitmap.y[pos];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
395 if ((ypos%2) && (xpos%2)) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
396 pos = ( (ypos/2) * dmpi->stride[1] ) + (xpos/2);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
397 dmpi->planes[1][pos] = vf->priv->bitmap.u[pos];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
398 dmpi->planes[2][pos] = vf->priv->bitmap.v[pos];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
399 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
400 } else { // Alphablended pixel
9110
7924a60d833b This is a simple patch to change the alpha blending code in bmovl to use
arpi
parents: 8878
diff changeset
401 dmpi->planes[0][pos] =
7924a60d833b This is a simple patch to change the alpha blending code in bmovl to use
arpi
parents: 8878
diff changeset
402 ((255 - alpha) * (int)dmpi->planes[0][pos] +
7924a60d833b This is a simple patch to change the alpha blending code in bmovl to use
arpi
parents: 8878
diff changeset
403 alpha * (int)vf->priv->bitmap.y[pos]) >> 8;
7924a60d833b This is a simple patch to change the alpha blending code in bmovl to use
arpi
parents: 8878
diff changeset
404
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
405 if ((ypos%2) && (xpos%2)) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
406 pos = ( (ypos/2) * dmpi->stride[1] ) + (xpos/2);
9110
7924a60d833b This is a simple patch to change the alpha blending code in bmovl to use
arpi
parents: 8878
diff changeset
407
7924a60d833b This is a simple patch to change the alpha blending code in bmovl to use
arpi
parents: 8878
diff changeset
408 dmpi->planes[1][pos] =
7924a60d833b This is a simple patch to change the alpha blending code in bmovl to use
arpi
parents: 8878
diff changeset
409 ((255 - alpha) * (int)dmpi->planes[1][pos] +
7924a60d833b This is a simple patch to change the alpha blending code in bmovl to use
arpi
parents: 8878
diff changeset
410 alpha * (int)vf->priv->bitmap.u[pos]) >> 8;
7924a60d833b This is a simple patch to change the alpha blending code in bmovl to use
arpi
parents: 8878
diff changeset
411
7924a60d833b This is a simple patch to change the alpha blending code in bmovl to use
arpi
parents: 8878
diff changeset
412 dmpi->planes[2][pos] =
7924a60d833b This is a simple patch to change the alpha blending code in bmovl to use
arpi
parents: 8878
diff changeset
413 ((255 - alpha) * (int)dmpi->planes[2][pos] +
7924a60d833b This is a simple patch to change the alpha blending code in bmovl to use
arpi
parents: 8878
diff changeset
414 alpha * (int)vf->priv->bitmap.v[pos]) >> 8;
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
415 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
416 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
417 } // for xpos
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
418 } // for ypos
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
419 } // if !opaque
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
420 return vf_next_put_image(vf, dmpi);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
421 } // put_image
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
422
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
423 static int
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
424 vf_open(vf_instance_t* vf, char* args)
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
425 {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
426 char filename[1000];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
427
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
428 vf->config = config;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
429 vf->put_image = put_image;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
430 vf->query_format = query_format;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
431 vf->uninit = uninit;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
432
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
433 vf->priv = malloc(sizeof(struct vf_priv_s));
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
434
10337
744d56a47d09 Fix SIG11 if no args given
albeu
parents: 9832
diff changeset
435 if(!args || sscanf(args, "%d:%d:%s", &vf->priv->hidden, &vf->priv->opaque, filename) < 3 ) {
8878
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
436 mp_msg(MSGT_VFILTER, MSGL_ERR, "vf_bmovl: Bad arguments!\n");
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
437 mp_msg(MSGT_VFILTER, MSGL_ERR, "vf_bmovl: Arguments are 'bool hidden:bool opaque:string fifo'\n");
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
438 return FALSE;
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
439 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
440
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
441 vf->priv->stream_fd = open(filename, O_RDWR);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
442 if(vf->priv->stream_fd >= 0) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
443 FD_ZERO( &vf->priv->stream_fdset );
8878
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
444 mp_msg(MSGT_VFILTER, MSGL_INFO, "vf_bmovl: Opened fifo %s as FD %d\n", filename, vf->priv->stream_fd);
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
445 } else {
8878
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
446 mp_msg(MSGT_VFILTER, MSGL_WARN, "vf_bmovl: Error! Couldn't open FIFO %s: %s\n", filename, strerror(errno));
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
447 vf->priv->stream_fd = -1;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
448 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
449
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
450 return TRUE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
451 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
452
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
453 vf_info_t vf_info_bmovl = {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
454 "Read bitmaps from a FIFO and display them in window",
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
455 "bmovl",
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
456 "Per Wigren",
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
457 "",
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9131
diff changeset
458 vf_open,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9131
diff changeset
459 NULL
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
460 };
9832
298e261aecd7 disable vf_bmovl for systems without posix select
faust3
parents: 9593
diff changeset
461
298e261aecd7 disable vf_bmovl for systems without posix select
faust3
parents: 9593
diff changeset
462 #endif