blob: 21cf32d038e7a4054cc091003096ef8af6c52605 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<title>Media Capture from Canvas Browser Test</title>
</head>
<body>
<div> Capture and playback from canvas elements.</div>
</body>
<script type="text/javascript" src="webrtc_test_utilities.js"></script>
<script>
'use strict';
const NUMBER_OF_EVENTS_TO_RECORD = 15;
const ON_DATA_AVAILABLE_THRESHOLD = 10;
function checkForRedraw(canvas, drawCounter, drawFunction) {
if (++drawCounter <= NUMBER_OF_EVENTS_TO_RECORD)
requestAnimationFrame(function(){drawFunction(canvas, drawCounter)})
}
function draw2d(canvas, drawCounter) {
var ctx = canvas.getContext('2d');
ctx.fillStyle = 'green';
ctx.fillRect(0, 0, canvas.width, canvas.height);
checkForRedraw(canvas, drawCounter, draw2d);
};
function drawWebGL(canvas, drawCounter) {
var gl = canvas.getContext('webgl');
gl.clearColor(0, 1, 0, 1);
gl.clear(gl.COLOR_BUFFER_BIT);
checkForRedraw(canvas, drawCounter, drawWebGL);
};
function drawOffscreenCanvas(canvas, drawCounter) {
var ctx = canvas.getContext('2d');
ctx.fillStyle = 'green';
ctx.fillRect(0, 0, canvas.width, canvas.height);
checkForRedraw(canvas, drawCounter, drawOffscreenCanvas);
};
function drawBitmapRenderer(canvas, drawCounter) {
var gl = canvas.getContext('bitmaprenderer');
var offscreen = new OffscreenCanvas(canvas.width, canvas.height);
var ctx = offscreen.getContext('2d');
ctx.fillStyle = 'green';
ctx.fillRect(0, 0, canvas.width, canvas.height);
gl.transferFromImageBitmap(offscreen.transferToImageBitmap());
checkForRedraw(canvas, drawCounter, drawBitmapRenderer);
};
function testCanvasCapture(drawFunction) {
var canvas = document.createElement('canvas');
canvas.width = canvas.height = 64;
var stream = canvas.captureStream();
assertTrue(stream, 'Error creating MediaStream');
assertEquals(1, stream.getVideoTracks().length);
assertEquals(0, stream.getAudioTracks().length);
var recorded_events = 0;
const recorder = new MediaRecorder(stream);
assertTrue(recorder, 'Error creating recorder out of the MediaStream');
recorder.ondataavailable = function(event) {
if (event.data.size > ON_DATA_AVAILABLE_THRESHOLD) {
if (++recorded_events == NUMBER_OF_EVENTS_TO_RECORD)
reportTestSuccess();
}
};
recorder.start(0);
if (drawFunction.toString() == drawOffscreenCanvas.toString()) {
var offscreen = canvas.transferControlToOffscreen();
drawFunction(offscreen, 0);
} else {
drawFunction(canvas, 0);
}
}
</script>
</body>
</html>