Browse Source

REALLY fix stopping sources

Bart van Strien 14 years ago
parent
commit
c47a7c563b

+ 7 - 0
src/modules/audio/openal/Pool.cpp

@@ -209,6 +209,13 @@ namespace openal
 			i->first->rewindAtomic();
 	}
 
+	// For those times we don't need it backed.
+	void Pool::softRewind(Source * source)
+	{
+		thread::Lock lock(mutex);
+		source->rewindAtomic();
+	}
+
 	void Pool::rewind(Source * source)
 	{
 		thread::Lock lock(mutex);

+ 1 - 0
src/modules/audio/openal/Pool.h

@@ -100,6 +100,7 @@ namespace openal
 		void resume(Source * source);
 		void rewind();
 		void rewind(Source * source);
+		void softRewind(Source * source);
 		void seek(Source * source, float offset, void * unit);
 		float tell(Source * source, void * unit);
 

+ 7 - 1
src/modules/audio/openal/Source.cpp

@@ -95,7 +95,7 @@ namespace openal
 		if (!isStopped())
 		{
 			pool->stop(this);
-			rewind();
+			pool->softRewind(this);
 		}
 	}
 
@@ -476,6 +476,12 @@ namespace openal
 			offsetSamples = 0;
 			offsetSeconds = 0;
 		}
+		else if (type == TYPE_STREAM)
+		{
+			decoder->rewind();
+			offsetSamples = 0;
+			offsetSeconds = 0;
+		}
 	}
 
 	void Source::reset(ALenum source)