From 1bcc071e269a026b1c20cb5613480e60a423c8ad Mon Sep 17 00:00:00 2001 From: havoc Date: Thu, 30 Aug 2007 13:26:58 +0000 Subject: [PATCH] OGG_FreeSfx and WAV_FreeSfx no longer reference sfx_t OGG_FetchEnd no longer uses a pointer pointer git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@7550 d7cf8633-e32d-0410-b094-e92efae38249 --- snd_main.c | 5 +++-- snd_main.h | 4 ++-- snd_ogg.c | 14 ++++---------- snd_wav.c | 9 ++------- 4 files changed, 11 insertions(+), 21 deletions(-) diff --git a/snd_main.c b/snd_main.c index f5991953..ce790b34 100644 --- a/snd_main.c +++ b/snd_main.c @@ -874,7 +874,7 @@ void S_FreeSfx (sfx_t *sfx, qboolean force) // Free it if (sfx->fetcher != NULL && sfx->fetcher->free != NULL) - sfx->fetcher->free (sfx); + sfx->fetcher->free (sfx->fetcher_data); Mem_Free (sfx); } @@ -1248,12 +1248,13 @@ void S_StopChannel (unsigned int channel_ind) { snd_fetcher_endsb_t fetcher_endsb = sfx->fetcher->endsb; if (fetcher_endsb != NULL) - fetcher_endsb (&ch->fetcher_data); + fetcher_endsb (ch->fetcher_data); } // Remove the lock it holds S_UnlockSfx (sfx); + ch->fetcher_data = NULL; ch->sfx = NULL; } } diff --git a/snd_main.h b/snd_main.h index eb4f4fb1..3b53b62a 100644 --- a/snd_main.h +++ b/snd_main.h @@ -97,8 +97,8 @@ typedef struct channel_s // Sound fetching functions // "start" is both an input and output parameter: it returns the actual start time of the sound buffer typedef const snd_buffer_t* (*snd_fetcher_getsb_t) (void *sfxfetcher, void **chfetcherpointer, unsigned int *start, unsigned int nbsampleframes); -typedef void (*snd_fetcher_endsb_t) (void **chfetcherpointer); -typedef void (*snd_fetcher_free_t) (sfx_t* sfx); +typedef void (*snd_fetcher_endsb_t) (void *chfetcherdata); +typedef void (*snd_fetcher_free_t) (void *sfxfetcherdata); typedef const snd_format_t* (*snd_fetcher_getfmt_t) (sfx_t* sfx); struct snd_fetcher_s { diff --git a/snd_ogg.c b/snd_ogg.c index b8ab271f..28ccab1b 100644 --- a/snd_ogg.c +++ b/snd_ogg.c @@ -567,9 +567,9 @@ static const snd_buffer_t* OGG_FetchSound (void *sfxfetcher, void **chfetcherpoi OGG_FetchEnd ==================== */ -static void OGG_FetchEnd (void **chfetcherpointer) +static void OGG_FetchEnd (void *chfetcherdata) { - ogg_stream_perchannel_t* per_ch = (ogg_stream_perchannel_t *)*chfetcherpointer; + ogg_stream_perchannel_t* per_ch = (ogg_stream_perchannel_t *)chfetcherdata; if (per_ch != NULL) { @@ -578,7 +578,6 @@ static void OGG_FetchEnd (void **chfetcherpointer) Mem_Free (per_ch); } - *chfetcherpointer = NULL; } @@ -587,20 +586,15 @@ static void OGG_FetchEnd (void **chfetcherpointer) OGG_FreeSfx ==================== */ -static void OGG_FreeSfx (sfx_t* sfx) +static void OGG_FreeSfx (void *sfxfetcherdata) { - ogg_stream_persfx_t* per_sfx = (ogg_stream_persfx_t *)sfx->fetcher_data; + ogg_stream_persfx_t* per_sfx = (ogg_stream_persfx_t *)sfxfetcherdata; // Free the Ogg Vorbis file Mem_Free(per_sfx->file); - sfx->memsize -= per_sfx->filesize; // Free the stream structure Mem_Free(per_sfx); - sfx->memsize -= sizeof (*per_sfx); - - sfx->fetcher_data = NULL; - sfx->fetcher = NULL; } diff --git a/snd_wav.c b/snd_wav.c index 8495518e..7ce6b274 100644 --- a/snd_wav.c +++ b/snd_wav.c @@ -234,16 +234,11 @@ static const snd_buffer_t* WAV_FetchSound (void *sfxfetcher, void **chfetcherpoi WAV_FreeSfx ==================== */ -static void WAV_FreeSfx (sfx_t* sfx) +static void WAV_FreeSfx (void *sfxfetcherdata) { - snd_buffer_t* sb = (snd_buffer_t *)sfx->fetcher_data; - + snd_buffer_t* sb = (snd_buffer_t *)sfxfetcherdata; // Free the sound buffer - sfx->memsize -= (sb->maxframes * sb->format.channels * sb->format.width) + sizeof (*sb) - sizeof (sb->samples); Mem_Free(sb); - - sfx->fetcher_data = NULL; - sfx->fetcher = NULL; } /* -- 2.39.2