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 {