static int AndroidAUD_OpenDevice(_THIS, void *handle, const char *devname, int iscapture) { SDL_AudioFormat test_format; if (iscapture) { /* TODO: implement capture */ return SDL_SetError("Capture not supported on Android"); } if (audioDevice != NULL) { return SDL_SetError("Only one audio device at a time please!"); } audioDevice = this; this->hidden = (struct SDL_PrivateAudioData *) SDL_calloc(1, (sizeof *this->hidden)); if (this->hidden == NULL) { return SDL_OutOfMemory(); } test_format = SDL_FirstAudioFormat(this->spec.format); while (test_format != 0) { /* no "UNKNOWN" constant */ if ((test_format == AUDIO_U8) || (test_format == AUDIO_S16LSB)) { this->spec.format = test_format; break; } test_format = SDL_NextAudioFormat(); } if (test_format == 0) { /* Didn't find a compatible format :( */ return SDL_SetError("No compatible audio format!"); } if (this->spec.channels > 1) { this->spec.channels = 2; } else { this->spec.channels = 1; } if (this->spec.freq < 8000) { this->spec.freq = 8000; } if (this->spec.freq > 48000) { this->spec.freq = 48000; } /* TODO: pass in/return a (Java) device ID, also whether we're opening for input or output */ this->spec.samples = Android_JNI_OpenAudioDevice(this->spec.freq, this->spec.format == AUDIO_U8 ? 0 : 1, this->spec.channels, this->spec.samples); SDL_CalculateAudioSpec(&this->spec); if (this->spec.samples == 0) { /* Init failed? */ return SDL_SetError("Java-side initialization failed!"); } return 0; }
static int ANDROIDAUDIO_OpenDevice(_THIS, void *handle, const char *devname, int iscapture) { SDL_AudioFormat test_format; SDL_assert((captureDevice == NULL) || !iscapture); SDL_assert((audioDevice == NULL) || iscapture); if (iscapture) { captureDevice = this; } else { audioDevice = this; } this->hidden = (struct SDL_PrivateAudioData *) SDL_calloc(1, (sizeof *this->hidden)); if (this->hidden == NULL) { return SDL_OutOfMemory(); } test_format = SDL_FirstAudioFormat(this->spec.format); while (test_format != 0) { /* no "UNKNOWN" constant */ if ((test_format == AUDIO_U8) || (test_format == AUDIO_S16LSB)) { this->spec.format = test_format; break; } test_format = SDL_NextAudioFormat(); } if (test_format == 0) { /* Didn't find a compatible format :( */ return SDL_SetError("No compatible audio format!"); } if (this->spec.channels > 1) { this->spec.channels = 2; } else { this->spec.channels = 1; } if (this->spec.freq < 8000) { this->spec.freq = 8000; } if (this->spec.freq > 48000) { this->spec.freq = 48000; } /* TODO: pass in/return a (Java) device ID */ this->spec.samples = Android_JNI_OpenAudioDevice(iscapture, this->spec.freq, this->spec.format == AUDIO_U8 ? 0 : 1, this->spec.channels, this->spec.samples); if (this->spec.samples == 0) { /* Init failed? */ return SDL_SetError("Java-side initialization failed!"); } SDL_CalculateAudioSpec(&this->spec); return 0; }
static int ANDROIDAUDIO_OpenDevice(_THIS, void *handle, const char *devname, int iscapture) { SDL_AudioFormat test_format; SDL_assert((captureDevice == NULL) || !iscapture); SDL_assert((audioDevice == NULL) || iscapture); if (iscapture) { captureDevice = this; } else { audioDevice = this; } this->hidden = (struct SDL_PrivateAudioData *) SDL_calloc(1, (sizeof *this->hidden)); if (this->hidden == NULL) { return SDL_OutOfMemory(); } test_format = SDL_FirstAudioFormat(this->spec.format); while (test_format != 0) { /* no "UNKNOWN" constant */ if ((test_format == AUDIO_U8) || (test_format == AUDIO_S16) || (test_format == AUDIO_F32)) { this->spec.format = test_format; break; } test_format = SDL_NextAudioFormat(); } if (test_format == 0) { /* Didn't find a compatible format :( */ return SDL_SetError("No compatible audio format!"); } if (Android_JNI_OpenAudioDevice(iscapture, &this->spec) < 0) { return -1; } SDL_CalculateAudioSpec(&this->spec); return 0; }