From 7c06681a141f6f52297b1c2be11ecc8385dfd4cc Mon Sep 17 00:00:00 2001 From: avolkov Date: Tue, 2 May 2006 23:34:43 +0000 Subject: [PATCH] Potential libmikmod linkage improvements: avoiding mikmod.h conflicts; building against libmikmod 3.2.x; last bit of custom code gone from internal mikmod git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@2340 8092fc87-c524-0410-9efc-e669fe64eaf9 --- .../libs/sound/decoders/mikmod/Makeinfo | 2 +- .../libs/sound/decoders/mikmod/mdreg.c | 3 - sc2/src/sc2code/libs/sound/decoders/modaud.c | 107 +++++++++++++++++- 3 files changed, 104 insertions(+), 8 deletions(-) diff --git a/sc2/src/sc2code/libs/sound/decoders/mikmod/Makeinfo b/sc2/src/sc2code/libs/sound/decoders/mikmod/Makeinfo index d90e0f14c..407163618 100644 --- a/sc2/src/sc2code/libs/sound/decoders/mikmod/Makeinfo +++ b/sc2/src/sc2code/libs/sound/decoders/mikmod/Makeinfo @@ -1,3 +1,3 @@ -uqm_CFILES="drv_nos.c drv_openal.c load_mod.c mdreg.c mdriver.c mloader.c +uqm_CFILES="drv_nos.c load_mod.c mdreg.c mdriver.c mloader.c mlreg.c mlutil.c mmalloc.c mmerror.c mmio.c mplayer.c munitrk.c mwav.c npertab.c sloader.c virtch.c virtch2.c virtch_common.c" diff --git a/sc2/src/sc2code/libs/sound/decoders/mikmod/mdreg.c b/sc2/src/sc2code/libs/sound/decoders/mikmod/mdreg.c index 0ada9e005..2de8db248 100644 --- a/sc2/src/sc2code/libs/sound/decoders/mikmod/mdreg.c +++ b/sc2/src/sc2code/libs/sound/decoders/mikmod/mdreg.c @@ -28,11 +28,8 @@ #include "mikmod_internals.h" -MIKMODAPI extern struct MDRIVER drv_openal; - void _mm_registeralldrivers(void) { - _mm_registerdriver(&drv_openal); _mm_registerdriver(&drv_nos); } diff --git a/sc2/src/sc2code/libs/sound/decoders/modaud.c b/sc2/src/sc2code/libs/sound/decoders/modaud.c index f80f65f2e..1133db345 100644 --- a/sc2/src/sc2code/libs/sound/decoders/modaud.c +++ b/sc2/src/sc2code/libs/sound/decoders/modaud.c @@ -26,12 +26,16 @@ #include "endian_uqm.h" #include "uio.h" #include "decoder.h" -#include "mikmod/mikmod.h" -#include "mikmod/drv_openal.h" #include "libs/sound/audiocore.h" #include "libs/log.h" #include "modaud.h" +#ifdef USE_EXTERNAL_MIKMOD +# include "mikmod.h" +#else +# include "mikmod/mikmod.h" +#endif + #define THIS_PTR TFB_SoundDecoder* This static const char* moda_GetName (void); @@ -74,6 +78,101 @@ typedef struct tfb_modsounddecoder } TFB_ModSoundDecoder; + + +// MikMod Output driver +// we provide our own so that we can use MikMod as +// generic decoder + +static void* buffer; +static ULONG bufsize; +static ULONG written; + +ULONG* +moda_mmout_SetOutputBuffer (void* buf, ULONG size) +{ + buffer = buf; + bufsize = size; + written = 0; + return &written; +} + +static BOOL +moda_mmout_IsThere (void) +{ + return 1; +} + +static BOOL +moda_mmout_Init (void) +{ + md_mode |= DMODE_SOFT_MUSIC | DMODE_SOFT_SNDFX; + return VC_Init (); +} + +static void +moda_mmout_Exit (void) +{ + VC_Exit (); +} + +static void +moda_mmout_Update (void) +{ + written = 0; + if (!buffer || bufsize == 0) + return; + + written = VC_WriteBytes (buffer, bufsize); +} + +static BOOL +moda_mmout_Reset (void) +{ + return 0; +} + +static MDRIVER moda_mmout_drv = +{ NULL, + "Mem Buffer", // Name + "Mem Buffer driver v1.1", // Version + 0, 255, // Voice limits + "membuf", // Alias + +// The minimum mikmod version we support is 3.1.8 +#if (LIBMIKMOD_VERSION_MAJOR > 3) || \ + ((LIBMIKMOD_VERSION_MAJOR == 3) && (LIBMIKMOD_VERSION_MINOR >= 2)) + NULL, // Cmdline help +#endif + + NULL, + moda_mmout_IsThere, + VC_SampleLoad, + VC_SampleUnload, + VC_SampleSpace, + VC_SampleLength, + moda_mmout_Init, + moda_mmout_Exit, + moda_mmout_Reset, + VC_SetNumVoices, + VC_PlayStart, + VC_PlayStop, + moda_mmout_Update, + NULL, /* FIXME: Pause */ + VC_VoiceSetVolume, + VC_VoiceGetVolume, + VC_VoiceSetFrequency, + VC_VoiceGetFrequency, + VC_VoiceSetPanning, + VC_VoiceGetPanning, + VC_VoicePlay, + VC_VoiceStop, + VC_VoiceStopped, + VC_VoiceGetPosition, + VC_VoiceRealVolume +}; + + static const TFB_DecoderFormats* moda_formats = NULL; // MikMod READER interface @@ -149,7 +248,7 @@ moda_GetName (void) static bool moda_InitModule (int flags, const TFB_DecoderFormats* fmts) { - MikMod_RegisterDriver (&drv_openal); + MikMod_RegisterDriver (&moda_mmout_drv); MikMod_RegisterAllLoaders (); if (flags & audio_QUALITY_HIGH) @@ -293,7 +392,7 @@ moda_Decode (THIS_PTR, void* buf, sint32 bufsize) if (!Player_Active()) return 0; - poutsize = ALDRV_SetOutputBuffer (buf, bufsize); + poutsize = moda_mmout_SetOutputBuffer (buf, bufsize); MikMod_Update (); return *poutsize;