/* * _alInit( void ) * * _alInit is called when the "first" context is created. If all * contexts are deleted, and then one is created, it is called again. * * Returns AL_TRUE unless some weird sort of memory allocation problem occurs, * in which case AL_FALSE is returned. */ ALboolean _alInit( void ) { ALboolean err; ALuint i; for(i = 0; i < _ALC_MAX_CHANNELS; i++) { f_buffers.data[i] = NULL; } f_buffers.len = 0; /* buffer initializations */ err = _alInitBuffers(); if(err == AL_FALSE) { return AL_FALSE; } /* extension initilizations */ err = _alInitExtensions(); if(err == AL_FALSE) { _alDestroyBuffers(); return AL_FALSE; } #ifdef BUILTIN_EXT_LOKI /* FIXME: dynamic-ify this */ /* register extension groups */ _alRegisterExtensionGroup( (const ALubyte*) "ALC_LOKI_audio_channel" ); _alRegisterExtensionGroup( (const ALubyte*) "AL_LOKI_buffer_data_callback" ); _alRegisterExtensionGroup( (const ALubyte*) "AL_LOKI_IMA_ADPCM_format" ); _alRegisterExtensionGroup( (const ALubyte*) "AL_LOKI_play_position" ); #ifdef VORBIS_SUPPORT _alRegisterExtensionGroup( (const ALubyte*) "AL_EXT_vorbis" ); #endif /* CAPTURE_SUPPORT */ #ifdef CAPTURE_SUPPORT _alRegisterExtensionGroup( (const ALubyte*) "AL_EXT_capture" ); #endif /* CAPTURE_SUPPORT */ #endif /* BUILTIN_EXT_LOKI */ for(i = 0; exts[i].addr != NULL; i++) { _alRegisterExtension(exts[i].name, exts[i].addr); } /* do builtin extensions initialization */ BUILTIN_EXT_LOKI_INIT; BUILTIN_EXT_CAPTURE_INIT; BUILTIN_EXT_MP3_INIT; BUILTIN_EXT_VORBIS_INIT; return AL_TRUE; }
/* * _alExit( void ) * * Finalizes things when the last device is deleted. * * FIXME: we can probably clean a lot of this up now that we have * alc{Open,Close}Device. */ void _alExit( void ) { int i; _alDebug( ALD_MAXIMUS, __FILE__, __LINE__, "_alExit called" ); #ifndef NO_THREADING /* we could be sync, so we check mixthread for a valid ID */ if(mixthread != NULL) { time_for_mixer_to_die = AL_TRUE; _alWaitThread( mixthread ); while( time_for_mixer_to_die == AL_TRUE ) { _alMicroSleep(100000); } } #endif /* NO_THREADING */ for(i = 0; i < _ALC_MAX_CHANNELS; i++) { if(f_buffers.data[i] != NULL) { free( f_buffers.data[i] ); f_buffers.data[i] = NULL; } } f_buffers.len = 0; _alDestroyConfig(); _alDestroyExtensions(); _alDestroyExtensionGroups( ); _alDestroyMixer(); _alDestroyFilters(); _alcDestroyAll(); _alDestroyBuffers(); /* buffers after mixer and alc destroy */ /* do builtin extensions destruction */ BUILTIN_EXT_LOKI_FINI; BUILTIN_EXT_MP3_FINI; BUILTIN_EXT_VORBIS_FINI; alDLExit_ (); }
/* * _alInit( void ) * * _alInit is called when the "first" device is created. If all * devices are deleted, and then one is created, it is called again. * * Returns AL_TRUE unless some weird sort of memory allocation problem occurs, * in which case AL_FALSE is returned. */ ALboolean _alInit( void ) { ALboolean err; ALuint i; _alDebug( ALD_MAXIMUS, __FILE__, __LINE__, "_alInit called" ); alDLInit_ (); _alDetectCPUCaps(); /* set up SIMD FloatMul */ #ifdef HAVE_SSE2 if (_alHaveSSE2()) _alFloatMul = _alFloatMul_SSE2; else #endif /* HAVE_SSE2 */ #ifdef HAVE_MMX if (_alHaveMMX()) _alFloatMul = _alFloatMul_MMX; else #endif /* HAVE_MMX */ _alFloatMul = _alFloatMul_portable; for(i = 0; i < _ALC_MAX_CHANNELS; i++) { f_buffers.data[i] = NULL; } f_buffers.len = 0; /* buffer initializations */ err = _alInitBuffers(); if(err == AL_FALSE) { return AL_FALSE; } if( _alInitMixer() == AL_FALSE ) { return AL_FALSE; } /* extension initilizations */ err = _alInitExtensions(); if(err == AL_FALSE) { _alDestroyBuffers(); return AL_FALSE; } #ifdef BUILTIN_EXT_LOKI /* FIXME: dynamic-ify this */ /* register extension groups */ _alRegisterExtensionGroup( (const ALubyte*) "ALC_LOKI_audio_channel" ); _alRegisterExtensionGroup( (const ALubyte*) "AL_LOKI_buffer_data_callback" ); _alRegisterExtensionGroup( (const ALubyte*) "AL_LOKI_IMA_ADPCM_format" ); _alRegisterExtensionGroup( (const ALubyte*) "AL_LOKI_WAVE_format" ); _alRegisterExtensionGroup( (const ALubyte*) "AL_LOKI_play_position" ); _alRegisterExtensionGroup( (const ALubyte*) "AL_LOKI_quadriphonic" ); #ifdef ENABLE_EXTENSION_AL_EXT_MP3 _alRegisterExtensionGroup( (const ALubyte*) "AL_EXT_MP3" ); #endif /* ENABLE_EXTENSION_AL_EXT_MP3 */ #ifdef ENABLE_EXTENSION_AL_EXT_VORBIS _alRegisterExtensionGroup( (const ALubyte*) "AL_EXT_vorbis" ); #endif /* ENABLE_EXTENSION_AL_EXT_VORBIS */ #endif /* BUILTIN_EXT_LOKI */ _alRegisterExtensionGroup( (const ALubyte*) "AL_EXT_capture" ); _alRegisterExtensionGroup( (const ALubyte*) "ALC_EXT_capture" ); _alRegisterExtensionGroup( (const ALubyte*) "AL_EXT_offset" ); for(i = 0; exts[i].addr != NULL; i++) { _alRegisterExtension(exts[i].name, exts[i].addr); } /* do builtin extensions initialization */ BUILTIN_EXT_LOKI_INIT; BUILTIN_EXT_MP3_INIT; BUILTIN_EXT_VORBIS_INIT; return AL_TRUE; }