Skip to content

Commit

Permalink
[BreakoutBox] Update tests for MediaStreamTrackProcessor
Browse files Browse the repository at this point in the history
Add worker tests and simplify an existing audio test

Change-Id: I513f9627ffc3646e36db9076e5e3c8580d1e2619
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2945190
Reviewed-by: Harald Alvestrand <hta@chromium.org>
Commit-Queue: Guido Urdaneta <guidou@chromium.org>
Cr-Commit-Position: refs/heads/master@{#891542}
  • Loading branch information
Guido Urdaneta authored and Chromium LUCI CQ committed Jun 11, 2021
1 parent 1e93785 commit 87f69e3
Show file tree
Hide file tree
Showing 3 changed files with 107 additions and 33 deletions.
@@ -1,43 +1,50 @@
<!doctype html>
<html>

<head>
<title>MediaStreamTrackProcessor</title>
<link rel="help" href="https://w3c.github.io/mediacapture-insertable-streams">
</head>

<body>
<p class="instructions">When prompted, use the accept button to give permission to use your audio and video devices.</p>
<h1 class="instructions">Description</h1>
<p class="instructions">This test checks that processing captured audio MediaStreamTracks works as expected.</p>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>
<p class="instructions">When prompted, use the accept button to give permission to use your audio and video devices.</p>
<h1 class="instructions">Description</h1>
<p class="instructions">This test checks that MediaStreamTrackProcessor works as expected on audio MediaStreamTracks.</p>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>
promise_test(async t => {
const stream = await navigator.mediaDevices.getUserMedia({audio: true});
const track = stream.getTracks()[0];
const processor = new MediaStreamTrackProcessor({track: track});
const reader = processor.readable.getReader();
const readResult = await reader.read();
assert_false(readResult.done)
assert_true(readResult.value instanceof AudioData);
readResult.value.close();
track.stop();
return reader.closed;
}, "Tests that the reader of an audio MediaStreamTrackProcessor produces AudioData objects and is closed on track stop");

promise_test(async t => {
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
assert_equals(stream.getAudioTracks().length, 1);
const audioTrack = stream.getAudioTracks()[0];

return new Promise((resolve, reject) => {
const writableStream = new WritableStream({
write(audioData) {
assert_true(audioData instanceof AudioData);
assert_not_equals(audioData.timestamp, null);
resolve();
},
close() {
assert_unreached("Closed");
},
abort(err) {
assert_unreached("Sink error:" + err);
}
});
const audioTrackProcessor = new MediaStreamTrackProcessor(audioTrack);
audioTrackProcessor.readable.pipeTo(writableStream);
});
}, "Tests that creating an Audio MediaStreamTrackProcessor works as expected");
</script>
promise_test(async t => {
const stream = await navigator.mediaDevices.getUserMedia({audio: true});
const track = stream.getTracks()[0];
const processor = new MediaStreamTrackProcessor({track: track});
const worker = new Worker('MediaStreamTrackProcessor-worker.js');
const promise = new Promise(resolve => {
worker.onmessage = t.step_func(msg => {
if (msg.data instanceof AudioData) {
msg.data.close();
track.stop();
} else if (msg.data == 'closed') {
resolve();
} else {
assert_unreached();
}
})
});
worker.postMessage({readable: processor.readable},
[processor.readable]);
return promise;
}, "Tests that the reader of an audio MediaStreamTrackProcessor produces AudioData objects and is closed on track stop while running on a worker");
</script>
</body>

</html>
@@ -0,0 +1,50 @@
<!doctype html>
<html>
<head>
<title>MediaStreamTrackProcessor</title>
<link rel="help" href="https://w3c.github.io/mediacapture-insertable-streams">
</head>
<body>
<p class="instructions">When prompted, use the accept button to give permission to use your audio and video devices.</p>
<h1 class="instructions">Description</h1>
<p class="instructions">This test checks that MediaStreamTrackProcessor works as expected on video MediaStreamTracks.</p>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>
promise_test(async t => {
const stream = await navigator.mediaDevices.getUserMedia({video: true});
const track = stream.getTracks()[0];
const processor = new MediaStreamTrackProcessor({track: track});
const reader = processor.readable.getReader();
const readResult = await reader.read();
assert_false(readResult.done)
assert_true(readResult.value instanceof VideoFrame);
readResult.value.close();
track.stop();
return reader.closed;
}, "Tests that the reader of a video MediaStreamTrackProcessor produces video frames and is closed on track stop");

promise_test(async t => {
const stream = await navigator.mediaDevices.getUserMedia({video: true});
const track = stream.getTracks()[0];
const processor = new MediaStreamTrackProcessor({track: track});
const worker = new Worker('MediaStreamTrackProcessor-worker.js');
const promise = new Promise(resolve => {
worker.onmessage = t.step_func(msg => {
if (msg.data instanceof VideoFrame) {
msg.data.close();
track.stop();
} else if (msg.data == 'closed') {
resolve();
} else {
assert_unreached();
}
})
});
worker.postMessage({readable: processor.readable},
[processor.readable]);
return promise;
}, "Tests that the reader of a video MediaStreamTrackProcessor produces VideoFrame objects and is closed on track stop while running on a worker");
</script>
</body>
</html>
@@ -0,0 +1,17 @@
onmessage = async msg => {
const reader = msg.data.readable.getReader();
let readResult = await reader.read();
postMessage(readResult.value);
readResult.value.close();
// Continue reading until the stream is done due to a track.stop()
while (true) {
readResult = await reader.read();
if (readResult.done) {
break;
} else {
readResult.value.close();
}
}
await reader.closed;
postMessage('closed');
}

0 comments on commit 87f69e3

Please sign in to comment.