Mercurial > mplayer.hg
comparison libvo/vo_ggi.c @ 4831:9153d1275b6d
do not fault if no directbuffer available (for example: ggi display-multi)
author | alex |
---|---|
date | Sun, 24 Feb 2002 02:50:02 +0000 |
parents | 2c1dd0b15622 |
children | 5928e94c0d5f |
comparison
equal
deleted
inserted
replaced
4830:2c1dd0b15622 | 4831:9153d1275b6d |
---|---|
25 | 25 |
26 #include <ggi/ggi.h> | 26 #include <ggi/ggi.h> |
27 | 27 |
28 #undef GET_DB_INFO | 28 #undef GET_DB_INFO |
29 | 29 |
30 /* max buffers */ | 30 /* maximum buffers */ |
31 #define GGI_FRAMES 4 | 31 #define GGI_FRAMES 4 |
32 | 32 |
33 #include "../postproc/rgb2rgb.h" | 33 #include "../postproc/rgb2rgb.h" |
34 | 34 |
35 LIBVO_EXTERN (ggi) | 35 LIBVO_EXTERN (ggi) |
128 } | 128 } |
129 | 129 |
130 if (ggiSetMode(ggi_conf.vis, &mode)) | 130 if (ggiSetMode(ggi_conf.vis, &mode)) |
131 { | 131 { |
132 mp_msg(MSGT_VO, MSGL_ERR, "[ggi] unable to set mode\n"); | 132 mp_msg(MSGT_VO, MSGL_ERR, "[ggi] unable to set mode\n"); |
133 uninit(); | |
134 return(-1); | 133 return(-1); |
135 } | 134 } |
136 | 135 |
137 if (ggiGetMode(ggi_conf.vis, &mode) != 0) | 136 if (ggiGetMode(ggi_conf.vis, &mode) != 0) |
138 { | 137 { |
139 mp_msg(MSGT_VO, MSGL_ERR, "[ggi] unable to get mode\n"); | 138 mp_msg(MSGT_VO, MSGL_ERR, "[ggi] unable to get mode\n"); |
140 uninit(); | |
141 return(-1); | 139 return(-1); |
142 } | 140 } |
143 | 141 |
144 ggi_conf.gmode = mode; | 142 ggi_conf.gmode = mode; |
145 | 143 |
181 yuv2rgb_init(ggi_conf.srcdepth, MODE_RGB); | 179 yuv2rgb_init(ggi_conf.srcdepth, MODE_RGB); |
182 break; | 180 break; |
183 default: | 181 default: |
184 mp_msg(MSGT_VO, MSGL_FATAL, "[ggi] Unknown image format: %s\n", | 182 mp_msg(MSGT_VO, MSGL_FATAL, "[ggi] Unknown image format: %s\n", |
185 vo_format_name(ggi_conf.srcformat)); | 183 vo_format_name(ggi_conf.srcformat)); |
186 uninit(); | |
187 return(-1); | 184 return(-1); |
188 } | 185 } |
189 | 186 |
190 vo_dwidth = ggi_conf.dstwidth = ggi_conf.gmode.virt.x; | 187 vo_dwidth = ggi_conf.dstwidth = ggi_conf.gmode.virt.x; |
191 vo_dheight = ggi_conf.dstheight = ggi_conf.gmode.virt.y; | 188 vo_dheight = ggi_conf.dstheight = ggi_conf.gmode.virt.y; |
192 | 189 |
193 for (i = 0; i < GGI_FRAMES; i++) | 190 ggi_conf.frames = ggiDBGetNumBuffers(ggi_conf.vis); |
191 if (ggi_conf.frames > GGI_FRAMES) | |
192 ggi_conf.frames = GGI_FRAMES; | |
193 | |
194 ggi_conf.currframe = 0; | |
195 if (!ggi_conf.frames) | |
196 { | |
197 mp_msg(MSGT_VO, MSGL_ERR, "[ggi] direct buffer unavailable\n"); | |
198 return(-1); | |
199 } | |
200 | |
201 for (i = 0; i < ggi_conf.frames; i++) | |
194 ggi_conf.buffer[i] = NULL; | 202 ggi_conf.buffer[i] = NULL; |
195 | 203 |
196 ggi_conf.frames = ggi_conf.currframe = 0; | |
197 | |
198 /* get available number of buffers */ | 204 /* get available number of buffers */ |
199 for (i = 0; DB = ggiDBGetBuffer(ggi_conf.vis, i), i < GGI_FRAMES; i++) | 205 for (i = 0; DB = ggiDBGetBuffer(ggi_conf.vis, i), i < ggi_conf.frames; i++) |
200 { | 206 { |
201 if (!(DB->type & GGI_DB_SIMPLE_PLB) || | 207 if (!(DB->type & GGI_DB_SIMPLE_PLB) || |
202 (DB->page_size != 0) || | 208 (DB->page_size != 0) || |
203 (DB->write == NULL) || | 209 (DB->write == NULL) || |
204 (DB->noaccess != 0) || | 210 (DB->noaccess != 0) || |
205 (DB->align != 0) || | 211 (DB->align != 0) || |
206 (DB->layout != blPixelLinearBuffer)) | 212 (DB->layout != blPixelLinearBuffer)) |
207 continue; | 213 continue; |
208 | 214 |
209 ggi_conf.buffer[DB->frame] = DB; | 215 ggi_conf.buffer[DB->frame] = DB; |
210 ggi_conf.frames++; | |
211 } | 216 } |
212 | 217 |
213 if (ggi_conf.buffer[0] == NULL) | 218 if (ggi_conf.buffer[0] == NULL) |
214 { | 219 { |
215 mp_msg(MSGT_VO, MSGL_ERR, "[ggi] direct buffer unavailable\n"); | 220 mp_msg(MSGT_VO, MSGL_ERR, "[ggi] direct buffer unavailable\n"); |
216 uninit(); | |
217 return(-1); | 221 return(-1); |
218 } | 222 } |
219 | 223 |
220 for (i = 0; i < ggi_conf.frames; i++) | 224 for (i = 0; i < ggi_conf.frames; i++) |
221 { | 225 { |