Skip to content

Commit ff46d95

Browse files
ehsankripken
authored andcommitted
Add tests for playback states
1 parent be5bc3b commit ff46d95

File tree

2 files changed

+34
-4
lines changed

2 files changed

+34
-4
lines changed

src/library_openal.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,8 @@ var LibraryOpenAL = {
288288
src.buffer = AL.currentContext.src[source - 1].buffer;
289289
src.connect(AL.currentContext.src[source - 1].gain);
290290
src.start(0, offset);
291-
AL.currentContext.src[source - 1].playTime = AL.currentContext.ctx.currentTime;
291+
// Work around Firefox bug 851338
292+
AL.currentContext.src[source - 1].playTime = AL.currentContext.ctx.currentTime || 0;
292293
AL.currentContext.src[source - 1].paused = false;
293294
AL.currentContext.src[source - 1]['src'] = src;
294295
},
@@ -320,7 +321,8 @@ var LibraryOpenAL = {
320321
if ("src" in AL.currentContext.src[source - 1] &&
321322
!AL.currentContext.src[source - 1].paused) {
322323
AL.currentContext.src[source - 1].paused = true;
323-
AL.currentContext.src[source - 1].pausedTime = AL.currentContext.ctx.currentTime;
324+
// Work around Firefox bug 851338
325+
AL.currentContext.src[source - 1].pausedTime = AL.currentContext.ctx.currentTime || 0;
324326
AL.currentContext.src[source - 1]["src"].stop(0);
325327
delete AL.currentContext.src[source - 1].src;
326328
}

tests/openal_playback.cpp

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,28 @@
22
#include <stdlib.h>
33
#include <AL/al.h>
44
#include <AL/alc.h>
5+
#include <assert.h>
6+
#include <emscripten.h>
7+
8+
void playSource(void* arg)
9+
{
10+
ALuint source = reinterpret_cast<ALuint>(arg);
11+
ALint state;
12+
alGetSourcei(source, AL_SOURCE_STATE, &state);
13+
assert(state == AL_PLAYING);
14+
alSourcePause(source);
15+
alGetSourcei(source, AL_SOURCE_STATE, &state);
16+
assert(state == AL_PAUSED);
17+
alSourcePlay(source);
18+
alGetSourcei(source, AL_SOURCE_STATE, &state);
19+
assert(state == AL_PLAYING);
20+
alSourceStop(source);
21+
alGetSourcei(source, AL_SOURCE_STATE, &state);
22+
assert(state == AL_STOPPED);
23+
24+
int result = 1;
25+
REPORT_RESULT();
26+
}
527

628
int main() {
729
ALCdevice* device = alcOpenDevice(NULL);
@@ -78,10 +100,16 @@ int main() {
78100

79101
alSourcei(sources[0], AL_BUFFER, buffers[0]);
80102

103+
ALint state;
104+
alGetSourcei(sources[0], AL_SOURCE_STATE, &state);
105+
assert(state == AL_INITIAL);
106+
81107
alSourcePlay(sources[0]);
82108

83-
int result = 1;
84-
REPORT_RESULT();
109+
alGetSourcei(sources[0], AL_SOURCE_STATE, &state);
110+
assert(state == AL_PLAYING);
111+
112+
emscripten_async_call(playSource, reinterpret_cast<void*>(sources[0]), 700);
85113

86114
return 0;
87115
}

0 commit comments

Comments
 (0)