annotate libmpcodecs/vf_bmovl.c @ 24576:6704a924d4aa

According to MSDN a thread must call CoUninitialize once for each successful call it has made to CoInitialize or CoInitializeEx, including any call that returns S_FALSE. Only the CoUninitialize call corresponding to the CoInitialize or CoInitializeEx call that initialized the library can close it. patch by Gianluigi Tiesi, mplayer netfarm it
author diego
date Sun, 23 Sep 2007 20:37:33 +0000
parents a124f3abc1ec
children c2b7ba444ade
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>
17630
7c4eef408b6b include config.h before includes that need it
iive
parents: 17012
diff changeset
66 #include "config.h"
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
67 #include "mp_image.h"
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
68 #include "vf.h"
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
69 #include "img_format.h"
9832
298e261aecd7 disable vf_bmovl for systems without posix select
faust3
parents: 9593
diff changeset
70
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16886
diff changeset
71 #include "mp_msg.h"
22377
fd54975f9135 Use libavutil's av_clip* instead of unreadable MIN/MAX chaos.
reimar
parents: 19166
diff changeset
72 #include "libavutil/common.h"
8878
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
73
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16886
diff changeset
74 #include "libvo/fastmemcpy.h"
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
75
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
76 #define IS_RAWIMG 0x100
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
77 #define IS_IMG 0x200
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
78
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
79 #define NONE 0x000
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
80 #define IMG_RGBA32 0x101
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
81 #define IMG_ABGR32 0x102
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
82 #define IMG_RGB24 0x103
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
83 #define IMG_BGR24 0x104
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
84 #define IMG_PNG 0x201
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
85 #define CMD_CLEAR 0x001
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
86 #define CMD_ALPHA 0x002
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
87
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
88 #define TRUE 1
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
89 #define FALSE 0
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
90
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
91 #define INRANGE(a,b,c) ( ((a) < (b)) ? (b) : ( ((a) > (c)) ? (c) : (a) ) )
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
92
9131
67d28a3f918a The code for converting RGB to YUV in bmovl is slow because it uses
arpi
parents: 9110
diff changeset
93 #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
94 #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
95 #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
96
8878
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
97 #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
98
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
99 struct vf_priv_s {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
100 int w, h, x1, y1, x2, y2;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
101 struct {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
102 unsigned char *y, *u, *v, *a, *oa;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
103 } bitmap;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
104 int stream_fd;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
105 fd_set stream_fdset;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
106 int opaque, hidden;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
107 };
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
108
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
109 static int
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
110 query_format(struct vf_instance_s* vf, unsigned int fmt){
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
111 if(fmt==IMGFMT_YV12) return VFCAP_CSP_SUPPORTED;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
112 return 0;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
113 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
114
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
115
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
116 static int
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
117 config(struct vf_instance_s* vf,
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
118 int width, int height, int d_width, int d_height,
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
119 unsigned int flags, unsigned int outfmt)
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
120 {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
121 vf->priv->bitmap.y = malloc( width*height );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
122 vf->priv->bitmap.u = malloc( width*height/4 );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
123 vf->priv->bitmap.v = malloc( width*height/4 );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
124 vf->priv->bitmap.a = malloc( width*height );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
125 vf->priv->bitmap.oa = malloc( width*height );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
126 if(!( vf->priv->bitmap.y &&
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
127 vf->priv->bitmap.u &&
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
128 vf->priv->bitmap.v &&
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
129 vf->priv->bitmap.a &&
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
130 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
131 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
132 return FALSE;
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
133 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
134
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
135 // Set default to black...
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
136 memset( vf->priv->bitmap.u, 128, width*height/4 );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
137 memset( vf->priv->bitmap.v, 128, width*height/4 );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
138
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
139 vf->priv->w = vf->priv->x1 = width;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
140 vf->priv->h = vf->priv->y1 = height;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
141 vf->priv->y2 = vf->priv->x2 = 0;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
142
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
143 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
144 }
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 static void
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
147 uninit(struct vf_instance_s *vf)
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 if(vf->priv) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
150 free(vf->priv->bitmap.y);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
151 free(vf->priv->bitmap.u);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
152 free(vf->priv->bitmap.v);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
153 free(vf->priv->bitmap.a);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
154 free(vf->priv->bitmap.oa);
16886
ea32158ad57b close stream_fd on uninit. Fixes bugzilla bug #400.
reimar
parents: 11620
diff changeset
155 if (vf->priv->stream_fd >= 0)
ea32158ad57b close stream_fd on uninit. Fixes bugzilla bug #400.
reimar
parents: 11620
diff changeset
156 close(vf->priv->stream_fd);
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
157 free(vf->priv);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
158 }
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 static int
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
162 _read_cmd(int fd, char *cmd, char *args) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
163 int done=FALSE, pos=0;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
164 char tmp;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
165
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
166 while(!done) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
167 if(! read( fd, &tmp, 1 ) ) return FALSE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
168 if( (tmp>='A' && tmp<='Z') || (tmp>='0' && tmp<='9') )
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
169 cmd[pos]=tmp;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
170 else if(tmp == ' ') {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
171 cmd[pos]='\0';
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
172 done=TRUE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
173 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
174 else if(tmp == '\n') {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
175 cmd[pos]='\0';
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
176 args[0]='\0';
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
177 return TRUE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
178 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
179 if(pos++>20) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
180 cmd[0]='\0';
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
181 return TRUE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
182 }
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 done=FALSE; pos=0;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
185 while(!done) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
186 if(! read( fd, &tmp, 1 ) ) return FALSE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
187 if( (tmp >= ' ') && (pos<100) ) args[pos]=tmp;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
188 else {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
189 args[pos]='\0';
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
190 done=TRUE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
191 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
192 pos++;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
193 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
194 return TRUE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
195 }
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 static int
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17630
diff changeset
199 put_image(struct vf_instance_s* vf, mp_image_t* mpi, double pts){
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
200 int buf_x=0, buf_y=0, buf_pos=0;
11620
39ae20e6ad9d fix bug when bmovl can't read the whole pic at once
attila
parents: 11015
diff changeset
201 int have, got, want;
7855
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
19166
d36048cad8c4 in some cases, vf_bmovl produces junk due to source and
gpoirier
parents: 17906
diff changeset
211 memcpy_pic( dmpi->planes[0], mpi->planes[0], mpi->width, mpi->height, dmpi->stride[0], mpi->stride[0] );
d36048cad8c4 in some cases, vf_bmovl produces junk due to source and
gpoirier
parents: 17906
diff changeset
212 memcpy_pic( dmpi->planes[1], mpi->planes[1], mpi->chroma_width, mpi->chroma_height, dmpi->stride[1], mpi->stride[1] );
d36048cad8c4 in some cases, vf_bmovl produces junk due to source and
gpoirier
parents: 17906
diff changeset
213 memcpy_pic( dmpi->planes[2], mpi->planes[2], mpi->chroma_width, mpi->chroma_height, dmpi->stride[2], mpi->stride[2] );
7855
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;
11015
5331f38c8db7 correct handling of select ret=0, patch by Jonas Jensen <jbj@knef.dk>
alex
parents: 10337
diff changeset
217 int ready;
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
218
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
219 FD_SET( vf->priv->stream_fd, &vf->priv->stream_fdset );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
220 tv.tv_sec=0; tv.tv_usec=0;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
221
11015
5331f38c8db7 correct handling of select ret=0, patch by Jonas Jensen <jbj@knef.dk>
alex
parents: 10337
diff changeset
222 ready = select( vf->priv->stream_fd+1, &vf->priv->stream_fdset, NULL, NULL, &tv );
5331f38c8db7 correct handling of select ret=0, patch by Jonas Jensen <jbj@knef.dk>
alex
parents: 10337
diff changeset
223 if(ready > 0) {
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
224 // We've got new data from the FIFO
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
225
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
226 char cmd[20], args[100];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
227 int imgw,imgh,imgx,imgy,clear,imgalpha,pxsz=1,command;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
228 unsigned char *buffer = NULL;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
229
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
230 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
231 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
232 return FALSE;
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
233 }
8878
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
234 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
235
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
236 command=NONE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
237 if ( strncmp(cmd,"RGBA32",6)==0 ) { pxsz=4; command = IMG_RGBA32; }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
238 else if( strncmp(cmd,"ABGR32",6)==0 ) { pxsz=4; command = IMG_ABGR32; }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
239 else if( strncmp(cmd,"RGB24" ,5)==0 ) { pxsz=3; command = IMG_RGB24; }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
240 else if( strncmp(cmd,"BGR24" ,5)==0 ) { pxsz=3; command = IMG_BGR24; }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
241 else if( strncmp(cmd,"CLEAR" ,5)==0 ) { pxsz=1; command = CMD_CLEAR; }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
242 else if( strncmp(cmd,"ALPHA" ,5)==0 ) { pxsz=1; command = CMD_ALPHA; }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
243 else if( strncmp(cmd,"OPAQUE",6)==0 ) vf->priv->opaque=TRUE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
244 else if( strncmp(cmd,"SHOW", 4)==0 ) vf->priv->hidden=FALSE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
245 else if( strncmp(cmd,"HIDE", 4)==0 ) vf->priv->hidden=TRUE;
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17630
diff changeset
246 else if( strncmp(cmd,"FLUSH" ,5)==0 ) return vf_next_put_image(vf, dmpi, MP_NOPTS_VALUE);
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
247 else {
8878
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
248 mp_msg(MSGT_VFILTER, MSGL_WARN, "\nvf_bmovl: Unknown command: '%s'. Ignoring.\n", cmd);
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17630
diff changeset
249 return vf_next_put_image(vf, dmpi, MP_NOPTS_VALUE);
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
250 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
251
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
252 if(command == CMD_ALPHA) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
253 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
254 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
255 imgw, imgh, imgx, imgy, imgalpha);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
256 if(imgw==0 && imgh==0) vf->priv->opaque=FALSE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
257 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
258
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
259 if(command & IS_RAWIMG) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
260 sscanf( args, "%d %d %d %d %d %d",
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
261 &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
262 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
263 imgw, imgh, imgx, imgy, imgalpha, clear);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
264
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
265 buffer = malloc(imgw*imgh*pxsz);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
266 if(!buffer) {
8878
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
267 mp_msg(MSGT_VFILTER, MSGL_WARN, "\nvf_bmovl: Couldn't allocate temporary buffer! Skipping...\n\n");
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17630
diff changeset
268 return vf_next_put_image(vf, dmpi, MP_NOPTS_VALUE);
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
269 }
11620
39ae20e6ad9d fix bug when bmovl can't read the whole pic at once
attila
parents: 11015
diff changeset
270 /* pipes/sockets might need multiple calls to read(): */
39ae20e6ad9d fix bug when bmovl can't read the whole pic at once
attila
parents: 11015
diff changeset
271 want = (imgw*imgh*pxsz);
39ae20e6ad9d fix bug when bmovl can't read the whole pic at once
attila
parents: 11015
diff changeset
272 have = 0;
39ae20e6ad9d fix bug when bmovl can't read the whole pic at once
attila
parents: 11015
diff changeset
273 while (have < want) {
39ae20e6ad9d fix bug when bmovl can't read the whole pic at once
attila
parents: 11015
diff changeset
274 got = read( vf->priv->stream_fd, buffer+have, want-have );
39ae20e6ad9d fix bug when bmovl can't read the whole pic at once
attila
parents: 11015
diff changeset
275 if (got == 0) {
39ae20e6ad9d fix bug when bmovl can't read the whole pic at once
attila
parents: 11015
diff changeset
276 mp_msg(MSGT_VFILTER, MSGL_WARN, "\nvf_bmovl: premature EOF...\n\n");
39ae20e6ad9d fix bug when bmovl can't read the whole pic at once
attila
parents: 11015
diff changeset
277 break;
39ae20e6ad9d fix bug when bmovl can't read the whole pic at once
attila
parents: 11015
diff changeset
278 }
39ae20e6ad9d fix bug when bmovl can't read the whole pic at once
attila
parents: 11015
diff changeset
279 if (got < 0) {
39ae20e6ad9d fix bug when bmovl can't read the whole pic at once
attila
parents: 11015
diff changeset
280 mp_msg(MSGT_VFILTER, MSGL_WARN, "\nvf_bmovl: read error: %s\n\n", strerror(errno));
39ae20e6ad9d fix bug when bmovl can't read the whole pic at once
attila
parents: 11015
diff changeset
281 break;
39ae20e6ad9d fix bug when bmovl can't read the whole pic at once
attila
parents: 11015
diff changeset
282 }
39ae20e6ad9d fix bug when bmovl can't read the whole pic at once
attila
parents: 11015
diff changeset
283 have += got;
39ae20e6ad9d fix bug when bmovl can't read the whole pic at once
attila
parents: 11015
diff changeset
284 }
39ae20e6ad9d fix bug when bmovl can't read the whole pic at once
attila
parents: 11015
diff changeset
285 mp_msg(MSGT_VFILTER, MSGL_DBG2, "Got %d bytes... (wanted %d)\n", have, want );
7855
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(clear) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
288 memset( vf->priv->bitmap.y, 0, vf->priv->w*vf->priv->h );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
289 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
290 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
291 memset( vf->priv->bitmap.a, 0, vf->priv->w*vf->priv->h );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
292 memset( vf->priv->bitmap.oa, 0, vf->priv->w*vf->priv->h );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
293 vf->priv->x1 = dmpi->width;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
294 vf->priv->y1 = dmpi->height;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
295 vf->priv->x2 = vf->priv->y2 = 0;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
296 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
297 // Define how much of our bitmap that contains graphics!
22377
fd54975f9135 Use libavutil's av_clip* instead of unreadable MIN/MAX chaos.
reimar
parents: 19166
diff changeset
298 vf->priv->x1 = av_clip(imgx, 0, vf->priv->x1);
fd54975f9135 Use libavutil's av_clip* instead of unreadable MIN/MAX chaos.
reimar
parents: 19166
diff changeset
299 vf->priv->y1 = av_clip(imgy, 0, vf->priv->y1);
fd54975f9135 Use libavutil's av_clip* instead of unreadable MIN/MAX chaos.
reimar
parents: 19166
diff changeset
300 vf->priv->x2 = av_clip(imgx + imgw, vf->priv->x2, vf->priv->w);
fd54975f9135 Use libavutil's av_clip* instead of unreadable MIN/MAX chaos.
reimar
parents: 19166
diff changeset
301 vf->priv->y2 = av_clip(imgy + imgh, vf->priv->y2, vf->priv->h);
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
302 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
303
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
304 if( command == CMD_CLEAR ) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
305 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
306 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
307
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
308 for( ypos=imgy ; (ypos < (imgy+imgh)) && (ypos < vf->priv->y2) ; ypos++ ) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
309 memset( vf->priv->bitmap.y + (ypos*vf->priv->w) + imgx, 0, imgw );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
310 memset( vf->priv->bitmap.a + (ypos*vf->priv->w) + imgx, 0, imgw );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
311 memset( vf->priv->bitmap.oa + (ypos*vf->priv->w) + imgx, 0, imgw );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
312 if(ypos%2) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
313 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
314 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
315 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
316 } // Recalculate area that contains graphics
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
317 if( (imgx <= vf->priv->x1) && ( (imgw+imgx) >= vf->priv->x2) ) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
318 if( (imgy <= vf->priv->y1) && ( (imgy+imgh) >= vf->priv->y1) )
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
319 vf->priv->y1 = imgy+imgh;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
320 if( (imgy <= vf->priv->y2) && ( (imgy+imgh) >= vf->priv->y2) )
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
321 vf->priv->y2 = imgy;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
322 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
323 if( (imgy <= vf->priv->y1) && ( (imgy+imgh) >= vf->priv->y2) ) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
324 if( (imgx <= vf->priv->x1) && ( (imgx+imgw) >= vf->priv->x1) )
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
325 vf->priv->x1 = imgx+imgw;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
326 if( (imgx <= vf->priv->x2) && ( (imgx+imgw) >= vf->priv->x2) )
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
327 vf->priv->x2 = imgx;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
328 }
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17630
diff changeset
329 return vf_next_put_image(vf, dmpi, MP_NOPTS_VALUE);
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
330 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
331
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
332 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
333 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
334 if(command & IS_RAWIMG) buf_pos = (buf_y * imgw * pxsz) + buf_x;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
335 pos = ((buf_y+imgy) * vf->priv->w) + ((buf_x/pxsz)+imgx);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
336
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
337 switch(command) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
338 case IMG_RGBA32:
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
339 red = buffer[buf_pos+0];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
340 green = buffer[buf_pos+1];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
341 blue = buffer[buf_pos+2];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
342 alpha = buffer[buf_pos+3];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
343 break;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
344 case IMG_ABGR32:
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
345 alpha = buffer[buf_pos+0];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
346 blue = buffer[buf_pos+1];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
347 green = buffer[buf_pos+2];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
348 red = buffer[buf_pos+3];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
349 break;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
350 case IMG_RGB24:
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
351 red = buffer[buf_pos+0];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
352 green = buffer[buf_pos+1];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
353 blue = buffer[buf_pos+2];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
354 alpha = 0xFF;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
355 break;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
356 case IMG_BGR24:
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
357 blue = buffer[buf_pos+0];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
358 green = buffer[buf_pos+1];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
359 red = buffer[buf_pos+2];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
360 alpha = 0xFF;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
361 break;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
362 case CMD_ALPHA:
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
363 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
364 break;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
365 default:
8878
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
366 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
367 return FALSE;
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
368 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
369 if( command & IS_RAWIMG ) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
370 vf->priv->bitmap.y[pos] = rgb2y(red,green,blue);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
371 vf->priv->bitmap.oa[pos] = alpha;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
372 vf->priv->bitmap.a[pos] = INRANGE((alpha+imgalpha),0,255);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
373 if((buf_y%2) && ((buf_x/pxsz)%2)) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
374 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
375 vf->priv->bitmap.u[pos] = rgb2u(red,green,blue);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
376 vf->priv->bitmap.v[pos] = rgb2v(red,green,blue);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
377 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
378 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
379 } // for buf_x
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
380 } // for buf_y
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
381 free (buffer);
11015
5331f38c8db7 correct handling of select ret=0, patch by Jonas Jensen <jbj@knef.dk>
alex
parents: 10337
diff changeset
382 } else if(ready < 0) {
5331f38c8db7 correct handling of select ret=0, patch by Jonas Jensen <jbj@knef.dk>
alex
parents: 10337
diff changeset
383 mp_msg(MSGT_VFILTER, MSGL_WARN, "\nvf_bmovl: Error %d in fifo: %s\n\n", errno, strerror(errno));
5331f38c8db7 correct handling of select ret=0, patch by Jonas Jensen <jbj@knef.dk>
alex
parents: 10337
diff changeset
384 }
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
385 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
386
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17630
diff changeset
387 if(vf->priv->hidden) return vf_next_put_image(vf, dmpi, MP_NOPTS_VALUE);
7855
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 if(vf->priv->opaque) { // Just copy buffer memory to screen
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
390 for( ypos=vf->priv->y1 ; ypos < vf->priv->y2 ; ypos++ ) {
23457
a124f3abc1ec Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents: 22752
diff changeset
391 fast_memcpy( dmpi->planes[0] + (ypos*dmpi->stride[0]) + vf->priv->x1,
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
392 vf->priv->bitmap.y + (ypos*vf->priv->w) + vf->priv->x1,
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
393 vf->priv->x2 - vf->priv->x1 );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
394 if(ypos%2) {
23457
a124f3abc1ec Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents: 22752
diff changeset
395 fast_memcpy( dmpi->planes[1] + ((ypos/2)*dmpi->stride[1]) + (vf->priv->x1/2),
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
396 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
397 (vf->priv->x2 - vf->priv->x1)/2 );
23457
a124f3abc1ec Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents: 22752
diff changeset
398 fast_memcpy( dmpi->planes[2] + ((ypos/2)*dmpi->stride[2]) + (vf->priv->x1/2),
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
399 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
400 (vf->priv->x2 - vf->priv->x1)/2 );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
401 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
402 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
403 } else { // Blit the bitmap to the videoscreen, pixel for pixel
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
404 for( ypos=vf->priv->y1 ; ypos < vf->priv->y2 ; ypos++ ) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
405 for ( xpos=vf->priv->x1 ; xpos < vf->priv->x2 ; xpos++ ) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
406 pos = (ypos * dmpi->stride[0]) + xpos;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
407
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
408 alpha = vf->priv->bitmap.a[pos];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
409
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
410 if (alpha == 0) continue; // Completly transparent pixel
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
411
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
412 if (alpha == 255) { // Opaque pixel
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
413 dmpi->planes[0][pos] = vf->priv->bitmap.y[pos];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
414 if ((ypos%2) && (xpos%2)) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
415 pos = ( (ypos/2) * dmpi->stride[1] ) + (xpos/2);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
416 dmpi->planes[1][pos] = vf->priv->bitmap.u[pos];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
417 dmpi->planes[2][pos] = vf->priv->bitmap.v[pos];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
418 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
419 } 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
420 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
421 ((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
422 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
423
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
424 if ((ypos%2) && (xpos%2)) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
425 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
426
7924a60d833b This is a simple patch to change the alpha blending code in bmovl to use
arpi
parents: 8878
diff changeset
427 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
428 ((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
429 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
430
7924a60d833b This is a simple patch to change the alpha blending code in bmovl to use
arpi
parents: 8878
diff changeset
431 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
432 ((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
433 alpha * (int)vf->priv->bitmap.v[pos]) >> 8;
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
434 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
435 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
436 } // for xpos
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
437 } // for ypos
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
438 } // if !opaque
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17630
diff changeset
439 return vf_next_put_image(vf, dmpi, MP_NOPTS_VALUE);
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
440 } // put_image
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
441
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
442 static int
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
443 vf_open(vf_instance_t* vf, char* args)
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
444 {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
445 char filename[1000];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
446
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
447 vf->config = config;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
448 vf->put_image = put_image;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
449 vf->query_format = query_format;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
450 vf->uninit = uninit;
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 vf->priv = malloc(sizeof(struct vf_priv_s));
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
453
10337
744d56a47d09 Fix SIG11 if no args given
albeu
parents: 9832
diff changeset
454 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
455 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
456 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
457 return FALSE;
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
458 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
459
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
460 vf->priv->stream_fd = open(filename, O_RDWR);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
461 if(vf->priv->stream_fd >= 0) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
462 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
463 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
464 } else {
8878
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
465 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
466 vf->priv->stream_fd = -1;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
467 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
468
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
469 return TRUE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
470 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
471
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
472 vf_info_t vf_info_bmovl = {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
473 "Read bitmaps from a FIFO and display them in window",
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
474 "bmovl",
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
475 "Per Wigren",
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
476 "",
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9131
diff changeset
477 vf_open,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9131
diff changeset
478 NULL
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
479 };