annotate libmpcodecs/vf_bmovl.c @ 34544:36ef1a75aa48

Some hacks to allow stream_ffmpeg to compile against newer FFmpeg. Keep the old code so that it is still possible to compile against older FFmpeg without using internal API.
author reimar
date Sat, 28 Jan 2012 13:47:01 +0000
parents a972c1a4a012
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27509
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 24969
diff changeset
1 /*
28924
d5d66bff938a cosmetics: Remove file names from file header, it only causes trouble.
diego
parents: 27509
diff changeset
2 * BitMap OVerLay video filter for MPlayer
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
3 *
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
4 * (C) 2002 Per Wigren <wigren@home.se>
27509
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 24969
diff changeset
5 *
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 24969
diff changeset
6 * This file is part of MPlayer.
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 24969
diff changeset
7 *
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 24969
diff changeset
8 * MPlayer is free software; you can redistribute it and/or modify
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 24969
diff changeset
9 * it under the terms of the GNU General Public License as published by
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 24969
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 24969
diff changeset
11 * (at your option) any later version.
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
12 *
27509
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 24969
diff changeset
13 * MPlayer is distributed in the hope that it will be useful,
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 24969
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 24969
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 24969
diff changeset
16 * GNU General Public License for more details.
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 24969
diff changeset
17 *
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 24969
diff changeset
18 * You should have received a copy of the GNU General Public License along
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 24969
diff changeset
19 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 24969
diff changeset
20 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 24969
diff changeset
21 */
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 24969
diff changeset
22
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 24969
diff changeset
23 /*
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
24 * 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
25 * and display them in the window.
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
26 *
7895
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
27 * Commands are:
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
28 *
7895
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
29 * RGBA32 width height xpos ypos alpha clear
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
30 * * Followed by width*height*4 bytes of raw RGBA32 data.
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
31 * ABGR32 width height xpos ypos alpha clear
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
32 * * Followed by width*height*4 bytes of raw ABGR32 data.
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
33 * RGB24 width height xpos ypos alpha clear
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
34 * * Followed by width*height*3 bytes of raw RGB32 data.
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
35 * BGR24 width height xpos ypos alpha clear
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
36 * * Followed by width*height*3 bytes of raw BGR32 data.
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
37 *
7895
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
38 * ALPHA width height xpos ypos alpha
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
39 * * Change alpha for area
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
40 * CLEAR width height xpos ypos
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
41 * * Clear area
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
42 * OPAQUE
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
43 * * Disable all alpha transparency!
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
44 * Send "ALPHA 0 0 0 0 0" to enable again!
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
45 * HIDE
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
46 * * Hide bitmap
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
47 * SHOW
fcd8c5d6795d updated comments
arpi
parents: 7858
diff changeset
48 * * Show bitmap
7855
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 * Arguments are:
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
51 * width, height Size of image/area
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
52 * xpos, ypos Start blitting at X/Y position
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
53 * alpha Set alpha difference. 0 means same as original.
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
54 * 255 makes everything opaque
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
55 * -255 makes everything transparent
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
56 * 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
57 * ALPHA-commands to set the area to -225, -200, -175 etc
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
58 * for a nice fade-in-effect! ;)
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
59 * clear Clear the framebuffer before blitting. 1 means clear.
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
60 * 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
61 * 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
62 * everytime a small part of the screen is updated.
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
63 *
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
64 * Arguments for the filter are hidden:opaque:fifo
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
65 * 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
66 * and use /tmp/myfifo.fifo as the fifo.
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
67 *
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
68 * If you find bugs, please send me patches! ;)
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
69 *
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
70 * 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
71 * anyone is free to use it! ;)
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
72 *
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
73 */
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
74
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
75 #include <stdio.h>
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
76 #include <stdlib.h>
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
77 #include <string.h>
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
78 #include <unistd.h>
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
79 #include <errno.h>
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
80 #include <sys/stat.h>
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
81 #include <sys/types.h>
7858
6ccc14497807 time.h required for select()
arpi
parents: 7855
diff changeset
82 #include <sys/time.h>
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
83 #include <fcntl.h>
17630
7c4eef408b6b include config.h before includes that need it
iive
parents: 17012
diff changeset
84 #include "config.h"
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
85 #include "mp_image.h"
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
86 #include "vf.h"
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
87 #include "img_format.h"
9832
298e261aecd7 disable vf_bmovl for systems without posix select
faust3
parents: 9593
diff changeset
88
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16886
diff changeset
89 #include "mp_msg.h"
22377
fd54975f9135 Use libavutil's av_clip* instead of unreadable MIN/MAX chaos.
reimar
parents: 19166
diff changeset
90 #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
91
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16886
diff changeset
92 #include "libvo/fastmemcpy.h"
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
93
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
94 #define IS_RAWIMG 0x100
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
95 #define IS_IMG 0x200
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
96
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
97 #define NONE 0x000
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
98 #define IMG_RGBA32 0x101
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
99 #define IMG_ABGR32 0x102
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
100 #define IMG_RGB24 0x103
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
101 #define IMG_BGR24 0x104
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
102 #define IMG_PNG 0x201
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
103 #define CMD_CLEAR 0x001
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
104 #define CMD_ALPHA 0x002
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
105
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
106 #define TRUE 1
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
107 #define FALSE 0
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 #define INRANGE(a,b,c) ( ((a) < (b)) ? (b) : ( ((a) > (c)) ? (c) : (a) ) )
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
110
9131
67d28a3f918a The code for converting RGB to YUV in bmovl is slow because it uses
arpi
parents: 9110
diff changeset
111 #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
112 #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
113 #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
114
8878
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
115 #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
116
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
117 struct vf_priv_s {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
118 int w, h, x1, y1, x2, y2;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
119 struct {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
120 unsigned char *y, *u, *v, *a, *oa;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
121 } bitmap;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
122 int stream_fd;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
123 fd_set stream_fdset;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
124 int opaque, hidden;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
125 };
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
126
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
127 static int
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
128 query_format(struct vf_instance *vf, unsigned int fmt){
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
129 if(fmt==IMGFMT_YV12) return VFCAP_CSP_SUPPORTED;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
130 return 0;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
131 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
132
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 static int
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
135 config(struct vf_instance *vf,
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
136 int width, int height, int d_width, int d_height,
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
137 unsigned int flags, unsigned int outfmt)
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->bitmap.y = malloc( width*height );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
140 vf->priv->bitmap.u = malloc( width*height/4 );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
141 vf->priv->bitmap.v = malloc( width*height/4 );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
142 vf->priv->bitmap.a = malloc( width*height );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
143 vf->priv->bitmap.oa = malloc( width*height );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
144 if(!( vf->priv->bitmap.y &&
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
145 vf->priv->bitmap.u &&
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
146 vf->priv->bitmap.v &&
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
147 vf->priv->bitmap.a &&
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
148 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
149 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
150 return FALSE;
7855
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
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
153 // Set default to black...
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
154 memset( vf->priv->bitmap.u, 128, width*height/4 );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
155 memset( vf->priv->bitmap.v, 128, width*height/4 );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
156
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
157 vf->priv->w = vf->priv->x1 = width;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
158 vf->priv->h = vf->priv->y1 = height;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
159 vf->priv->y2 = vf->priv->x2 = 0;
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 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
162 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
163
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
164 static void
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
165 uninit(struct vf_instance *vf)
7855
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 if(vf->priv) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
168 free(vf->priv->bitmap.y);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
169 free(vf->priv->bitmap.u);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
170 free(vf->priv->bitmap.v);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
171 free(vf->priv->bitmap.a);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
172 free(vf->priv->bitmap.oa);
16886
ea32158ad57b close stream_fd on uninit. Fixes bugzilla bug #400.
reimar
parents: 11620
diff changeset
173 if (vf->priv->stream_fd >= 0)
ea32158ad57b close stream_fd on uninit. Fixes bugzilla bug #400.
reimar
parents: 11620
diff changeset
174 close(vf->priv->stream_fd);
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
175 free(vf->priv);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
176 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
177 }
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 static int
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
180 _read_cmd(int fd, char *cmd, char *args) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
181 int done=FALSE, pos=0;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
182 char tmp;
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 while(!done) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
185 if(! read( fd, &tmp, 1 ) ) return FALSE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
186 if( (tmp>='A' && tmp<='Z') || (tmp>='0' && tmp<='9') )
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
187 cmd[pos]=tmp;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
188 else if(tmp == ' ') {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
189 cmd[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 else if(tmp == '\n') {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
193 cmd[pos]='\0';
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
194 args[0]='\0';
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 if(pos++>20) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
198 cmd[0]='\0';
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
199 return TRUE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
200 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
201 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
202 done=FALSE; pos=0;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
203 while(!done) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
204 if(! read( fd, &tmp, 1 ) ) return FALSE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
205 if( (tmp >= ' ') && (pos<100) ) args[pos]=tmp;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
206 else {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
207 args[pos]='\0';
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
208 done=TRUE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
209 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
210 pos++;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
211 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
212 return TRUE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
213 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28924
diff changeset
214
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
215
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
216 static int
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
217 put_image(struct vf_instance *vf, mp_image_t* mpi, double pts){
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
218 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
219 int have, got, want;
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
220 int xpos=0, ypos=0, pos=0;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
221 unsigned char red=0, green=0, blue=0;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
222 int alpha;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
223 mp_image_t* dmpi;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
224
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
225 dmpi = vf_get_image(vf->next, mpi->imgfmt, MP_IMGTYPE_TEMP,
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
226 MP_IMGFLAG_ACCEPT_STRIDE | MP_IMGFLAG_PREFER_ALIGNED_STRIDE,
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
227 mpi->w, mpi->h);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
228
19166
d36048cad8c4 in some cases, vf_bmovl produces junk due to source and
gpoirier
parents: 17906
diff changeset
229 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
230 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
231 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
232
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
233 if(vf->priv->stream_fd >= 0) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
234 struct timeval tv;
11015
5331f38c8db7 correct handling of select ret=0, patch by Jonas Jensen <jbj@knef.dk>
alex
parents: 10337
diff changeset
235 int ready;
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
236
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
237 FD_SET( vf->priv->stream_fd, &vf->priv->stream_fdset );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
238 tv.tv_sec=0; tv.tv_usec=0;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
239
11015
5331f38c8db7 correct handling of select ret=0, patch by Jonas Jensen <jbj@knef.dk>
alex
parents: 10337
diff changeset
240 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
241 if(ready > 0) {
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
242 // We've got new data from the FIFO
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
243
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
244 char cmd[20], args[100];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
245 int imgw,imgh,imgx,imgy,clear,imgalpha,pxsz=1,command;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
246 unsigned char *buffer = NULL;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
247
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
248 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
249 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
250 return FALSE;
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
251 }
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: Got: %s+%s\n", cmd, args);
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
253
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
254 command=NONE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
255 if ( strncmp(cmd,"RGBA32",6)==0 ) { pxsz=4; command = IMG_RGBA32; }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
256 else if( strncmp(cmd,"ABGR32",6)==0 ) { pxsz=4; command = IMG_ABGR32; }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
257 else if( strncmp(cmd,"RGB24" ,5)==0 ) { pxsz=3; command = IMG_RGB24; }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
258 else if( strncmp(cmd,"BGR24" ,5)==0 ) { pxsz=3; command = IMG_BGR24; }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
259 else if( strncmp(cmd,"CLEAR" ,5)==0 ) { pxsz=1; command = CMD_CLEAR; }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
260 else if( strncmp(cmd,"ALPHA" ,5)==0 ) { pxsz=1; command = CMD_ALPHA; }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
261 else if( strncmp(cmd,"OPAQUE",6)==0 ) vf->priv->opaque=TRUE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
262 else if( strncmp(cmd,"SHOW", 4)==0 ) vf->priv->hidden=FALSE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
263 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
264 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
265 else {
8878
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
266 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
267 return vf_next_put_image(vf, dmpi, MP_NOPTS_VALUE);
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
268 }
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(command == CMD_ALPHA) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
271 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
272 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
273 imgw, imgh, imgx, imgy, imgalpha);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
274 if(imgw==0 && imgh==0) vf->priv->opaque=FALSE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
275 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
276
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
277 if(command & IS_RAWIMG) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
278 sscanf( args, "%d %d %d %d %d %d",
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
279 &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
280 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
281 imgw, imgh, imgx, imgy, imgalpha, clear);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
282
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
283 buffer = malloc(imgw*imgh*pxsz);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
284 if(!buffer) {
8878
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
285 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
286 return vf_next_put_image(vf, dmpi, MP_NOPTS_VALUE);
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
287 }
11620
39ae20e6ad9d fix bug when bmovl can't read the whole pic at once
attila
parents: 11015
diff changeset
288 /* 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
289 want = (imgw*imgh*pxsz);
39ae20e6ad9d fix bug when bmovl can't read the whole pic at once
attila
parents: 11015
diff changeset
290 have = 0;
39ae20e6ad9d fix bug when bmovl can't read the whole pic at once
attila
parents: 11015
diff changeset
291 while (have < want) {
39ae20e6ad9d fix bug when bmovl can't read the whole pic at once
attila
parents: 11015
diff changeset
292 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
293 if (got == 0) {
39ae20e6ad9d fix bug when bmovl can't read the whole pic at once
attila
parents: 11015
diff changeset
294 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
295 break;
39ae20e6ad9d fix bug when bmovl can't read the whole pic at once
attila
parents: 11015
diff changeset
296 }
39ae20e6ad9d fix bug when bmovl can't read the whole pic at once
attila
parents: 11015
diff changeset
297 if (got < 0) {
39ae20e6ad9d fix bug when bmovl can't read the whole pic at once
attila
parents: 11015
diff changeset
298 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
299 break;
39ae20e6ad9d fix bug when bmovl can't read the whole pic at once
attila
parents: 11015
diff changeset
300 }
39ae20e6ad9d fix bug when bmovl can't read the whole pic at once
attila
parents: 11015
diff changeset
301 have += got;
39ae20e6ad9d fix bug when bmovl can't read the whole pic at once
attila
parents: 11015
diff changeset
302 }
39ae20e6ad9d fix bug when bmovl can't read the whole pic at once
attila
parents: 11015
diff changeset
303 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
304
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
305 if(clear) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
306 memset( vf->priv->bitmap.y, 0, vf->priv->w*vf->priv->h );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
307 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
308 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
309 memset( vf->priv->bitmap.a, 0, vf->priv->w*vf->priv->h );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
310 memset( vf->priv->bitmap.oa, 0, vf->priv->w*vf->priv->h );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
311 vf->priv->x1 = dmpi->width;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
312 vf->priv->y1 = dmpi->height;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
313 vf->priv->x2 = vf->priv->y2 = 0;
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 // 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
316 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
317 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
318 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
319 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
320 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28924
diff changeset
321
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
322 if( command == CMD_CLEAR ) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
323 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
324 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
325
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
326 for( ypos=imgy ; (ypos < (imgy+imgh)) && (ypos < vf->priv->y2) ; ypos++ ) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
327 memset( vf->priv->bitmap.y + (ypos*vf->priv->w) + imgx, 0, imgw );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
328 memset( vf->priv->bitmap.a + (ypos*vf->priv->w) + imgx, 0, imgw );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
329 memset( vf->priv->bitmap.oa + (ypos*vf->priv->w) + imgx, 0, imgw );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
330 if(ypos%2) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
331 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
332 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
333 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
334 } // Recalculate area that contains graphics
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
335 if( (imgx <= vf->priv->x1) && ( (imgw+imgx) >= vf->priv->x2) ) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
336 if( (imgy <= vf->priv->y1) && ( (imgy+imgh) >= vf->priv->y1) )
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
337 vf->priv->y1 = imgy+imgh;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
338 if( (imgy <= vf->priv->y2) && ( (imgy+imgh) >= vf->priv->y2) )
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
339 vf->priv->y2 = imgy;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
340 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
341 if( (imgy <= vf->priv->y1) && ( (imgy+imgh) >= vf->priv->y2) ) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
342 if( (imgx <= vf->priv->x1) && ( (imgx+imgw) >= vf->priv->x1) )
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
343 vf->priv->x1 = imgx+imgw;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
344 if( (imgx <= vf->priv->x2) && ( (imgx+imgw) >= vf->priv->x2) )
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
345 vf->priv->x2 = imgx;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
346 }
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17630
diff changeset
347 return vf_next_put_image(vf, dmpi, MP_NOPTS_VALUE);
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
348 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
349
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
350 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
351 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
352 if(command & IS_RAWIMG) buf_pos = (buf_y * imgw * pxsz) + buf_x;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
353 pos = ((buf_y+imgy) * vf->priv->w) + ((buf_x/pxsz)+imgx);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
354
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
355 switch(command) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
356 case IMG_RGBA32:
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
357 red = 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 blue = buffer[buf_pos+2];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
360 alpha = buffer[buf_pos+3];
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 IMG_ABGR32:
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
363 alpha = buffer[buf_pos+0];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
364 blue = buffer[buf_pos+1];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
365 green = buffer[buf_pos+2];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
366 red = buffer[buf_pos+3];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
367 break;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
368 case IMG_RGB24:
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
369 red = buffer[buf_pos+0];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
370 green = buffer[buf_pos+1];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
371 blue = buffer[buf_pos+2];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
372 alpha = 0xFF;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
373 break;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
374 case IMG_BGR24:
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
375 blue = buffer[buf_pos+0];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
376 green = buffer[buf_pos+1];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
377 red = buffer[buf_pos+2];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
378 alpha = 0xFF;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
379 break;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
380 case CMD_ALPHA:
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
381 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
382 break;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
383 default:
8878
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
384 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
385 return FALSE;
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
386 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
387 if( command & IS_RAWIMG ) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
388 vf->priv->bitmap.y[pos] = rgb2y(red,green,blue);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
389 vf->priv->bitmap.oa[pos] = alpha;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
390 vf->priv->bitmap.a[pos] = INRANGE((alpha+imgalpha),0,255);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
391 if((buf_y%2) && ((buf_x/pxsz)%2)) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
392 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
393 vf->priv->bitmap.u[pos] = rgb2u(red,green,blue);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
394 vf->priv->bitmap.v[pos] = rgb2v(red,green,blue);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
395 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
396 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
397 } // for buf_x
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
398 } // for buf_y
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
399 free (buffer);
11015
5331f38c8db7 correct handling of select ret=0, patch by Jonas Jensen <jbj@knef.dk>
alex
parents: 10337
diff changeset
400 } else if(ready < 0) {
5331f38c8db7 correct handling of select ret=0, patch by Jonas Jensen <jbj@knef.dk>
alex
parents: 10337
diff changeset
401 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
402 }
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
403 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
404
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17630
diff changeset
405 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
406
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
407 if(vf->priv->opaque) { // Just copy buffer memory to screen
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
408 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
409 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
410 vf->priv->bitmap.y + (ypos*vf->priv->w) + vf->priv->x1,
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
411 vf->priv->x2 - vf->priv->x1 );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
412 if(ypos%2) {
23457
a124f3abc1ec Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents: 22752
diff changeset
413 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
414 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
415 (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
416 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
417 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
418 (vf->priv->x2 - vf->priv->x1)/2 );
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
419 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
420 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
421 } else { // Blit the bitmap to the videoscreen, pixel for pixel
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
422 for( ypos=vf->priv->y1 ; ypos < vf->priv->y2 ; ypos++ ) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
423 for ( xpos=vf->priv->x1 ; xpos < vf->priv->x2 ; xpos++ ) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
424 pos = (ypos * dmpi->stride[0]) + xpos;
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 alpha = vf->priv->bitmap.a[pos];
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 if (alpha == 0) continue; // Completly transparent pixel
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
429
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
430 if (alpha == 255) { // Opaque pixel
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
431 dmpi->planes[0][pos] = vf->priv->bitmap.y[pos];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
432 if ((ypos%2) && (xpos%2)) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
433 pos = ( (ypos/2) * dmpi->stride[1] ) + (xpos/2);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
434 dmpi->planes[1][pos] = vf->priv->bitmap.u[pos];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
435 dmpi->planes[2][pos] = vf->priv->bitmap.v[pos];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
436 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
437 } else { // Alphablended pixel
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28924
diff changeset
438 dmpi->planes[0][pos] =
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28924
diff changeset
439 ((255 - alpha) * (int)dmpi->planes[0][pos] +
9110
7924a60d833b This is a simple patch to change the alpha blending code in bmovl to use
arpi
parents: 8878
diff changeset
440 alpha * (int)vf->priv->bitmap.y[pos]) >> 8;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28924
diff changeset
441
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
442 if ((ypos%2) && (xpos%2)) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
443 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
444
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28924
diff changeset
445 dmpi->planes[1][pos] =
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28924
diff changeset
446 ((255 - alpha) * (int)dmpi->planes[1][pos] +
9110
7924a60d833b This is a simple patch to change the alpha blending code in bmovl to use
arpi
parents: 8878
diff changeset
447 alpha * (int)vf->priv->bitmap.u[pos]) >> 8;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28924
diff changeset
448
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28924
diff changeset
449 dmpi->planes[2][pos] =
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28924
diff changeset
450 ((255 - alpha) * (int)dmpi->planes[2][pos] +
9110
7924a60d833b This is a simple patch to change the alpha blending code in bmovl to use
arpi
parents: 8878
diff changeset
451 alpha * (int)vf->priv->bitmap.v[pos]) >> 8;
7855
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 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
454 } // for xpos
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
455 } // for ypos
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
456 } // 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
457 return vf_next_put_image(vf, dmpi, MP_NOPTS_VALUE);
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
458 } // put_image
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 static int
30638
a7b908875c14 Rename open() vf initialization function to vf_open().
diego
parents: 29263
diff changeset
461 vf_open(vf_instance_t *vf, char *args)
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
462 {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
463 char filename[1000];
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
464
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
465 vf->config = config;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
466 vf->put_image = put_image;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
467 vf->query_format = query_format;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
468 vf->uninit = uninit;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
469
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
470 vf->priv = malloc(sizeof(struct vf_priv_s));
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
471
10337
744d56a47d09 Fix SIG11 if no args given
albeu
parents: 9832
diff changeset
472 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
473 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
474 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
475 return FALSE;
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
476 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
477
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
478 vf->priv->stream_fd = open(filename, O_RDWR);
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
479 if(vf->priv->stream_fd >= 0) {
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
480 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
481 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
482 } else {
8878
12e69a0d5a67 may not be perfect but it's certainly a start. feel free to change
rfelker
parents: 7895
diff changeset
483 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
484 vf->priv->stream_fd = -1;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
485 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
486
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
487 return TRUE;
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
488 }
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
489
24969
c2b7ba444ade begin moving const filter data to .text/.rodata sections
rfelker
parents: 23457
diff changeset
490 const vf_info_t vf_info_bmovl = {
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
491 "Read bitmaps from a FIFO and display them in window",
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
492 "bmovl",
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
493 "Per Wigren",
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
494 "",
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9131
diff changeset
495 vf_open,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9131
diff changeset
496 NULL
7855
fe88f7403d64 -vop bmovl - BitMap OVerLay videofilter for MPlayer
arpi
parents:
diff changeset
497 };