]> git.mxchange.org Git - flightgear.git/commitdiff
Improve OpenAL driver for IAXClient
authorf-jjth <clemaez@hotmail.fr>
Mon, 19 Aug 2013 12:36:13 +0000 (14:36 +0200)
committerf-jjth <clemaez@hotmail.fr>
Mon, 19 Aug 2013 12:39:18 +0000 (14:39 +0200)
Abort OpenAL initialization if input device are not found in this way we don't create and merge new OpenAL context with SGSoundMgr
Close OpenAL context and input device when FG is stopped

utils/iaxclient/lib/audio_openal.c

index fbc9c4b02b201cce7a1294ded327f0e0b3f1d089..30d821239e49085f09b96f40934bc61b7e7f7a5d 100644 (file)
@@ -248,6 +248,12 @@ int openal_mic_boost_set(struct iaxc_audio_driver *d, int enable)
 
 int openal_destroy(struct iaxc_audio_driver *d)
 {
+    struct openal_priv_data* priv = (struct openal_priv_data*)(d->priv);
+
+    alcCaptureStop(priv->in_dev);
+    alcCaptureCloseDevice(priv->in_dev);
+    alDeleteSources(1, &priv->source);
+
     return 0;
 }
 
@@ -256,11 +262,19 @@ int openal_initialize(struct iaxc_audio_driver *d, int sample_rate)
     struct openal_priv_data* priv = malloc(sizeof(struct openal_priv_data));
     int err = alGetError();
     d->priv = priv;
-   
+
+    // First we are looking for input device
+    priv->in_dev = alcCaptureOpenDevice(NULL, 8000, AL_FORMAT_MONO16, 800);
+    if (!priv->in_dev) return openal_error("alcCaptureOpenDevice", alGetError());
+
+    alcCaptureStart(priv->in_dev);
+    if ((err = alGetError())) return openal_error("alcCaptureStart", err);
+
+    // Then we look for output device
     priv->out_ctx = alcGetCurrentContext();
 
     if( priv->out_ctx == NULL ) { // FGCom standalone only
-       ALCdevice* out_dev = alcOpenDevice(0);
+       ALCdevice* out_dev = alcOpenDevice(NULL);
        if (out_dev == 0) return openal_error("alcOpenDevice", alGetError());
 
        priv->out_ctx = alcCreateContext(out_dev, 0);
@@ -285,12 +299,6 @@ int openal_initialize(struct iaxc_audio_driver *d, int sample_rate)
     alGenSources(1, &priv->source);
     if ((err = alGetError())) return openal_error("alGenSources", err);
 
-    priv->in_dev = alcCaptureOpenDevice(0, 8000, AL_FORMAT_MONO16, 800);
-    if (!priv->in_dev) return openal_error("alcCaptureOpenDevice", 0);
-
-    alcCaptureStart(priv->in_dev);
-    if ((err = alGetError())) return openal_error("alcCaptureStart", err);
-
     d->initialize = openal_initialize;
     d->destroy = openal_destroy;
     d->select_devices = openal_select_devices;