From: <wjp...@us...> - 2007-08-05 17:35:13
|
Revision: 4741 http://gemrb.svn.sourceforge.net/gemrb/?rev=4741&view=rev Author: wjpalenstijn Date: 2007-08-05 10:35:02 -0700 (Sun, 05 Aug 2007) Log Message: ----------- small header cleanup Modified Paths: -------------- gemrb/trunk/gemrb/plugins/ACMImporter/ACMImp.cpp gemrb/trunk/gemrb/plugins/ACMImporter/ACMImp.h gemrb/trunk/gemrb/plugins/ACMImporter/AmbientMgrAL.cpp Modified: gemrb/trunk/gemrb/plugins/ACMImporter/ACMImp.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/ACMImporter/ACMImp.cpp 2007-08-04 09:34:37 UTC (rev 4740) +++ gemrb/trunk/gemrb/plugins/ACMImporter/ACMImp.cpp 2007-08-05 17:35:02 UTC (rev 4741) @@ -26,6 +26,8 @@ #include "../Core/Variables.h" #include "ACMImp.h" +#include "SDL.h" + #include <fcntl.h> #include <stdlib.h> #include <stdio.h> @@ -41,6 +43,15 @@ #define ACM_BUFFERSIZE 8192 #define MUSICBUFFERS 10 +struct AudioStream { + ALuint Buffer; + ALuint Source; + int Duration; + bool free; + //bool playing; + //CSoundReader* reader; +}; + static AudioStream streams[MAX_STREAMS], speech; static ALuint MusicSource, MusicBuffers[MUSICBUFFERS]; static bool musicPlaying, stayAlive; Modified: gemrb/trunk/gemrb/plugins/ACMImporter/ACMImp.h =================================================================== --- gemrb/trunk/gemrb/plugins/ACMImporter/ACMImp.h 2007-08-04 09:34:37 UTC (rev 4740) +++ gemrb/trunk/gemrb/plugins/ACMImporter/ACMImp.h 2007-08-05 17:35:02 UTC (rev 4741) @@ -25,9 +25,6 @@ #include "../Core/SoundMgr.h" #include "../Core/FileStream.h" -#include <SDL.h> -#include <SDL_thread.h> - class AmbientMgrAL; #ifndef WIN32 @@ -45,15 +42,6 @@ // the distance at which sound is played at full volume #define REFERENCE_DISTANCE 50 -typedef struct AudioStream { - ALuint Buffer; - ALuint Source; - int Duration; - bool free; - //bool playing; - //CSoundReader* reader; -} AudioStream; - class ACMImp : public SoundMgr { private: void clearstreams(); Modified: gemrb/trunk/gemrb/plugins/ACMImporter/AmbientMgrAL.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/ACMImporter/AmbientMgrAL.cpp 2007-08-04 09:34:37 UTC (rev 4740) +++ gemrb/trunk/gemrb/plugins/ACMImporter/AmbientMgrAL.cpp 2007-08-05 17:35:02 UTC (rev 4741) @@ -28,6 +28,8 @@ #include "ACMImp.h" #include "AmbientMgrAL.h" +#include "SDL.h" + // legal nop if already reset void AmbientMgrAL::reset() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wjp...@us...> - 2007-11-30 23:26:48
|
Revision: 4851 http://gemrb.svn.sourceforge.net/gemrb/?rev=4851&view=rev Author: wjpalenstijn Date: 2007-11-30 15:26:49 -0800 (Fri, 30 Nov 2007) Log Message: ----------- count number of available openal sources Modified Paths: -------------- gemrb/trunk/gemrb/plugins/ACMImporter/ACMImp.cpp gemrb/trunk/gemrb/plugins/ACMImporter/ACMImp.h Modified: gemrb/trunk/gemrb/plugins/ACMImporter/ACMImp.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/ACMImporter/ACMImp.cpp 2007-11-25 17:09:29 UTC (rev 4850) +++ gemrb/trunk/gemrb/plugins/ACMImporter/ACMImp.cpp 2007-11-30 23:26:49 UTC (rev 4851) @@ -103,6 +103,28 @@ } // +static int CountAvailableSources(int limit) +{ + ALuint* src = new ALuint[limit+2]; + int i; + for (i = 0; i < limit+2; ++i) { + alGenSources(1, &src[i]); + if (alGetError() != AL_NO_ERROR) { + --i; + break; + } + } + alDeleteSources(i+1, src); + delete[] src; + + // Leave two sources free for internal OpenAL usage + i -= 2; + + // Return number of succesfully allocated sources + return (i+1); +} + + static int isWAVC(DataStream* stream) { if (!stream) { @@ -161,7 +183,7 @@ alDeleteBuffers( 1, &MusicBuffers[i] ); } } - for (int i = 0; i < MAX_STREAMS; i++) { + for (int i = 0; i < num_streams; i++) { if(!streams[i].free) { if (alIsSource(streams[i].Source)) { alSourceStop( streams[i].Source ); @@ -279,6 +301,15 @@ for (i = 0; i < MAX_STREAMS; i++) { streams[i].free = true; } + + // MAX_STREAMS + 1 for music + 1 for speech + int sources = CountAvailableSources(MAX_STREAMS+2); + num_streams = sources - 2; + + if (num_streams < MAX_STREAMS) { + printMessage( "ACMImp","Allocated fewer streams than desired. ", YELLOW ); + } + speech.free = true; MusicReader = NULL; musicPlaying = false; @@ -434,8 +465,6 @@ */ unsigned int ACMImp::Play(const char* ResRef, int XPos, int YPos, unsigned int flags) { - unsigned int i; - int time_length; ALuint Buffer = LoadSound(ResRef, &time_length); if (0 == Buffer) { @@ -507,7 +536,8 @@ return 0; } - for (i = 0; i < MAX_STREAMS; i++) { + int i; + for (i = 0; i < num_streams; i++) { if (!streams[i].free && alIsSource(streams[i].Source)) { alGetSourcei( streams[i].Source, AL_SOURCE_STATE, &state ); if (state == AL_STOPPED) { Modified: gemrb/trunk/gemrb/plugins/ACMImporter/ACMImp.h =================================================================== --- gemrb/trunk/gemrb/plugins/ACMImporter/ACMImp.h 2007-11-25 17:09:29 UTC (rev 4850) +++ gemrb/trunk/gemrb/plugins/ACMImporter/ACMImp.h 2007-11-30 23:26:49 UTC (rev 4851) @@ -60,11 +60,14 @@ void UpdateViewportPos(int XPos, int YPos); void UpdateVolume( unsigned int which = GEM_SND_VOL_MUSIC | GEM_SND_VOL_AMBIENTS ); static ALuint LoadSound(const char *sound, int *time_length = NULL); -public: + void release(void) { delete this; } + +private: + int num_streams; }; #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wjp...@us...> - 2007-12-02 15:18:49
|
Revision: 4853 http://gemrb.svn.sourceforge.net/gemrb/?rev=4853&view=rev Author: wjpalenstijn Date: 2007-12-02 07:18:53 -0800 (Sun, 02 Dec 2007) Log Message: ----------- utility class: StackLock for locking mutexes while object is in scope Modified Paths: -------------- gemrb/trunk/gemrb/plugins/ACMImporter/Makefile.am Added Paths: ----------- gemrb/trunk/gemrb/plugins/ACMImporter/StackLock.cpp gemrb/trunk/gemrb/plugins/ACMImporter/StackLock.h Modified: gemrb/trunk/gemrb/plugins/ACMImporter/Makefile.am =================================================================== --- gemrb/trunk/gemrb/plugins/ACMImporter/Makefile.am 2007-12-02 00:50:10 UTC (rev 4852) +++ gemrb/trunk/gemrb/plugins/ACMImporter/Makefile.am 2007-12-02 15:18:53 UTC (rev 4853) @@ -3,5 +3,5 @@ libACMImporter_la_LDFLAGS = -module -version-info 0:0:0 @SDL_LIBS@ @LIBPTHREAD@ @OPENAL_LIBS@ libACMImporter_la_LIBADD = ../Core/libgemrb_core.la libACMImporter_la_METASOURCES = AUTO -libACMImporter_la_SOURCES = unpacker.cpp riffhdr.cpp readers.cpp decoder.cpp ACMImporterCD.cpp ACMImporter.cpp ACMImp.cpp AmbientMgrAL.cpp +libACMImporter_la_SOURCES = unpacker.cpp riffhdr.cpp readers.cpp decoder.cpp ACMImporterCD.cpp ACMImporter.cpp ACMImp.cpp AmbientMgrAL.cpp StackLock.cpp noinst_HEADERS = ACMImp.h ACMImporterCD.h decoder.h general.h readers.h riffhdr.h unpacker.h AmbientMgrAL.h Added: gemrb/trunk/gemrb/plugins/ACMImporter/StackLock.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/ACMImporter/StackLock.cpp (rev 0) +++ gemrb/trunk/gemrb/plugins/ACMImporter/StackLock.cpp 2007-12-02 15:18:53 UTC (rev 4853) @@ -0,0 +1,54 @@ +/* GemRB - Infinity Engine Emulator + * Copyright (C) 2007 The GemRB Project + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * $Id$ + * + */ + +#include "StackLock.h" + +// adapted from ScummVM's mutex.cpp + +StackLock::StackLock(SDL_mutex* mutex, const char *mutexName) + : _mutex(mutex), _mutexName(mutexName) { + lock(); +} + +StackLock::~StackLock() { + unlock(); +} + +void StackLock::lock() { +#if 0 + if (_mutexName != NULL) { + fprintf(stderr, "Locking mutex %s\n", _mutexName); + } +#endif + + SDL_mutexP(_mutex); +} + +void StackLock::unlock() { +#if 0 + if (_mutexName != NULL) { + fprintf(stderr, "Unlocking mutex %s\n", _mutexName); + } +#endif + + SDL_mutexV(_mutex); +} + Property changes on: gemrb/trunk/gemrb/plugins/ACMImporter/StackLock.cpp ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: gemrb/trunk/gemrb/plugins/ACMImporter/StackLock.h =================================================================== --- gemrb/trunk/gemrb/plugins/ACMImporter/StackLock.h (rev 0) +++ gemrb/trunk/gemrb/plugins/ACMImporter/StackLock.h 2007-12-02 15:18:53 UTC (rev 4853) @@ -0,0 +1,39 @@ +/* GemRB - Infinity Engine Emulator + * Copyright (C) 2007 The GemRB Project + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * $Id$ + * + */ + +#include "SDL_mutex.h" + +// Copied from ScummVM, mutex.h + +/** + * Auxillary class to (un)lock a mutex on the stack. + */ +class StackLock { + SDL_mutex* _mutex; + const char *_mutexName; + + void lock(); + void unlock(); +public: + StackLock(SDL_mutex* mutex, const char *mutexName = NULL); + ~StackLock(); +}; + Property changes on: gemrb/trunk/gemrb/plugins/ACMImporter/StackLock.h ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wjp...@us...> - 2007-12-02 17:41:26
|
Revision: 4856 http://gemrb.svn.sourceforge.net/gemrb/?rev=4856&view=rev Author: wjpalenstijn Date: 2007-12-02 09:41:30 -0800 (Sun, 02 Dec 2007) Log Message: ----------- minor cleanup/comment Modified Paths: -------------- gemrb/trunk/gemrb/plugins/ACMImporter/readers.cpp gemrb/trunk/gemrb/plugins/ACMImporter/readers.h Modified: gemrb/trunk/gemrb/plugins/ACMImporter/readers.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/ACMImporter/readers.cpp 2007-12-02 17:40:46 UTC (rev 4855) +++ gemrb/trunk/gemrb/plugins/ACMImporter/readers.cpp 2007-12-02 17:41:30 UTC (rev 4856) @@ -67,7 +67,7 @@ return vb->GetPos(); } -static int ovfd_close(void */*datasource*/) { +static int ovfd_close(void * /*datasource*/) { return 0; } Modified: gemrb/trunk/gemrb/plugins/ACMImporter/readers.h =================================================================== --- gemrb/trunk/gemrb/plugins/ACMImporter/readers.h 2007-12-02 17:40:46 UTC (rev 4855) +++ gemrb/trunk/gemrb/plugins/ACMImporter/readers.h 2007-12-02 17:41:30 UTC (rev 4856) @@ -41,6 +41,8 @@ class CSoundReader { protected: int samples; // total count of sound samples + // one sample consists of + // channels * (is16bit ? 2 : 1) bytes int channels; int samplerate; int samples_left; // count of unread samples This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wjp...@us...> - 2007-12-02 22:42:09
|
Revision: 4860 http://gemrb.svn.sourceforge.net/gemrb/?rev=4860&view=rev Author: wjpalenstijn Date: 2007-12-02 14:42:13 -0800 (Sun, 02 Dec 2007) Log Message: ----------- TODO comments Modified Paths: -------------- gemrb/trunk/gemrb/plugins/ACMImporter/ACMImp.cpp gemrb/trunk/gemrb/plugins/ACMImporter/AmbientMgrAL.cpp Modified: gemrb/trunk/gemrb/plugins/ACMImporter/ACMImp.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/ACMImporter/ACMImp.cpp 2007-12-02 22:02:08 UTC (rev 4859) +++ gemrb/trunk/gemrb/plugins/ACMImporter/ACMImp.cpp 2007-12-02 22:42:13 UTC (rev 4860) @@ -53,6 +53,7 @@ // TODO: limit the number of ambient streams // TODO: is loading resources as done in LoadSound thread-safe? +// TODO: rename ACMImp to OpenALSound, SoundReader to ACMImp? struct AudioStream { ALuint Buffer; Modified: gemrb/trunk/gemrb/plugins/ACMImporter/AmbientMgrAL.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/ACMImporter/AmbientMgrAL.cpp 2007-12-02 22:02:08 UTC (rev 4859) +++ gemrb/trunk/gemrb/plugins/ACMImporter/AmbientMgrAL.cpp 2007-12-02 22:42:13 UTC (rev 4860) @@ -30,6 +30,8 @@ #include "SDL.h" +// TODO: remove last dependencies on OpenAL, and then rename and move it? + // legal nop if already reset void AmbientMgrAL::reset() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |