From b7f596a410a9dc9222de97bfc98e29e139f1f421 Mon Sep 17 00:00:00 2001 From: Cary Sandvig Date: Thu, 30 Nov 2000 23:47:51 +0000 Subject: [PATCH] I hope this works --- panda/src/audio/audio_linux_traits.cxx | 12 ++++++++++++ panda/src/audio/audio_linux_traits.h | 10 ++++++---- panda/src/audio/audio_mikmod_traits.cxx | 18 ++++++++++++++++++ panda/src/audio/audio_mikmod_traits.h | 16 ++++++++++------ panda/src/audio/audio_null_traits.cxx | 6 ++++++ panda/src/audio/audio_null_traits.h | 5 +++-- panda/src/audio/audio_pool.cxx | 16 ++++++++++------ panda/src/audio/audio_pool.h | 2 +- panda/src/audio/audio_sound.h | 8 +++++--- panda/src/audio/audio_trait.cxx | 3 +++ panda/src/audio/audio_trait.h | 6 ++++-- panda/src/audio/audio_win_traits.cxx | 12 ++++++++++++ panda/src/audio/audio_win_traits.h | 11 +++++++---- 13 files changed, 97 insertions(+), 28 deletions(-) diff --git a/panda/src/audio/audio_linux_traits.cxx b/panda/src/audio/audio_linux_traits.cxx index a49bcd9709..65b224aca0 100644 --- a/panda/src/audio/audio_linux_traits.cxx +++ b/panda/src/audio/audio_linux_traits.cxx @@ -270,17 +270,23 @@ AudioTraits::PlayerClass* LinuxSample::get_player(void) const { return LinuxSamplePlayer::get_instance(); } +// REFCOUNT +/* AudioTraits::DeleteSoundFunc* LinuxSample::get_destroy(void) const { return LinuxSample::destroy; } +*/ AudioTraits::DeletePlayingFunc* LinuxSample::get_delstate(void) const { return LinuxSamplePlaying::destroy; } +// REFCOUNT +/* void LinuxSample::destroy(AudioTraits::SoundClass* sound) { delete sound; } +*/ LinuxSample* LinuxSample::load_raw(byte* data, unsigned long size) { LinuxSample* ret = new LinuxSample(data, size); @@ -302,17 +308,23 @@ AudioTraits::PlayerClass* LinuxMusic::get_player(void) const { return LinuxMusicPlayer::get_instance(); } +// REFCOUNT +/* AudioTraits::DeleteSoundFunc* LinuxMusic::get_destroy(void) const { return LinuxMusic::destroy; } +*/ AudioTraits::DeletePlayingFunc* LinuxMusic::get_delstate(void) const { return LinuxMusicPlaying::destroy; } +// REFCOUNT +/* void LinuxMusic::destroy(AudioTraits::SoundClass* music) { delete music; } +*/ LinuxSamplePlaying::~LinuxSamplePlaying(void) { } diff --git a/panda/src/audio/audio_linux_traits.h b/panda/src/audio/audio_linux_traits.h index ec9f607734..261ea36b8f 100644 --- a/panda/src/audio/audio_linux_traits.h +++ b/panda/src/audio/audio_linux_traits.h @@ -70,9 +70,10 @@ public: virtual float length(void) const; virtual AudioTraits::PlayingClass* get_state(void) const; virtual AudioTraits::PlayerClass* get_player(void) const; - virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const; + // REFCOUNT + // virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const; + // static void destroy(AudioTraits::SoundClass*); virtual AudioTraits::DeletePlayingFunc* get_delstate(void) const; - static void destroy(AudioTraits::SoundClass*); public: // used by the loader static LinuxSample* load_raw(byte*, unsigned long); @@ -89,9 +90,10 @@ public: virtual float length(void) const; virtual AudioTraits::PlayingClass* get_state(void) const; virtual AudioTraits::PlayerClass* get_player(void) const; - virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const; + // REFCOUNT + // virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const; + // static void destroy(AudioTraits::SoundClass*); virtual AudioTraits::DeletePlayingFunc* get_delstate(void) const; - static void destroy(AudioTraits::SoundClass*); }; class EXPCL_PANDA LinuxSamplePlaying : public AudioTraits::PlayingClass { diff --git a/panda/src/audio/audio_mikmod_traits.cxx b/panda/src/audio/audio_mikmod_traits.cxx index 72970cb80f..90c24fba14 100644 --- a/panda/src/audio/audio_mikmod_traits.cxx +++ b/panda/src/audio/audio_mikmod_traits.cxx @@ -145,9 +145,12 @@ AudioTraits::PlayerClass* MikModSample::get_player(void) const { return MikModSamplePlayer::get_instance(); } +// REFCOUNT +/* AudioTraits::DeleteSoundFunc* MikModSample::get_destroy(void) const { return MikModSample::destroy; } +*/ AudioTraits::DeletePlayingFunc* MikModSample::get_delstate(void) const { return MikModSamplePlaying::destroy; @@ -164,9 +167,12 @@ MikModSample* MikModSample::load_wav(Filename filename) { return new MikModSample(sample); } +// REFCOUNT +/* void MikModSample::destroy(AudioTraits::SoundClass* sample) { delete sample; } +*/ SAMPLE* MikModSample::get_sample(void) { return _sample; @@ -194,17 +200,23 @@ AudioTraits::PlayerClass* MikModMusic::get_player(void) const { return MikModFmsynthPlayer::get_instance(); } +// REFCOUNT +/* AudioTraits::DeleteSoundFunc* MikModMusic::get_destroy(void) const { return MikModMusic::destroy; } +*/ AudioTraits::DeletePlayingFunc* MikModMusic::get_delstate(void) const { return MikModMusicPlaying::destroy; } +// REFCOUNT +/* void MikModMusic::destroy(AudioTraits::SoundClass* music) { delete music; } +*/ MikModMidi::MikModMidi(void) { } @@ -229,17 +241,23 @@ AudioTraits::PlayerClass* MikModMidi::get_player(void) const { return MikModMidiPlayer::get_instance(); } +// REFCOUNT +/* AudioTraits::DeleteSoundFunc* MikModMidi::get_destroy(void) const { return MikModMidi::destroy; } +*/ AudioTraits::DeletePlayingFunc* MikModMidi::get_delstate(void) const { return MikModMidiPlaying::destroy; } +// REFCOUNT +/* void MikModMidi::destroy(AudioTraits::SoundClass* music) { delete music; } +*/ MikModSamplePlaying::MikModSamplePlaying(AudioTraits::SoundClass* s) : AudioTraits::PlayingClass(s) { diff --git a/panda/src/audio/audio_mikmod_traits.h b/panda/src/audio/audio_mikmod_traits.h index b141f51afe..4f05e80e6d 100644 --- a/panda/src/audio/audio_mikmod_traits.h +++ b/panda/src/audio/audio_mikmod_traits.h @@ -27,12 +27,14 @@ public: virtual float length(void) const; virtual AudioTraits::PlayingClass* get_state(void) const; virtual AudioTraits::PlayerClass* get_player(void) const; - virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const; + // REFCOUNT + // virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const; virtual AudioTraits::DeletePlayingFunc* get_delstate(void) const; public: // used by the readers static MikModSample* load_wav(Filename); - static void destroy(AudioTraits::SoundClass*); + // REFCOUNT + // static void destroy(AudioTraits::SoundClass*); // used by the players virtual SAMPLE* get_sample(void); virtual int get_freq(void); @@ -48,9 +50,10 @@ public: virtual float length(void) const; virtual AudioTraits::PlayingClass* get_state(void) const; virtual AudioTraits::PlayerClass* get_player(void) const; - virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const; + // REFCOUNT + // virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const; + // static void destroy(AudioTraits::SoundClass*); virtual AudioTraits::DeletePlayingFunc* get_delstate(void) const; - static void destroy(AudioTraits::SoundClass*); }; class EXPCL_PANDA MikModMidi : public AudioTraits::SoundClass { @@ -62,9 +65,10 @@ public: virtual float length(void) const; virtual AudioTraits::PlayingClass* get_state(void) const; virtual AudioTraits::PlayerClass* get_player(void) const; - virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const; + // REFCOUNT + // virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const; + // static void destroy(AudioTraits::SoundClass*); virtual AudioTraits::DeletePlayingFunc* get_delstate(void) const; - static void destroy(AudioTraits::SoundClass*); public: // used by the readers static MikModMidi* load_midi(Filename); diff --git a/panda/src/audio/audio_null_traits.cxx b/panda/src/audio/audio_null_traits.cxx index 646b3b0d19..4bc64d5c4e 100644 --- a/panda/src/audio/audio_null_traits.cxx +++ b/panda/src/audio/audio_null_traits.cxx @@ -41,17 +41,23 @@ AudioTraits::PlayerClass* NullSound::get_player(void) const { return new NullPlayer(); } +// REFCOUNT +/* AudioTraits::DeleteSoundFunc* NullSound::get_destroy(void) const { return NullSound::destroy; } +*/ AudioTraits::DeletePlayingFunc* NullSound::get_delstate(void) const { return NullPlaying::destroy; } +// REFCOUNT +/* void NullSound::destroy(AudioTraits::SoundClass* sound) { delete sound; } +*/ NullPlaying::~NullPlaying(void) { } diff --git a/panda/src/audio/audio_null_traits.h b/panda/src/audio/audio_null_traits.h index 041471dbd1..a647df8cba 100644 --- a/panda/src/audio/audio_null_traits.h +++ b/panda/src/audio/audio_null_traits.h @@ -21,9 +21,10 @@ public: virtual float length(void) const; virtual AudioTraits::PlayingClass* get_state(void) const; virtual AudioTraits::PlayerClass* get_player(void) const; - virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const; + // REFCOUNT + // virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const; + // static void destroy(AudioTraits::SoundClass*); virtual AudioTraits::DeletePlayingFunc* get_delstate(void) const; - static void destroy(AudioTraits::SoundClass*); }; class EXPCL_PANDA NullPlaying : public AudioTraits::PlayingClass { diff --git a/panda/src/audio/audio_pool.cxx b/panda/src/audio/audio_pool.cxx index fb5a8aafee..eb3336fa64 100644 --- a/panda/src/audio/audio_pool.cxx +++ b/panda/src/audio/audio_pool.cxx @@ -67,7 +67,7 @@ AudioSound* AudioPool::ns_load_sound(Filename filename) { si = _sounds.find(filename); if (si != _sounds.end()) { // this sound was previously loaded - AudioTraits::SoundClass* sc = (*si).second; + PT(AudioTraits::SoundClass) sc = (*si).second; if (audio_cat->is_debug()) audio_cat->debug() << "sound is already loaded (0x" << (void*)sc << ")" << endl; @@ -91,7 +91,7 @@ AudioSound* AudioPool::ns_load_sound(Filename filename) { << "'" << endl; return (AudioSound*)0L; } - AudioTraits::SoundClass* sound = (*((*sli).second))(filename); + PT(AudioTraits::SoundClass) sound = (*((*sli).second))(filename); if (sound == (AudioTraits::SoundClass*)0L) { audio_cat->error() << "could not load '" << filename << "'" << endl; return (AudioSound*)0L; @@ -116,8 +116,10 @@ void AudioPool::ns_release_sound(AudioSound* sound) { SoundMap::iterator si; si = _sounds.find(filename); if (si != _sounds.end() && (*si).second == sound->get_sound()) { - AudioTraits::SoundClass* sc = (*si).second; - (*(sc->get_destroy()))(sc); + // REFCOUNT + // don't do this with refcounting + // AudioTraits::SoundClass* sc = (*si).second; + // (*(sc->get_destroy()))(sc); _sounds.erase(si); } } @@ -129,8 +131,10 @@ void AudioPool::ns_release_sound(AudioSound* sound) { //////////////////////////////////////////////////////////////////// void AudioPool::ns_release_all_sounds(void) { for (SoundMap::iterator i=_sounds.begin(); i!=_sounds.end(); ++i) { - AudioTraits::SoundClass* sc = (*i).second; - (*(sc->get_destroy()))(sc); + // REFCOUNT + // don't do this with refcounting + // AudioTraits::SoundClass* sc = (*i).second; + // (*(sc->get_destroy()))(sc); } _sounds.clear(); } diff --git a/panda/src/audio/audio_pool.h b/panda/src/audio/audio_pool.h index e8a8c309cd..01e6c39ec9 100644 --- a/panda/src/audio/audio_pool.h +++ b/panda/src/audio/audio_pool.h @@ -26,7 +26,7 @@ private: static AudioPool* get_ptr(void); static AudioPool *_global_ptr; - typedef map SoundMap; + typedef map SoundMap; SoundMap _sounds; public: typedef AudioTraits::SoundClass* SoundLoadFunc(Filename); diff --git a/panda/src/audio/audio_sound.h b/panda/src/audio/audio_sound.h index 3471aa9914..307623185f 100644 --- a/panda/src/audio/audio_sound.h +++ b/panda/src/audio/audio_sound.h @@ -10,8 +10,10 @@ /* #include "typedReferenceCount.h" */ -#include "typeHandle.h" -#include "namable.h" +#include +#include +#include + class AudioPool; class AudioManager; @@ -21,7 +23,7 @@ class EXPCL_PANDA AudioSound : public TypedReferenceCount, public Namable { */ class EXPCL_PANDA AudioSound : public TypedObject, public Namable { private: - AudioTraits::SoundClass *_sound; + PT(AudioTraits::SoundClass) _sound; AudioTraits::PlayingClass *_state; AudioTraits::PlayerClass *_player; AudioTraits::DeletePlayingFunc *_delstate; diff --git a/panda/src/audio/audio_trait.cxx b/panda/src/audio/audio_trait.cxx index cea1279b32..acf33b5061 100644 --- a/panda/src/audio/audio_trait.cxx +++ b/panda/src/audio/audio_trait.cxx @@ -24,11 +24,14 @@ AudioTraits::PlayerClass* AudioTraits::SoundClass::get_player(void) const { return (AudioTraits::PlayerClass*)0L; } +// REFCOUNT +/* AudioTraits::DeleteSoundFunc* AudioTraits::SoundClass::get_destroy(void) const { audio_cat->error() << "In abstract SoundClass::get_destroy!" << endl; return (AudioTraits::DeleteSoundFunc*)0L; } +*/ AudioTraits::DeletePlayingFunc* AudioTraits::SoundClass::get_delstate(void) const { diff --git a/panda/src/audio/audio_trait.h b/panda/src/audio/audio_trait.h index f90bdc776c..637979b7dc 100644 --- a/panda/src/audio/audio_trait.h +++ b/panda/src/audio/audio_trait.h @@ -7,6 +7,7 @@ #define __AUDIO_TRAIT_H__ #include +#include class EXPCL_PANDA AudioTraits { public: @@ -17,7 +18,7 @@ public: typedef void DeleteSoundFunc(SoundClass*); typedef void DeletePlayingFunc(PlayingClass*); - class EXPCL_PANDA SoundClass { + class EXPCL_PANDA SoundClass : public ReferenceCount { public: SoundClass(void) {} virtual ~SoundClass(void); @@ -25,7 +26,8 @@ public: virtual float length(void) const = 0; virtual PlayingClass* get_state(void) const = 0; virtual PlayerClass* get_player(void) const = 0; - virtual DeleteSoundFunc* get_destroy(void) const = 0; + // REFCOUNT + // virtual DeleteSoundFunc* get_destroy(void) const = 0; virtual DeletePlayingFunc* get_delstate(void) const = 0; }; class EXPCL_PANDA PlayingClass { diff --git a/panda/src/audio/audio_win_traits.cxx b/panda/src/audio/audio_win_traits.cxx index 05ef64f174..f4c1d04624 100644 --- a/panda/src/audio/audio_win_traits.cxx +++ b/panda/src/audio/audio_win_traits.cxx @@ -204,12 +204,15 @@ AudioTraits::PlayerClass* WinSample::get_player(void) const { return ret; } +// REFCOUNT +/* AudioTraits::DeleteSoundFunc* WinSample::get_destroy(void) const { if (audio_cat->is_debug()) audio_cat->debug() << "winsample get_destroy returning 0x" << (void*)(WinSample::destroy) << endl; return WinSample::destroy; } +*/ AudioTraits::DeletePlayingFunc* WinSample::get_delstate(void) const { if (audio_cat->is_debug()) @@ -418,12 +421,15 @@ WinSample* WinSample::load_raw(unsigned char* data, unsigned long size) { return ret; } +// REFCOUNT +/* void WinSample::destroy(AudioTraits::SoundClass* sample) { if (audio_cat->is_debug()) audio_cat->debug() << "winsample destroy deleting 0x" << (void*)sample << endl; delete sample; } +*/ WinMusic::~WinMusic(void) { // AudioManager::stop(this); @@ -554,12 +560,15 @@ AudioTraits::PlayerClass* WinMusic::get_player(void) const { return ret; } +// REFCOUNT +/* AudioTraits::DeleteSoundFunc* WinMusic::get_destroy(void) const { if (audio_cat->is_debug()) audio_cat->debug() << "winmusic get_destroy returning 0x" << (void*)(WinMusic::destroy) << endl; return WinMusic::destroy; } +*/ AudioTraits::DeletePlayingFunc* WinMusic::get_delstate(void) const { if (audio_cat->is_debug()) @@ -568,11 +577,14 @@ AudioTraits::DeletePlayingFunc* WinMusic::get_delstate(void) const { return WinMusicPlaying::destroy; } +// REFCOUNT +/* void WinMusic::destroy(AudioTraits::SoundClass* music) { if (audio_cat->is_debug()) audio_cat->debug() << "winmusic destroy got 0x" << (void*)music << endl; delete music; } +*/ WinMusic* WinMusic::load_midi(Filename filename) { if (audio_cat->is_debug()) diff --git a/panda/src/audio/audio_win_traits.h b/panda/src/audio/audio_win_traits.h index 34acf7f9a7..266ba699cd 100644 --- a/panda/src/audio/audio_win_traits.h +++ b/panda/src/audio/audio_win_traits.h @@ -30,12 +30,14 @@ public: virtual float length(void) const; virtual AudioTraits::PlayingClass* get_state(void) const; virtual AudioTraits::PlayerClass* get_player(void) const; - virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const; + // REFCOUNT + // virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const; virtual AudioTraits::DeletePlayingFunc* get_delstate(void) const; public: static WinSample* load_wav(Filename); static WinSample* load_raw(unsigned char*, unsigned long); - static void destroy(AudioTraits::SoundClass*); + // REFCOUNT + // static void destroy(AudioTraits::SoundClass*); }; class EXPCL_PANDA WinMusic : public AudioTraits::SoundClass { @@ -55,9 +57,10 @@ public: virtual float length(void) const; virtual AudioTraits::PlayingClass* get_state(void) const; virtual AudioTraits::PlayerClass* get_player(void) const; - virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const; + // REFCOUNT + // virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const; + // static void destroy(AudioTraits::SoundClass*); virtual AudioTraits::DeletePlayingFunc* get_delstate(void) const; - static void destroy(AudioTraits::SoundClass*); // these are used by the loaders static WinMusic* load_midi(Filename); // these are used by the players