annotate libvo/vo_ggi.c @ 15558:3aee7daaa8e5

Fix ADCTRL_SKIP_FRAME and add ADCTRL_RESYNC_STREAM
author hzoli
date Tue, 24 May 2005 06:39:01 +0000
parents 04c47e9acab3
children fd51fd1ff231
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1172
290353337b44 hardly modified, keyboard handling is ok. aspect implemented, but bugging :)
al3x
parents: 1148
diff changeset
1 /*
1132
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
2 vo_ggi.c - General Graphics Interface (GGI) Renderer for MPlayer
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
3
10368
6fb8a6a4a071 removing my (nonworking) email address
alex
parents: 9380
diff changeset
4 (C) Alex Beregszaszi
1132
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
5
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
6 Uses libGGI - http://www.ggi-project.org/
1141
c33f8b7488d1 cleaned up, and merged with my version, also code will be faster too
al3x
parents: 1132
diff changeset
7
4841
5928e94c0d5f older API fixes, support for async mode
alex
parents: 4831
diff changeset
8 TODO:
5928e94c0d5f older API fixes, support for async mode
alex
parents: 4831
diff changeset
9 * check on many devices
5703
efd2518b174e minor fixes and flipping support
alex
parents: 5637
diff changeset
10 * implement gamma handling (VAA isn't obsoleted?)
efd2518b174e minor fixes and flipping support
alex
parents: 5637
diff changeset
11
efd2518b174e minor fixes and flipping support
alex
parents: 5637
diff changeset
12 BUGS:
11110
54c7f0df68e9 non-directbuffer and slices support
alex
parents: 10368
diff changeset
13 * palettized playback has bad colors, probably swapped palette?
5703
efd2518b174e minor fixes and flipping support
alex
parents: 5637
diff changeset
14 * fbdev & DR produces two downscaled images
efd2518b174e minor fixes and flipping support
alex
parents: 5637
diff changeset
15 * fbdev & FLIP (& DR) produces no image
4841
5928e94c0d5f older API fixes, support for async mode
alex
parents: 4831
diff changeset
16
4828
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
17 Thanks to Andreas Beck for his patches.
5703
efd2518b174e minor fixes and flipping support
alex
parents: 5637
diff changeset
18
4841
5928e94c0d5f older API fixes, support for async mode
alex
parents: 4831
diff changeset
19 Many thanks to Atmosfear, he hacked this driver to work with Planar
1141
c33f8b7488d1 cleaned up, and merged with my version, also code will be faster too
al3x
parents: 1132
diff changeset
20 formats, and he fixed the RGB handling.
1132
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
21 */
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
22
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
23 #include <stdio.h>
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
24 #include <stdlib.h>
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
25 #include <string.h>
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
26 #include <errno.h>
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
27
4828
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
28 #include "mp_msg.h"
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
29
12650
ac3fd2ff2561 Unify the config.h #include, use "config.h" instead of "../config.h"
diego
parents: 11110
diff changeset
30 #include "config.h"
1132
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
31 #include "video_out.h"
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
32 #include "video_out_internal.h"
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
33
1141
c33f8b7488d1 cleaned up, and merged with my version, also code will be faster too
al3x
parents: 1132
diff changeset
34 #include "fastmemcpy.h"
1132
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
35
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
36 #include <ggi/ggi.h>
1141
c33f8b7488d1 cleaned up, and merged with my version, also code will be faster too
al3x
parents: 1132
diff changeset
37
15406
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
38 #ifdef HAVE_GGIWMH
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
39 #include <ggi/wmh.h>
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
40 #endif
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
41
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
42 #ifdef HAVE_GGIWMH
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
43 extern int vo_ontop; /* Window on top */
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
44 #endif
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
45
4831
9153d1275b6d do not fault if no directbuffer available (for example: ggi display-multi)
alex
parents: 4830
diff changeset
46 /* maximum buffers */
5703
efd2518b174e minor fixes and flipping support
alex
parents: 5637
diff changeset
47 #undef GGI_FLIP
5637
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
48
8148
5b39e79af5fe removed get_info, using the same sheme as in libmpcodecs instead
alex
parents: 7124
diff changeset
49 static vo_info_t info =
1132
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
50 {
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
51 "General Graphics Interface (GGI) output",
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
52 "ggi",
10368
6fb8a6a4a071 removing my (nonworking) email address
alex
parents: 9380
diff changeset
53 "Alex Beregszaszi",
14021
f0236d5ba7a7 Remove broken support for directbuffer and including frame-handling use.
iive
parents: 13787
diff changeset
54 "major"
1132
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
55 };
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
56
8148
5b39e79af5fe removed get_info, using the same sheme as in libmpcodecs instead
alex
parents: 7124
diff changeset
57 LIBVO_EXTERN (ggi)
5b39e79af5fe removed get_info, using the same sheme as in libmpcodecs instead
alex
parents: 7124
diff changeset
58
1172
290353337b44 hardly modified, keyboard handling is ok. aspect implemented, but bugging :)
al3x
parents: 1148
diff changeset
59 static struct ggi_conf_s {
290353337b44 hardly modified, keyboard handling is ok. aspect implemented, but bugging :)
al3x
parents: 1148
diff changeset
60 char *driver;
290353337b44 hardly modified, keyboard handling is ok. aspect implemented, but bugging :)
al3x
parents: 1148
diff changeset
61
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
62 ggi_visual_t parentvis;
1172
290353337b44 hardly modified, keyboard handling is ok. aspect implemented, but bugging :)
al3x
parents: 1148
diff changeset
63 ggi_visual_t vis;
4828
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
64
4830
2c1dd0b15622 reworked :) should work on low bpp outputs
alex
parents: 4828
diff changeset
65 /* source image format */
2c1dd0b15622 reworked :) should work on low bpp outputs
alex
parents: 4828
diff changeset
66 int srcwidth;
2c1dd0b15622 reworked :) should work on low bpp outputs
alex
parents: 4828
diff changeset
67 int srcheight;
4828
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
68 int srcformat;
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
69 int srcdepth;
5703
efd2518b174e minor fixes and flipping support
alex
parents: 5637
diff changeset
70 int srcbpp;
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
71
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
72 /* dirty region */
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
73 struct {
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
74 int x1, y1;
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
75 int x2, y2;
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
76 } flushregion;
1172
290353337b44 hardly modified, keyboard handling is ok. aspect implemented, but bugging :)
al3x
parents: 1148
diff changeset
77
290353337b44 hardly modified, keyboard handling is ok. aspect implemented, but bugging :)
al3x
parents: 1148
diff changeset
78 /* destination */
4830
2c1dd0b15622 reworked :) should work on low bpp outputs
alex
parents: 4828
diff changeset
79 int dstwidth;
2c1dd0b15622 reworked :) should work on low bpp outputs
alex
parents: 4828
diff changeset
80 int dstheight;
4841
5928e94c0d5f older API fixes, support for async mode
alex
parents: 4831
diff changeset
81
5928e94c0d5f older API fixes, support for async mode
alex
parents: 4831
diff changeset
82 int async;
5703
efd2518b174e minor fixes and flipping support
alex
parents: 5637
diff changeset
83
efd2518b174e minor fixes and flipping support
alex
parents: 5637
diff changeset
84 int voflags;
1172
290353337b44 hardly modified, keyboard handling is ok. aspect implemented, but bugging :)
al3x
parents: 1148
diff changeset
85 } ggi_conf;
1132
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
86
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
87
15406
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
88 #ifdef HAVE_GGIWMH
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
89 static void window_ontop(void)
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
90 {
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
91 mp_msg(MSGT_VO, MSGL_V, "[ggi] debug: window_ontop() called\n");
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
92 ggiWmhZOrder(ggi_conf.parentvis, ZO_TOP);
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
93 return;
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
94 }
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
95 #endif
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
96
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
97
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
98 static void set_graphtype(uint32_t format, ggi_mode *mode)
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
99 {
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
100 switch(format)
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
101 {
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
102 case IMGFMT_RGB4:
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
103 mode->graphtype = GT_4BIT;
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
104 break;
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
105 case IMGFMT_BGR4:
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
106 mode->graphtype = GT_4BIT;
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
107 GT_SETSUBSCHEME(mode->graphtype, GT_SUB_HIGHBIT_RIGHT);
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
108 break;
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
109 case IMGFMT_RGB8:
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
110 case IMGFMT_BGR8:
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
111 mode->graphtype = GT_8BIT;
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
112 break;
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
113 case IMGFMT_RGB15:
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
114 case IMGFMT_BGR15:
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
115 mode->graphtype = GT_15BIT;
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
116 break;
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
117 case IMGFMT_RGB16:
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
118 case IMGFMT_BGR16:
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
119 mode->graphtype = GT_16BIT;
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
120 break;
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
121 case IMGFMT_RGB24:
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
122 case IMGFMT_BGR24:
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
123 mode->graphtype = GT_24BIT;
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
124 break;
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
125 case IMGFMT_RGB32:
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
126 case IMGFMT_BGR32:
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
127 mode->graphtype = GT_32BIT;
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
128 break;
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
129 }
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
130
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
131 return;
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
132 }
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
133
4830
2c1dd0b15622 reworked :) should work on low bpp outputs
alex
parents: 4828
diff changeset
134 static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width,
7124
eca7dbad0166 finally removed query_vaa, bes_da and vo_tune_info - the obsoleted libvo api
alex
parents: 6817
diff changeset
135 uint32_t d_height, uint32_t flags, char *title, uint32_t format)
1132
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
136 {
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
137 ggi_mode mode = {
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
138 1, /* frames */
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
139 { 0, 0 }, /* top, left corner */
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
140 { width, height }, /* bottem, right corner */
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
141 { GGI_AUTO, GGI_AUTO }, /* size */
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
142 GT_AUTO, /* graphtype */
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
143 { GGI_AUTO, GGI_AUTO } /* dots per pixel */
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
144 };
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
145 ggi_mode parentmode =
1132
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
146 {
14021
f0236d5ba7a7 Remove broken support for directbuffer and including frame-handling use.
iive
parents: 13787
diff changeset
147 1, /* frames */
4830
2c1dd0b15622 reworked :) should work on low bpp outputs
alex
parents: 4828
diff changeset
148 { width, height }, /* visible */
1132
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
149 { GGI_AUTO, GGI_AUTO }, /* virt */
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
150 { GGI_AUTO, GGI_AUTO }, /* size */
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
151 GT_AUTO, /* graphtype */
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
152 { GGI_AUTO, GGI_AUTO } /* dots per pixel */
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
153 };
14021
f0236d5ba7a7 Remove broken support for directbuffer and including frame-handling use.
iive
parents: 13787
diff changeset
154
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
155 set_graphtype(format, &parentmode);
4828
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
156
5703
efd2518b174e minor fixes and flipping support
alex
parents: 5637
diff changeset
157 #if 0
4830
2c1dd0b15622 reworked :) should work on low bpp outputs
alex
parents: 4828
diff changeset
158 printf("[ggi] mode: ");
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
159 ggiPrintMode(&parentmode);
4830
2c1dd0b15622 reworked :) should work on low bpp outputs
alex
parents: 4828
diff changeset
160 printf("\n");
15406
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
161
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
162 printf("[ggi] submode: ");
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
163 ggiPrintMode(&mode);
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
164 printf("\n");
4830
2c1dd0b15622 reworked :) should work on low bpp outputs
alex
parents: 4828
diff changeset
165 #endif
2c1dd0b15622 reworked :) should work on low bpp outputs
alex
parents: 4828
diff changeset
166
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
167 ggiCheckMode(ggi_conf.parentvis, &parentmode);
4830
2c1dd0b15622 reworked :) should work on low bpp outputs
alex
parents: 4828
diff changeset
168
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
169 if (ggiSetMode(ggi_conf.parentvis, &parentmode) < 0)
1132
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
170 {
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
171 mp_msg(MSGT_VO, MSGL_ERR, "[ggi] unable to set display mode\n");
1132
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
172 return(-1);
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
173 }
4830
2c1dd0b15622 reworked :) should work on low bpp outputs
alex
parents: 4828
diff changeset
174
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
175 if (ggiGetMode(ggi_conf.parentvis, &parentmode) < 0)
1147
82bbd3ee8ce7 hacked osd working on yv12
al3x
parents: 1145
diff changeset
176 {
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
177 mp_msg(MSGT_VO, MSGL_ERR, "[ggi] unable to get display mode\n");
1147
82bbd3ee8ce7 hacked osd working on yv12
al3x
parents: 1145
diff changeset
178 return(-1);
82bbd3ee8ce7 hacked osd working on yv12
al3x
parents: 1145
diff changeset
179 }
4828
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
180
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
181 if ((parentmode.graphtype == GT_INVALID) || (parentmode.graphtype == GT_AUTO))
4841
5928e94c0d5f older API fixes, support for async mode
alex
parents: 4831
diff changeset
182 {
5928e94c0d5f older API fixes, support for async mode
alex
parents: 4831
diff changeset
183 mp_msg(MSGT_VO, MSGL_ERR, "[ggi] not supported depth/bpp\n");
5928e94c0d5f older API fixes, support for async mode
alex
parents: 4831
diff changeset
184 return(-1);
5928e94c0d5f older API fixes, support for async mode
alex
parents: 4831
diff changeset
185 }
5928e94c0d5f older API fixes, support for async mode
alex
parents: 4831
diff changeset
186
15406
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
187 #if 0
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
188 printf("[ggi] mode: ");
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
189 ggiPrintMode(&parentmode);
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
190 printf("\n");
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
191 #endif
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
192
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
193 /* calculate top, left corner */
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
194 mode.visible.x = (parentmode.virt.x - width) / 2;
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
195 mode.visible.y = (parentmode.virt.y - height) / 2;
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
196
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
197 /* calculate bottom, right corner */
15406
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
198 mode.virt.x = width;
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
199 mode.virt.y = height;
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
200
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
201 ggiCheckMode(ggi_conf.vis, &mode);
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
202
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
203 if (ggiSetMode(ggi_conf.vis, &mode) < 0)
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
204 {
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
205 mp_msg(MSGT_VO, MSGL_ERR, "[ggi] unable to set video mode\n");
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
206 return(-1);
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
207 }
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
208
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
209 if (ggiGetMode(ggi_conf.vis, &mode) < 0)
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
210 {
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
211 mp_msg(MSGT_VO, MSGL_ERR, "[ggi] unable to get video mode\n");
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
212 return(-1);
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
213 }
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
214
15406
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
215 #ifdef HAVE_GGIWMH
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
216 ggiWmhSetTitle(ggi_conf.parentvis, title);
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
217 if (vo_ontop) window_ontop();
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
218 #endif
1132
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
219
5703
efd2518b174e minor fixes and flipping support
alex
parents: 5637
diff changeset
220 #if 0
15406
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
221 printf("[ggi] submode: ");
4830
2c1dd0b15622 reworked :) should work on low bpp outputs
alex
parents: 4828
diff changeset
222 ggiPrintMode(&mode);
4828
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
223 printf("\n");
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
224 #endif
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
225
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
226 vo_depthonscreen = GT_DEPTH(parentmode.graphtype);
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
227 vo_screenwidth = parentmode.visible.x;
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
228 vo_screenheight = parentmode.visible.y;
4830
2c1dd0b15622 reworked :) should work on low bpp outputs
alex
parents: 4828
diff changeset
229
2c1dd0b15622 reworked :) should work on low bpp outputs
alex
parents: 4828
diff changeset
230 vo_dx = vo_dy = 0;
2c1dd0b15622 reworked :) should work on low bpp outputs
alex
parents: 4828
diff changeset
231 vo_dwidth = mode.virt.x;
2c1dd0b15622 reworked :) should work on low bpp outputs
alex
parents: 4828
diff changeset
232 vo_dheight = mode.virt.y;
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
233 vo_dbpp = GT_SIZE(parentmode.graphtype);
1132
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
234
4828
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
235 ggi_conf.srcwidth = width;
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
236 ggi_conf.srcheight = height;
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
237 ggi_conf.srcformat = format;
15406
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
238
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
239 ggi_conf.dstwidth = mode.virt.x;
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
240 ggi_conf.dstheight = mode.virt.y;
5703
efd2518b174e minor fixes and flipping support
alex
parents: 5637
diff changeset
241
efd2518b174e minor fixes and flipping support
alex
parents: 5637
diff changeset
242 ggi_conf.voflags = flags;
4830
2c1dd0b15622 reworked :) should work on low bpp outputs
alex
parents: 4828
diff changeset
243
4828
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
244 if (IMGFMT_IS_RGB(ggi_conf.srcformat))
1132
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
245 {
4828
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
246 ggi_conf.srcdepth = IMGFMT_RGB_DEPTH(ggi_conf.srcformat);
1132
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
247 }
4828
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
248 else
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
249 if (IMGFMT_IS_BGR(ggi_conf.srcformat))
1132
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
250 {
4828
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
251 ggi_conf.srcdepth = IMGFMT_BGR_DEPTH(ggi_conf.srcformat);
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
252 }
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
253 else
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
254 {
5637
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
255 mp_msg(MSGT_VO, MSGL_FATAL, "[ggi] Unknown image format: %s\n",
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
256 vo_format_name(ggi_conf.srcformat));
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
257 return(-1);
1132
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
258 }
1172
290353337b44 hardly modified, keyboard handling is ok. aspect implemented, but bugging :)
al3x
parents: 1148
diff changeset
259
5637
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
260 ggiSetFlags(ggi_conf.vis, GGIFLAG_ASYNC);
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
261
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
262 if (GT_SCHEME(mode.graphtype) == GT_PALETTE)
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
263 ggiSetColorfulPalette(ggi_conf.vis);
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
264
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
265 if (ggiGetFlags(ggi_conf.vis) & GGIFLAG_ASYNC)
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
266 ggi_conf.async = 1;
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
267
14021
f0236d5ba7a7 Remove broken support for directbuffer and including frame-handling use.
iive
parents: 13787
diff changeset
268 mp_msg(MSGT_VO, MSGL_INFO, "[ggi] input: %dx%dx%d, output: %dx%dx%d\n",
4830
2c1dd0b15622 reworked :) should work on low bpp outputs
alex
parents: 4828
diff changeset
269 ggi_conf.srcwidth, ggi_conf.srcheight, ggi_conf.srcdepth,
14021
f0236d5ba7a7 Remove broken support for directbuffer and including frame-handling use.
iive
parents: 13787
diff changeset
270 vo_dwidth, vo_dheight, vo_dbpp);
f0236d5ba7a7 Remove broken support for directbuffer and including frame-handling use.
iive
parents: 13787
diff changeset
271 mp_msg(MSGT_VO, MSGL_INFO, "[ggi] async mode: %s\n",
5637
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
272 ggi_conf.async ? "yes" : "no");
4841
5928e94c0d5f older API fixes, support for async mode
alex
parents: 4831
diff changeset
273
5703
efd2518b174e minor fixes and flipping support
alex
parents: 5637
diff changeset
274 ggi_conf.srcbpp = (ggi_conf.srcdepth+7)/8;
4830
2c1dd0b15622 reworked :) should work on low bpp outputs
alex
parents: 4828
diff changeset
275
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
276 ggi_conf.flushregion.x1 = ggi_conf.flushregion.y1 = 0;
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
277 ggi_conf.flushregion.x2 = ggi_conf.dstwidth;
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
278 ggi_conf.flushregion.y2 = ggi_conf.dstheight;
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
279
1132
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
280 return(0);
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
281 }
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
282
5637
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
283 static uint32_t get_image(mp_image_t *mpi)
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
284 {
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
285 /* GGI DirectRendering supports (yet) only BGR/RGB modes */
14021
f0236d5ba7a7 Remove broken support for directbuffer and including frame-handling use.
iive
parents: 13787
diff changeset
286 if (
5637
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
287 #if 1
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
288 (IMGFMT_IS_RGB(mpi->imgfmt) &&
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
289 (IMGFMT_RGB_DEPTH(mpi->imgfmt) != vo_dbpp)) ||
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
290 (IMGFMT_IS_BGR(mpi->imgfmt) &&
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
291 (IMGFMT_BGR_DEPTH(mpi->imgfmt) != vo_dbpp)) ||
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
292 #else
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
293 (mpi->imgfmt != ggi_conf.srcformat) ||
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
294 #endif
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
295 ((mpi->type != MP_IMGTYPE_STATIC) && (mpi->type != MP_IMGTYPE_TEMP)) ||
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
296 (mpi->flags & MP_IMGFLAG_PLANAR) ||
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
297 (mpi->flags & MP_IMGFLAG_YUV) ||
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
298 (mpi->width != ggi_conf.srcwidth) ||
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
299 (mpi->height != ggi_conf.srcheight)
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
300 )
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
301 {
5637
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
302 return(VO_FALSE);
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
303 }
5637
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
304
5703
efd2518b174e minor fixes and flipping support
alex
parents: 5637
diff changeset
305 mpi->planes[1] = mpi->planes[2] = NULL;
efd2518b174e minor fixes and flipping support
alex
parents: 5637
diff changeset
306 mpi->stride[1] = mpi->stride[2] = 0;
efd2518b174e minor fixes and flipping support
alex
parents: 5637
diff changeset
307
14021
f0236d5ba7a7 Remove broken support for directbuffer and including frame-handling use.
iive
parents: 13787
diff changeset
308 mpi->planes[0] = NULL;
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
309 mpi->stride[0] = ggi_conf.srcwidth * ggi_conf.srcbpp;
5637
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
310 mpi->flags |= MP_IMGFLAG_DIRECT;
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
311
5703
efd2518b174e minor fixes and flipping support
alex
parents: 5637
diff changeset
312 #ifdef GGI_FLIP
efd2518b174e minor fixes and flipping support
alex
parents: 5637
diff changeset
313 if (ggi_conf.voflags & VOFLAG_FLIPPING)
efd2518b174e minor fixes and flipping support
alex
parents: 5637
diff changeset
314 {
efd2518b174e minor fixes and flipping support
alex
parents: 5637
diff changeset
315 mpi->stride[0] = -mpi->stride[0];
efd2518b174e minor fixes and flipping support
alex
parents: 5637
diff changeset
316 }
efd2518b174e minor fixes and flipping support
alex
parents: 5637
diff changeset
317 #endif
efd2518b174e minor fixes and flipping support
alex
parents: 5637
diff changeset
318
5637
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
319 return(VO_TRUE);
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
320 }
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
321
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
322
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
323 static uint32_t draw_frame(uint8_t *src[])
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
324 {
11110
54c7f0df68e9 non-directbuffer and slices support
alex
parents: 10368
diff changeset
325 ggiPutBox(ggi_conf.vis, 0, 0, ggi_conf.dstwidth, ggi_conf.dstheight, src[0]);
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
326
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
327 ggi_conf.flushregion.x1 = ggi_conf.flushregion.y1 = 0;
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
328 ggi_conf.flushregion.x2 = ggi_conf.dstwidth;
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
329 ggi_conf.flushregion.y2 = ggi_conf.dstheight;
5637
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
330
1141
c33f8b7488d1 cleaned up, and merged with my version, also code will be faster too
al3x
parents: 1132
diff changeset
331 return(0);
c33f8b7488d1 cleaned up, and merged with my version, also code will be faster too
al3x
parents: 1132
diff changeset
332 }
1132
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
333
5637
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
334 static void draw_osd(void)
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
335 {
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
336 return;
1132
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
337 }
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
338
5637
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
339 static void flip_page(void)
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
340 {
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
341 ggiFlushRegion(ggi_conf.vis, ggi_conf.flushregion.x1, ggi_conf.flushregion.y1,
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
342 ggi_conf.flushregion.x2 - ggi_conf.flushregion.x1,
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
343 ggi_conf.flushregion.y2 - ggi_conf.flushregion.y1);
15406
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
344
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
345 ggi_conf.flushregion.x1 = ggi_conf.flushregion.x2 = -1;
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
346 ggi_conf.flushregion.y1 = ggi_conf.flushregion.y2 = -1;
5637
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
347 }
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
348
1132
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
349 static uint32_t draw_slice(uint8_t *src[], int stride[], int w, int h,
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
350 int x, int y)
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
351 {
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
352 ggiPutBox(ggi_conf.vis, x, y, w, h, src[0]);
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
353
15406
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
354 if ((ggi_conf.flushregion.x1 == -1) || (x < ggi_conf.flushregion.x1))
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
355 ggi_conf.flushregion.x1 = x;
15406
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
356 if ((ggi_conf.flushregion.y1 == -1) || (y < ggi_conf.flushregion.y1))
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
357 ggi_conf.flushregion.y1 = y;
15406
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
358 if ((ggi_conf.flushregion.x2 == -1) || ((x + w) > ggi_conf.flushregion.x2))
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
359 ggi_conf.flushregion.x2 = x + w;
15406
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
360 if ((ggi_conf.flushregion.y2 == -1) || ((y + h) > ggi_conf.flushregion.y2))
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
361 ggi_conf.flushregion.y2 = y + h;
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
362
11110
54c7f0df68e9 non-directbuffer and slices support
alex
parents: 10368
diff changeset
363 return(1);
1132
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
364 }
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
365
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
366 static uint32_t query_format(uint32_t format)
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
367 {
5637
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
368 ggi_mode mode;
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
369 uint32_t vfcap;
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
370
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
371 vfcap = VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_ACCEPT_STRIDE;
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
372
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
373 if ((!vo_depthonscreen || !vo_dbpp) && ggi_conf.parentvis)
5637
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
374 {
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
375 if (ggiGetMode(ggi_conf.parentvis, &mode) == 0)
5637
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
376 {
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
377 vo_depthonscreen = GT_DEPTH(mode.graphtype);
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
378 vo_dbpp = GT_SIZE(mode.graphtype);
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
379 }
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
380 }
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
381
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
382 if ((IMGFMT_IS_BGR(format) && (IMGFMT_BGR_DEPTH(format) == vo_dbpp)) ||
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
383 (IMGFMT_IS_RGB(format) && (IMGFMT_RGB_DEPTH(format) == vo_dbpp)))
1141
c33f8b7488d1 cleaned up, and merged with my version, also code will be faster too
al3x
parents: 1132
diff changeset
384 {
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
385 return vfcap;
1132
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
386 }
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
387
5637
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
388 if (IMGFMT_IS_BGR(format) || IMGFMT_IS_RGB(format))
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
389 {
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
390 set_graphtype(format, &mode);
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
391
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
392 if (ggiCheckMode(ggi_conf.parentvis, &mode) < 0) {
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
393 return 0;
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
394 } else {
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
395 return vfcap;
11110
54c7f0df68e9 non-directbuffer and slices support
alex
parents: 10368
diff changeset
396 }
5637
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
397 }
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
398
1141
c33f8b7488d1 cleaned up, and merged with my version, also code will be faster too
al3x
parents: 1132
diff changeset
399 return(0);
1132
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
400 }
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
401
4828
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
402 static uint32_t preinit(const char *arg)
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
403 {
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
404 if (ggiInit() != 0)
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
405 {
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
406 mp_msg(MSGT_VO, MSGL_FATAL, "[ggi] unable to initialize GGI\n");
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
407 return(-1);
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
408 }
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
409
15406
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
410 #ifdef HAVE_GGIWMH
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
411 if (ggiWmhInit() < 0)
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
412 {
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
413 mp_msg(MSGT_VO, MSGL_FATAL, "[ggi] unable to initialize libggiwmh\n");
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
414 return(-1);
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
415 }
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
416 #endif
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
417
4841
5928e94c0d5f older API fixes, support for async mode
alex
parents: 4831
diff changeset
418 if ((char *)arg)
15272
db06e2acdf3d Make it possible to use a ggi device string that contains a ',' by writing
reimar
parents: 14175
diff changeset
419 {
db06e2acdf3d Make it possible to use a ggi device string that contains a ',' by writing
reimar
parents: 14175
diff changeset
420 int i = 0;
4841
5928e94c0d5f older API fixes, support for async mode
alex
parents: 4831
diff changeset
421 ggi_conf.driver = strdup(arg);
15272
db06e2acdf3d Make it possible to use a ggi device string that contains a ',' by writing
reimar
parents: 14175
diff changeset
422 while (ggi_conf.driver[i]) {
db06e2acdf3d Make it possible to use a ggi device string that contains a ',' by writing
reimar
parents: 14175
diff changeset
423 if (ggi_conf.driver[i] == '.')
db06e2acdf3d Make it possible to use a ggi device string that contains a ',' by writing
reimar
parents: 14175
diff changeset
424 ggi_conf.driver[i] = ',';
db06e2acdf3d Make it possible to use a ggi device string that contains a ',' by writing
reimar
parents: 14175
diff changeset
425 i++;
db06e2acdf3d Make it possible to use a ggi device string that contains a ',' by writing
reimar
parents: 14175
diff changeset
426 }
db06e2acdf3d Make it possible to use a ggi device string that contains a ',' by writing
reimar
parents: 14175
diff changeset
427 }
4828
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
428 else
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
429 ggi_conf.driver = NULL;
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
430
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
431 ggi_conf.parentvis = ggiOpen(ggi_conf.driver);
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
432 if (ggi_conf.parentvis == NULL)
4828
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
433 {
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
434 mp_msg(MSGT_VO, MSGL_FATAL, "[ggi] unable to open '%s' output\n",
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
435 (ggi_conf.driver == NULL) ? "default" : ggi_conf.driver);
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
436 ggiExit();
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
437 return(-1);
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
438 }
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
439
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
440 ggi_conf.vis = ggiOpen("display-sub", ggi_conf.parentvis);
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
441 if (ggi_conf.vis == NULL)
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
442 {
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
443 mp_msg(MSGT_VO, MSGL_FATAL, "[ggi] unable to open the video output\n");
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
444 ggiExit();
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
445 return(-1);
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
446 }
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
447
15406
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
448 #ifdef HAVE_GGIWMH
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
449 ggiWmhAttach(ggi_conf.parentvis);
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
450 #endif
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
451
4828
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
452
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
453 mp_msg(MSGT_VO, MSGL_V, "[ggi] using '%s' output\n",
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
454 (ggi_conf.driver == NULL) ? "default" : ggi_conf.driver);
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
455
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
456 return 0;
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
457 }
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
458
1132
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
459 static void uninit(void)
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
460 {
4841
5928e94c0d5f older API fixes, support for async mode
alex
parents: 4831
diff changeset
461 if (ggi_conf.driver)
5928e94c0d5f older API fixes, support for async mode
alex
parents: 4831
diff changeset
462 free(ggi_conf.driver);
15406
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
463
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
464 #ifdef HAVE_GGIWMH
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
465 ggiWmhDetach(ggi_conf.parentvis);
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
466 ggiWmhExit();
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
467 #endif
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
468
1172
290353337b44 hardly modified, keyboard handling is ok. aspect implemented, but bugging :)
al3x
parents: 1148
diff changeset
469 ggiClose(ggi_conf.vis);
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
470 ggiClose(ggi_conf.parentvis);
1132
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
471 ggiExit();
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
472 }
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
473
4828
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
474 static uint32_t control(uint32_t request, void *data, ...)
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
475 {
5637
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
476 switch(request)
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
477 {
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
478 case VOCTRL_QUERY_FORMAT:
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
479 return query_format(*((uint32_t*)data));
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
480 case VOCTRL_GET_IMAGE:
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
481 return get_image(data);
15406
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
482 #ifdef HAVE_GGIWMH
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
483 case VOCTRL_ONTOP:
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
484 vo_ontop = (!(vo_ontop));
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
485 window_ontop();
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
486 return VO_TRUE;
04c47e9acab3 - make use of libggiwmh if found by configure
diego
parents: 15272
diff changeset
487 #endif
5637
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
488 }
6890819bc0dc added support for directrendering, updated to VFCAP_ flags in query_format, added support for non-directbuffer devices, and using mem2agpcpy_pic
alex
parents: 4841
diff changeset
489 return VO_NOTIMPL;
4828
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
490 }
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
491
4841
5928e94c0d5f older API fixes, support for async mode
alex
parents: 4831
diff changeset
492 /* EVENT handling */
13787
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 12650
diff changeset
493 #include "osdep/keycodes.h"
1172
290353337b44 hardly modified, keyboard handling is ok. aspect implemented, but bugging :)
al3x
parents: 1148
diff changeset
494 extern void mplayer_put_key(int code);
290353337b44 hardly modified, keyboard handling is ok. aspect implemented, but bugging :)
al3x
parents: 1148
diff changeset
495
1132
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
496 static void check_events(void)
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
497 {
1143
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
498 struct timeval tv = {0, 0};
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
499 ggi_event event;
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
500 ggi_event_mask mask;
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
501
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
502 if ((mask = ggiEventPoll(ggi_conf.parentvis, emAll, &tv)))
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
503 if (ggiEventRead(ggi_conf.parentvis, &event, emAll) != 0)
1143
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
504 {
4828
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
505 mp_dbg(MSGT_VO, MSGL_DBG3, "type: %4x, origin: %4x, sym: %4x, label: %4x, button=%4x\n",
1172
290353337b44 hardly modified, keyboard handling is ok. aspect implemented, but bugging :)
al3x
parents: 1148
diff changeset
506 event.any.origin, event.any.type, event.key.sym, event.key.label, event.key.button);
1143
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
507
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
508 switch (event.any.type) {
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
509 case evKeyPress:
1172
290353337b44 hardly modified, keyboard handling is ok. aspect implemented, but bugging :)
al3x
parents: 1148
diff changeset
510 switch(event.key.sym)
1143
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
511 {
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
512 case GIIK_PAsterisk: /* PStar */
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
513 case GIIUC_Asterisk:
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
514 mplayer_put_key('*');
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
515 break;
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
516 case GIIK_PSlash:
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
517 case GIIUC_Slash:
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
518 mplayer_put_key('/');
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
519 break;
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
520 case GIIK_PPlus:
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
521 case GIIUC_Plus:
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
522 mplayer_put_key('+');
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
523 break;
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
524 case GIIK_PMinus:
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
525 case GIIUC_Minus:
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
526 mplayer_put_key('-');
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
527 break;
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
528 case GIIUC_o:
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
529 case GIIUC_O:
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
530 mplayer_put_key('o');
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
531 break;
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
532 case GIIUC_g:
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
533 case GIIUC_G:
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
534 mplayer_put_key('g');
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
535 break;
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
536 case GIIUC_z:
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
537 case GIIUC_Z:
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
538 mplayer_put_key('z');
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
539 break;
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
540 case GIIUC_x:
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
541 case GIIUC_X:
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
542 mplayer_put_key('x');
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
543 break;
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
544 case GIIUC_m:
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
545 case GIIUC_M:
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
546 mplayer_put_key('m');
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
547 break;
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
548 case GIIUC_d:
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
549 case GIIUC_D:
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
550 mplayer_put_key('d');
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
551 break;
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
552 case GIIUC_q:
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
553 case GIIUC_Q:
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
554 mplayer_put_key('q');
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
555 break;
4828
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
556 case GIIUC_h:
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
557 case GIIUC_H:
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
558 mplayer_put_key('h');
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
559 break;
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
560 case GIIUC_l:
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
561 case GIIUC_L:
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
562 mplayer_put_key('l');
0ae597cc28e6 totally reworked, working fine on fbdev too, applied Andres Beck's patches, quad-buffering support
alex
parents: 4737
diff changeset
563 break;
1143
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
564 case GIIUC_Space:
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
565 case GIIUC_p:
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
566 case GIIUC_P:
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
567 mplayer_put_key('p');
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
568 break;
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
569 case GIIK_Up:
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
570 mplayer_put_key(KEY_UP);
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
571 break;
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
572 case GIIK_Down:
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
573 mplayer_put_key(KEY_DOWN);
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
574 break;
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
575 case GIIK_Left:
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
576 mplayer_put_key(KEY_LEFT);
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
577 break;
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
578 case GIIK_Right:
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
579 mplayer_put_key(KEY_RIGHT);
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
580 break;
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
581 case GIIK_PageUp:
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
582 mplayer_put_key(KEY_PAGE_UP);
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
583 break;
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
584 case GIIK_PageDown:
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
585 mplayer_put_key(KEY_PAGE_DOWN);
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
586 break;
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
587 default:
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
588 break;
14175
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
589 } /* switch */
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
590
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
591 break;
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
592 } /* switch */
c4fe6bb22e2e - Fixed mode setting, so any video can be played on all supported ggi targets.
diego
parents: 14021
diff changeset
593 } /* if */
1143
a9d985d6aa91 key controlling implemented
al3x
parents: 1141
diff changeset
594 return;
1132
80a0f8aa2360 Added for development only this is in pre-alpha state, do not use!
atmosfear
parents:
diff changeset
595 }