| <html> |
| <head> |
| <title>Drawing to canvas using video</title> |
| <script src=media-file.js></script> |
| <script> |
| var video; |
| var numberOfSeeks = 4; |
| |
| var expectedResults = [ |
| // [x, y, r, g, b] |
| [40, 165, 200, 200, 0], // yellow |
| [56, 165, 57, 202, 203], // blue/cyan |
| [73, 165, 53, 203, 9], // green |
| ]; |
| |
| if (window.testRunner) { |
| testRunner.dumpAsText(true); |
| testRunner.waitUntilDone(); |
| } |
| |
| function checkColorAtLocation(ctx, x, y, r, g, b, tolerance) |
| { |
| var buffer = ctx.getImageData(x, y, 1, 1).data; |
| if (Math.abs(buffer[0] - r) < tolerance |
| && Math.abs(buffer[1] - g) < tolerance |
| && Math.abs(buffer[2] - b) < tolerance) |
| logResult(true, "Saw close enough to (" + r + ", " + g + ", " + b + ") at (" + x + ", " + y + ")"); |
| else |
| logResult(false, "Expected (" + r + ", " + g + ", " + b + ") at (" + x + ", " + y + ") but saw (" + buffer[0] + ", " + buffer[1] + ", " + buffer[2] + ")"); |
| } |
| |
| function drawAndInsertFrame() |
| { |
| var canvas = document.createElement('canvas'); |
| canvas.width = video.videoWidth; |
| canvas.height = video.videoHeight; |
| var ctx = canvas.getContext('2d'); |
| ctx.drawImage(video, 0, 0, canvas.width, canvas.height); |
| document.getElementById('canvases').appendChild(canvas); |
| |
| // The test video has a number of colored squares. |
| // Check a few of them. |
| expectedResults.forEach(function (value) { |
| checkColorAtLocation(ctx, value[0], value[1], value[2], value[3], value[4], 3); |
| }) |
| |
| // Seek a few times. We exercise different code paths |
| // for the first few and then subsequent drawImage calls. |
| if (--numberOfSeeks) { |
| video.currentTime += 0.5; |
| return; |
| } |
| |
| endTest(); |
| } |
| |
| function canplaythrough() |
| { |
| video.currentTime = 1; |
| } |
| |
| function start() |
| { |
| findMediaElement(); |
| waitForEvent('canplaythrough', canplaythrough); |
| waitForEvent('seeked', drawAndInsertFrame); |
| video.src = findMediaFile('video', 'content/test'); |
| } |
| </script> |
| <script src=video-test.js></script> |
| </head> |
| <body onload="start()"> |
| <video id="video"></video> |
| <div id="canvases"></div> |
| </body> |
| </html> |