Exemple #1
0
int
splash_register(splash_decoder_t *decoder)
{
	splash_decoder_t **p;
	int error;
	int i;

	if (splash_adp != NULL) {
		/*
		 * If the video card has aleady been initialized, test
		 * this decoder immediately.
		 */
		error = splash_test(decoder);
		if (error == 0) {
			/* replace the current decoder with new one */
			if (splash_decoder != NULL)
				error = splash_term(splash_adp);
			if (error == 0)
				splash_new(decoder);
		}
		return error;
	} else {
		/* register the decoder for later use */
		for (i = 0; i < decoders; ++i) {
			if (decoder_set[i] == NULL)
				break;
		}
		if ((i >= decoders) && (decoders % DECODER_ARRAY_DELTA) == 0) {
			p = malloc(sizeof(*p)*(decoders + DECODER_ARRAY_DELTA),
			   	M_DEVBUF, M_NOWAIT);
			if (p == NULL)
				return ENOMEM;
			if (decoder_set != NULL) {
				bcopy(decoder_set, p, sizeof(*p)*decoders);
				free(decoder_set, M_DEVBUF);
			}
			decoder_set = p;
			i = decoders++;
		}
		decoder_set[i] = decoder;
	}

	return 0;
}
Exemple #2
0
int
splash_init(video_adapter_t *adp, int (*callback)(int))
{
	int i;

	splash_adp = adp;
	splash_callback = callback;

	splash_decoder = NULL;
	for (i = 0; i < decoders; ++i) {
		if (decoder_set[i] == NULL)
			continue;
		if (splash_test(decoder_set[i]) == 0) {
			splash_new(decoder_set[i]);
			break;
		}
		decoder_set[i] = NULL;
	}
	for (++i; i < decoders; ++i) {
		decoder_set[i] = NULL;
	}
	return 0;
}