Removed AmigaOS audio driver from 1.3; it hasn't compiled for years, and it SDL-ryan-multiple-audio-device
authorRyan C. Gordon <icculus@icculus.org>
Wed, 04 Oct 2006 21:54:57 +0000
branchSDL-ryan-multiple-audio-device
changeset 3801 e17a59e6aff6
parent 3800 2d77a732bd20
child 3802 cef5d927591f
Removed AmigaOS audio driver from 1.3; it hasn't compiled for years, and it adds a lot of cruft to the core.
src/audio/SDL_audio.c
src/audio/amigaos/SDL_ahiaudio.c
src/audio/amigaos/SDL_ahiaudio.h
--- a/src/audio/SDL_audio.c	Wed Oct 04 21:39:45 2006 +0000
+++ b/src/audio/SDL_audio.c	Wed Oct 04 21:54:57 2006 +0000
@@ -67,7 +67,6 @@
 extern AudioBootStrap BAUDIO_bootstrap;
 extern AudioBootStrap COREAUDIO_bootstrap;
 extern AudioBootStrap SNDMGR_bootstrap;
-extern AudioBootStrap AHI_bootstrap;
 extern AudioBootStrap MINTAUDIO_GSXB_bootstrap;
 extern AudioBootStrap MINTAUDIO_MCSN_bootstrap;
 extern AudioBootStrap MINTAUDIO_STFA_bootstrap;
@@ -128,9 +127,6 @@
 #if SDL_AUDIO_DRIVER_SNDMGR
     &SNDMGR_bootstrap,
 #endif
-#if SDL_AUDIO_DRIVER_AHI
-    &AHI_bootstrap,
-#endif
 #if SDL_AUDIO_DRIVER_MINT
     &MINTAUDIO_GSXB_bootstrap,
     &MINTAUDIO_MCSN_bootstrap,
@@ -156,10 +152,6 @@
     NULL
 };
 
-#if SDL_AUDIO_DRIVER_AHI
-static int audio_configured = 0;
-#endif
-
 static SDL_AudioDevice *get_audio_device(SDL_AudioDeviceID id)
 {
     id--;
@@ -252,23 +244,6 @@
     void (SDLCALL * fill) (void *userdata, Uint8 * stream, int len);
     int silence;
 
-/* !!! FIXME: can we push this into the Amiga driver? */
-#if SDL_AUDIO_DRIVER_AHI
-#error this is probably broken.
-    int started = 0;
-
-/* AmigaOS NEEDS that the audio driver is opened in the thread that uses it! */
-
-    D(bug("Task audio started audio struct:<%lx>...\n", audiop));
-
-    D(bug("Before Openaudio..."));
-    if (audio->OpenAudio(audio, &audio->spec) == -1) {
-        D(bug("Open audio failed...\n"));
-        return (-1);
-    }
-    D(bug("OpenAudio...OK\n"));
-#endif
-
     /* Perform any thread setup */
     device->threadid = SDL_ThreadID();
     current_audio.impl.ThreadInit(device);
@@ -277,14 +252,6 @@
     fill = device->spec.callback;
     udata = device->spec.userdata;
 
-#if SDL_AUDIO_DRIVER_AHI
-    audio_configured = 1;
-
-    D(bug("Audio configured... Checking for conversion\n"));
-    SDL_mutexP(audio->mixer_lock);
-    D(bug("Semaphore obtained...\n"));
-#endif
-
     if (device->convert.needed) {
         if (device->convert.src_format == AUDIO_U8) {
             silence = 0x80;
@@ -297,11 +264,6 @@
         stream_len = device->spec.size;
     }
 
-#if SDL_AUDIO_DRIVER_AHI
-    SDL_mutexV(device->mixer_lock);
-    D(bug("Entering audio loop...\n"));
-#endif
-
     /* Loop, filling the audio buffers */
     while (device->enabled) {
 
@@ -356,15 +318,6 @@
     /* Wait for the audio to drain.. */
     current_audio.impl.WaitDone(device);
 
-/* !!! FIXME: get this out of core. */
-#if SDL_AUDIO_DRIVER_AHI
-    D(bug("WaitDevice...Done\n"));
-    current_audio.impl.CloseDevice(device);
-    device->opened = 0;
-    D(bug("CloseDevice..Done, subtask exiting...\n"));
-    audio_configured = 0;
-#endif
-
     return (0);
 }
 
@@ -748,34 +701,11 @@
         }
     }
 
-/* !!! FIXME: Get this #if out of the core. */
-/* AmigaOS opens audio inside the main loop */
-#if !SDL_AUDIO_DRIVER_AHI
     if (!current_audio.impl.OpenDevice(device, devname, iscapture)) {
         close_audio_device(device);
         return 0;
     }
     device->opened = 1;
-#else
-#   error needs to be fixed for new internal API. Email Ryan for details.
-
-    D(bug("Locking semaphore..."));
-    SDL_mutexP(audio->mixer_lock);
-
-
-    audio->thread = SDL_CreateThread(SDL_RunAudio, audio);
-    D(bug("Created thread...\n"));
-
-    if (audio->thread == NULL) {
-        SDL_mutexV(audio->mixer_lock);
-        SDL_CloseAudio();
-        SDL_SetError("Couldn't create audio thread");
-        return 0;
-    }
-
-    while (!audio_configured)
-        SDL_Delay(100);
-#endif
 
     /* If the audio driver changes the buffer size, accept it */
     if (device->spec.samples != desired.samples) {
@@ -834,8 +764,6 @@
         return 0;
     }
 
-/* !!! FIXME: get this out of core. */
-#if !SDL_AUDIO_DRIVER_AHI
     /* Start the audio thread if necessary */
     if (!current_audio.impl.ProvidesOwnCallbackThread) {
         /* Start the audio thread */
@@ -853,12 +781,6 @@
         }
     }
 
-#else
-    SDL_mutexV(audio->mixer_lock);
-    D(bug("SDL_OpenAudio USCITA...\n"));
-
-#endif
-
     return id+1;
 }
 
--- a/src/audio/amigaos/SDL_ahiaudio.c	Wed Oct 04 21:39:45 2006 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,360 +0,0 @@
-/*
-    SDL - Simple DirectMedia Layer
-    Copyright (C) 1997-2006 Sam Lantinga
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    Sam Lantinga
-    slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-/* Allow access to a raw mixing buffer (for AmigaOS) */
-
-#include "SDL_audio.h"
-#include "../SDL_audio_c.h"
-#include "SDL_ahiaudio.h"
-
-/* Audio driver functions */
-static int AHI_OpenAudio(_THIS, SDL_AudioSpec * spec);
-static void AHI_WaitAudio(_THIS);
-static void AHI_PlayAudio(_THIS);
-static Uint8 *AHI_GetAudioBuf(_THIS);
-static void AHI_CloseAudio(_THIS);
-
-#ifndef __SASC
-#define mymalloc(x) AllocVec(x,MEMF_PUBLIC)
-#define myfree FreeVec
-#else
-#define mymalloc malloc
-#define myfree free
-#endif
-
-/* Audio driver bootstrap functions */
-
-static int
-Audio_Available(void)
-{
-    int ok = 0;
-    struct MsgPort *p;
-    struct AHIRequest *req;
-
-    if (p = CreateMsgPort()) {
-        if (req =
-            (struct AHIRequest *) CreateIORequest(p,
-                                                  sizeof(struct
-                                                         AHIRequest))) {
-            req->ahir_Version = 4;
-
-            if (!OpenDevice(AHINAME, 0, (struct IORequest *) req, NULL)) {
-                D(bug("AHI available.\n"));
-                ok = 1;
-                CloseDevice((struct IORequest *) req);
-            }
-            DeleteIORequest((struct IORequest *) req);
-        }
-        DeleteMsgPort(p);
-    }
-
-    D(if (!ok) bug("AHI not available\n"));
-    return ok;
-}
-
-static void
-Audio_DeleteDevice(SDL_AudioDevice * device)
-{
-    SDL_free(device->hidden);
-    SDL_free(device);
-}
-
-static SDL_AudioDevice *
-Audio_CreateDevice(int devindex)
-{
-    SDL_AudioDevice *this;
-
-#ifndef NO_AMIGADEBUG
-    D(bug("AHI created...\n"));
-#endif
-
-    /* Initialize all variables that we clean on shutdown */
-    this = (SDL_AudioDevice *) SDL_malloc(sizeof(SDL_AudioDevice));
-    if (this) {
-        SDL_memset(this, 0, (sizeof *this));
-        this->hidden = (struct SDL_PrivateAudioData *)
-            SDL_malloc((sizeof *this->hidden));
-    }
-    if ((this == NULL) || (this->hidden == NULL)) {
-        SDL_OutOfMemory();
-        if (this) {
-            SDL_free(this);
-        }
-        return (0);
-    }
-    SDL_memset(this->hidden, 0, (sizeof *this->hidden));
-
-    /* Set the function pointers */
-    this->OpenAudio = AHI_OpenAudio;
-    this->WaitAudio = AHI_WaitAudio;
-    this->PlayAudio = AHI_PlayAudio;
-    this->GetAudioBuf = AHI_GetAudioBuf;
-    this->CloseAudio = AHI_CloseAudio;
-
-    this->free = Audio_DeleteDevice;
-
-    return this;
-}
-
-AudioBootStrap AHI_bootstrap = {
-    "AHI", Audio_Available, Audio_CreateDevice
-};
-
-
-void static
-AHI_WaitAudio(_THIS)
-{
-    if (!CheckIO((struct IORequest *) audio_req[current_buffer])) {
-        WaitIO((struct IORequest *) audio_req[current_buffer]);
-//              AbortIO((struct IORequest *)audio_req[current_buffer]);
-    }
-}
-
-static void
-AHI_PlayAudio(_THIS)
-{
-    if (playing > 1)
-        WaitIO((struct IORequest *) audio_req[current_buffer]);
-
-    /* Write the audio data out */
-    audio_req[current_buffer]->ahir_Std.io_Message.mn_Node.ln_Pri = 60;
-    audio_req[current_buffer]->ahir_Std.io_Data = mixbuf[current_buffer];
-    audio_req[current_buffer]->ahir_Std.io_Length = this->hidden->size;
-    audio_req[current_buffer]->ahir_Std.io_Offset = 0;
-    audio_req[current_buffer]->ahir_Std.io_Command = CMD_WRITE;
-    audio_req[current_buffer]->ahir_Frequency = this->hidden->freq;
-    audio_req[current_buffer]->ahir_Volume = 0x10000;
-    audio_req[current_buffer]->ahir_Type = this->hidden->type;
-    audio_req[current_buffer]->ahir_Position = 0x8000;
-    audio_req[current_buffer]->ahir_Link =
-        (playing > 0 ? audio_req[current_buffer ^ 1] : NULL);
-
-    SendIO((struct IORequest *) audio_req[current_buffer]);
-    current_buffer ^= 1;
-
-    playing++;
-}
-
-static Uint8 *
-AHI_GetAudioBuf(_THIS)
-{
-    return (mixbuf[current_buffer]);
-}
-
-static void
-AHI_CloseAudio(_THIS)
-{
-    D(bug("Closing audio...\n"));
-
-    playing = 0;
-
-    if (audio_req[0]) {
-        if (audio_req[1]) {
-            D(bug("Break req[1]...\n"));
-
-            AbortIO((struct IORequest *) audio_req[1]);
-            WaitIO((struct IORequest *) audio_req[1]);
-        }
-
-        D(bug("Break req[0]...\n"));
-
-        AbortIO((struct IORequest *) audio_req[0]);
-        WaitIO((struct IORequest *) audio_req[0]);
-
-        if (audio_req[1]) {
-            D(bug("Break AGAIN req[1]...\n"));
-            AbortIO((struct IORequest *) audio_req[1]);
-            WaitIO((struct IORequest *) audio_req[1]);
-        }
-// Double abort to be sure to break the dbuffering process.
-
-        SDL_Delay(200);
-
-        D(bug("Reqs breaked, closing device...\n"));
-        CloseDevice((struct IORequest *) audio_req[0]);
-        D(bug("Device closed, freeing memory...\n"));
-        myfree(audio_req[1]);
-        D(bug("Memory freed, deleting IOReq...\n"));
-        DeleteIORequest((struct IORequest *) audio_req[0]);
-        audio_req[0] = audio_req[1] = NULL;
-    }
-
-    D(bug("Freeing mixbuf[0]...\n"));
-    if (mixbuf[0] != NULL) {
-        myfree(mixbuf[0]);
-//              SDL_FreeAudioMem(mixbuf[0]);
-        mixbuf[0] = NULL;
-    }
-
-    D(bug("Freeing mixbuf[1]...\n"));
-    if (mixbuf[1] != NULL) {
-        myfree(mixbuf[1]);
-//              SDL_FreeAudioMem(mixbuf[1]);
-        mixbuf[1] = NULL;
-    }
-
-    D(bug("Freeing audio_port...\n"));
-
-    if (audio_port != NULL) {
-        DeleteMsgPort(audio_port);
-        audio_port = NULL;
-    }
-    D(bug("...done!\n"));
-}
-
-static int
-AHI_OpenAudio(_THIS, SDL_AudioSpec * spec)
-{
-//      int width;
-    SDL_AudioFormat test_format = SDL_FirstAudioFormat(spec->format);
-    int valid_datatype = 1;
-
-    D(bug("AHI opening...\n"));
-
-    /* Determine the audio parameters from the AudioSpec */
-    while ((!valid_datatype) && (test_format)) {
-        valid_datatype = 1;
-        switch (test_format) {
-        case AUDIO_S8:
-            D(bug("AUDIO_S8...\n"));
-            spec->format = AUDIO_S8;
-            this->hidden->bytespersample = 1;
-            if (spec->channels < 2)
-                this->hidden->type = AHIST_M8S;
-            else
-                this->hidden->type = AHIST_S8S;
-            break;
-
-        case AUDIO_S16MSB:
-            D(bug("AUDIO_S16MSB...\n"));
-            spec->format = AUDIO_S16MSB;
-            this->hidden->bytespersample = 2;
-            if (spec->channels < 2)
-                this->hidden->type = AHIST_M16S;
-            else
-                this->hidden->type = AHIST_S16S;
-            break;
-
-        case AUDIO_S32MSB:
-            D(bug("AUDIO_S32MSB...\n"));
-            spec->format = AUDIO_S32MSB;
-            this->hidden->bytespersample = 4;
-            if (spec->channels < 2)
-                this->hidden->type = AHIST_M32S;
-            else
-                this->hidden->type = AHIST_S32S;
-            break;
-
-        default:
-            valid_datatype = 0;
-            test_format = SDL_NextAudioFormat();
-            break;
-        }
-    }
-
-    if (!valid_datatype) {      /* shouldn't happen, but just in case... */
-        SDL_SetError("Unsupported audio format");
-        return (-1);
-    }
-
-    if (spec->channels > 2) {
-        spec->channels = 2;     /* will convert at higher level. */
-    }
-
-    D(bug("Before CalculateAudioSpec\n"));
-    /* Update the fragment size as size in bytes */
-    SDL_CalculateAudioSpec(spec);
-
-    D(bug("Before CreateMsgPort\n"));
-
-    if (!(audio_port = CreateMsgPort())) {
-        SDL_SetError("Unable to create a MsgPort");
-        return -1;
-    }
-
-    D(bug("Before CreateIORequest\n"));
-
-    if (!
-        (audio_req[0] =
-         (struct AHIRequest *) CreateIORequest(audio_port,
-                                               sizeof(struct AHIRequest)))) {
-        SDL_SetError("Unable to create an AHIRequest");
-        DeleteMsgPort(audio_port);
-        return -1;
-    }
-
-    audio_req[0]->ahir_Version = 4;
-
-    if (OpenDevice(AHINAME, 0, (struct IORequest *) audio_req[0], NULL)) {
-        SDL_SetError("Unable to open AHI device!\n");
-        DeleteIORequest((struct IORequest *) audio_req[0]);
-        DeleteMsgPort(audio_port);
-        return -1;
-    }
-
-    D(bug("AFTER opendevice\n"));
-
-    /* Set output frequency and size */
-    this->hidden->freq = spec->freq;
-    this->hidden->size = spec->size;
-
-    D(bug("Before buffer allocation\n"));
-
-    /* Allocate mixing buffer */
-    mixbuf[0] = (Uint8 *) mymalloc(spec->size);
-    mixbuf[1] = (Uint8 *) mymalloc(spec->size);
-
-    D(bug("Before audio_req allocation\n"));
-
-    if (!(audio_req[1] = mymalloc(sizeof(struct AHIRequest)))) {
-        SDL_OutOfMemory();
-        return (-1);
-    }
-
-    D(bug("Before audio_req memcpy\n"));
-
-    SDL_memcpy(audio_req[1], audio_req[0], sizeof(struct AHIRequest));
-
-    if (mixbuf[0] == NULL || mixbuf[1] == NULL) {
-        SDL_OutOfMemory();
-        return (-1);
-    }
-
-    D(bug("Before mixbuf memset\n"));
-
-    SDL_memset(mixbuf[0], spec->silence, spec->size);
-    SDL_memset(mixbuf[1], spec->silence, spec->size);
-
-    current_buffer = 0;
-    playing = 0;
-
-    D(bug
-      ("AHI opened: freq:%ld mixbuf:%lx/%lx buflen:%ld bits:%ld channels:%ld\n",
-       spec->freq, mixbuf[0], mixbuf[1], spec->size,
-       this->hidden->bytespersample * 8, spec->channels));
-
-    /* We're ready to rock and roll. :-) */
-    return (0);
-}
-
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/audio/amigaos/SDL_ahiaudio.h	Wed Oct 04 21:39:45 2006 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-/*
-    SDL - Simple DirectMedia Layer
-    Copyright (C) 1997-2006 Sam Lantinga
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    Sam Lantinga
-    slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-#ifndef _SDL_ahiaudio_h
-#define _SDL_ahiaudio_h
-
-#include <exec/exec.h>
-#include <dos/dos.h>
-#ifdef __SASC
-#include <proto/exec.h>
-#else
-#include <inline/exec.h>
-#endif
-
-#include <devices/ahi.h>
-#include "mydebug.h"
-
-#include "../SDL_sysaudio.h"
-
-/* Hidden "this" pointer for the audio functions */
-#define _THIS	SDL_AudioDevice *this
-
-struct SDL_PrivateAudioData
-{
-    /* The handle for the audio device */
-    struct AHIRequest *audio_req[2];
-    struct MsgPort *audio_port;
-    Sint32 freq, type, bytespersample, size;
-    Uint8 *mixbuf[2];           /* The app mixing buffer */
-    int current_buffer;
-    Uint32 playing;
-};
-
-/* Old variable names */
-#define audio_port		(this->hidden->audio_port)
-#define audio_req		(this->hidden->audio_req)
-#define mixbuf			(this->hidden->mixbuf)
-#define current_buffer		(this->hidden->current_buffer)
-#define playing			(this->hidden->playing)
-
-#endif /* _SDL_ahiaudio_h */
-/* vi: set ts=4 sw=4 expandtab: */