/*
 *  Just a thin wrapper around our internal use callback interface.
 *  Applications that rely on the callback know when to delete sources
 *  and buffers, so the additional callback are not needed.
 */
void alBufferDataWithCallback_LOKI(ALuint bid,
		int (*Callback)(ALuint, ALuint, ALshort *, ALenum, ALint, ALint)) {

	_alBufferDataWithCallback_LOKI(bid, Callback, NULL, NULL);

	return;
}
Beispiel #2
0
ALboolean alutLoadRAW_ADPCMData_LOKI(ALuint bid,
				ALvoid *data, ALuint size, ALuint freq,
				ALenum format) {
	alWaveFMT_LOKI wfx;
	int i;
	ALvoid *persistent_data;

	if(RAW_first_time == AL_TRUE) {
		/* so kludgey */
		for(i = 0; i < MAX_ADPCM; i++) {
			bidmap[i].bid  = -1;
			bidmap[i].data = NULL;
			admap[i].sid   = -1;
		}
		RAW_first_time = AL_FALSE;
	}

	persistent_data = malloc(size);
	if(persistent_data == NULL) {
		return AL_FALSE;
	}

	memcpy(persistent_data, data, size);

	wfx.frequency = freq;
	wfx.channels = _al_ALCHANNELS(format);
	wfx.bitspersample = _al_formatbits(format);

	/* insert new bid, ignore blockalign */
	bidmap_insert(bid, persistent_data, size, &wfx);

	_alBufferDataWithCallback_LOKI(bid, RAW_ADPCM_Callback,
				RAW_ADPCM_DestroyCallback_Sid,
				RAW_ADPCM_DestroyCallback_Bid);

	return AL_TRUE;
}