diff --git a/src/modules/audio/openal/Pool.cpp b/src/modules/audio/openal/Pool.cpp index ff0cec43d..c9c81e64e 100644 --- a/src/modules/audio/openal/Pool.cpp +++ b/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); diff --git a/src/modules/audio/openal/Pool.h b/src/modules/audio/openal/Pool.h index b8a00dd75..03d650ec8 100644 --- a/src/modules/audio/openal/Pool.h +++ b/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); diff --git a/src/modules/audio/openal/Source.cpp b/src/modules/audio/openal/Source.cpp index 4345d7ef0..40f6f697a 100644 --- a/src/modules/audio/openal/Source.cpp +++ b/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)