Browse Source

Source:seek didn't work properly for streaming sources, fixed that

--HG--
branch : minor
Bill Meltsner 14 years ago
parent
commit
37560e36c3
1 changed files with 15 additions and 4 deletions
  1. 15 4
      src/modules/audio/openal/Source.cpp

+ 15 - 4
src/modules/audio/openal/Source.cpp

@@ -225,13 +225,24 @@ namespace openal
 		{
 			switch (unit) {
 				case Source::UNIT_SAMPLES:
-					if (type == TYPE_STREAM) offset -= offsetSamples;
-					alSourcef(source, AL_SAMPLE_OFFSET, offset);
+					if (type == TYPE_STREAM) {
+						ALint buffer;
+						alGetSourcei(source, AL_BUFFER, &buffer);
+						int freq;
+						alGetBufferi(buffer, AL_FREQUENCY, &freq);
+						offset /= freq;
+						decoder->seek(offset);
+					} else {
+						alSourcef(source, AL_SAMPLE_OFFSET, offset);
+					}
 					break;
 				case Source::UNIT_SECONDS:	
 				default:
-					if (type == TYPE_STREAM) offset -= offsetSeconds;
-					alSourcef(source, AL_SEC_OFFSET, offset);
+					if (type == TYPE_STREAM) {
+						decoder->seek(offset);
+					} else {
+						alSourcef(source, AL_SEC_OFFSET, offset);
+					}
 					break;
 			}
 		}