| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // These must match with how the video and canvas tags are declared in html. | 5 // These must match with how the video and canvas tags are declared in html. |
| 6 const VIDEO_TAG_WIDTH = 320; | 6 const VIDEO_TAG_WIDTH = 320; |
| 7 const VIDEO_TAG_HEIGHT = 240; | 7 const VIDEO_TAG_HEIGHT = 240; |
| 8 | 8 |
| 9 // Fake video capture background green is of value 135. | 9 // Fake video capture background green is of value 135. |
| 10 const COLOR_BACKGROUND_GREEN = 135; | 10 const COLOR_BACKGROUND_GREEN = 135; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 45 } | 45 } |
| 46 | 46 |
| 47 function detectVideoStopped(videoElementName, callback) { | 47 function detectVideoStopped(videoElementName, callback) { |
| 48 detectVideo(videoElementName, | 48 detectVideo(videoElementName, |
| 49 function (pixels, previous_pixels) { | 49 function (pixels, previous_pixels) { |
| 50 return !isVideoPlaying(pixels, previous_pixels); | 50 return !isVideoPlaying(pixels, previous_pixels); |
| 51 }, | 51 }, |
| 52 callback); | 52 callback); |
| 53 } | 53 } |
| 54 | 54 |
| 55 function detectBlackVideo(videoElementName, callback) { | |
| 56 detectVideo(videoElementName, | |
| 57 function (pixels, previous_pixels) { | |
| 58 return isVideoBlack(pixels); | |
| 59 }, | |
| 60 callback); | |
| 61 } | |
| 62 | |
| 63 function detectVideo(videoElementName, predicate, callback) { | 55 function detectVideo(videoElementName, predicate, callback) { |
| 64 console.log('Looking at video in element ' + videoElementName); | 56 console.log('Looking at video in element ' + videoElementName); |
| 65 | 57 |
| 66 var width = VIDEO_TAG_WIDTH; | 58 var width = VIDEO_TAG_WIDTH; |
| 67 var height = VIDEO_TAG_HEIGHT; | 59 var height = VIDEO_TAG_HEIGHT; |
| 68 var videoElement = $(videoElementName); | 60 var videoElement = $(videoElementName); |
| 69 var canvas = $(videoElementName + '-canvas'); | 61 var canvas = $(videoElementName + '-canvas'); |
| 70 var oldPixels = []; | 62 var oldPixels = []; |
| 71 var waitVideo = setInterval(function() { | 63 var waitVideo = setInterval(function() { |
| 72 var context = canvas.getContext('2d'); | 64 var context = canvas.getContext('2d'); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 98 function waitForVideo(videoElement) { | 90 function waitForVideo(videoElement) { |
| 99 addExpectedEvent(); | 91 addExpectedEvent(); |
| 100 detectVideoPlaying(videoElement, function () { eventOccured(); }); | 92 detectVideoPlaying(videoElement, function () { eventOccured(); }); |
| 101 } | 93 } |
| 102 | 94 |
| 103 function waitForVideoToStop(videoElement) { | 95 function waitForVideoToStop(videoElement) { |
| 104 addExpectedEvent(); | 96 addExpectedEvent(); |
| 105 detectVideoStopped(videoElement, function () { eventOccured(); }); | 97 detectVideoStopped(videoElement, function () { eventOccured(); }); |
| 106 } | 98 } |
| 107 | 99 |
| 108 function waitForBlackVideo(videoElement) { | |
| 109 addExpectedEvent(); | |
| 110 detectBlackVideo(videoElement, function () { eventOccured(); }); | |
| 111 } | |
| 112 | |
| 113 // Calculates the current frame rate and compares to |expected_frame_rate| | 100 // Calculates the current frame rate and compares to |expected_frame_rate| |
| 114 // |callback| is triggered with value |true| if the calculated frame rate | 101 // |callback| is triggered with value |true| if the calculated frame rate |
| 115 // is +-1 the expected or |false| if five calculations fail to match | 102 // is +-1 the expected or |false| if five calculations fail to match |
| 116 // |expected_frame_rate|. | 103 // |expected_frame_rate|. |
| 117 function validateFrameRate(videoElementName, expected_frame_rate, callback) { | 104 function validateFrameRate(videoElementName, expected_frame_rate, callback) { |
| 118 var videoElement = $(videoElementName); | 105 var videoElement = $(videoElementName); |
| 119 var startTime = new Date().getTime(); | 106 var startTime = new Date().getTime(); |
| 120 var decodedFrames = videoElement.webkitDecodedFrameCount; | 107 var decodedFrames = videoElement.webkitDecodedFrameCount; |
| 121 var attempts = 0; | 108 var attempts = 0; |
| 122 | 109 |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 177 // pixels are changed. | 164 // pixels are changed. |
| 178 function isVideoPlaying(pixels, previousPixels) { | 165 function isVideoPlaying(pixels, previousPixels) { |
| 179 for (var i = 0; i < pixels.length; i++) { | 166 for (var i = 0; i < pixels.length; i++) { |
| 180 if (pixels[i] != previousPixels[i]) { | 167 if (pixels[i] != previousPixels[i]) { |
| 181 return true; | 168 return true; |
| 182 } | 169 } |
| 183 } | 170 } |
| 184 return false; | 171 return false; |
| 185 } | 172 } |
| 186 | 173 |
| 187 function isVideoBlack(pixels) { | |
| 188 for (var i = 0; i < pixels.length; i++) { | |
| 189 // |pixels| is in RGBA. Ignore the alpha channel. | |
| 190 if (pixels[i] != 0 && (i + 1) % 4 != 0) { | |
| 191 return false; | |
| 192 } | |
| 193 } | |
| 194 return true; | |
| 195 } | |
| 196 | |
| 197 // This function matches |left| and |right| and fails the test if the | 174 // This function matches |left| and |right| and fails the test if the |
| 198 // values don't match using normal javascript equality (i.e. the hard | 175 // values don't match using normal javascript equality (i.e. the hard |
| 199 // types of the operands aren't checked). | 176 // types of the operands aren't checked). |
| 200 function assertEquals(expected, actual) { | 177 function assertEquals(expected, actual) { |
| 201 if (actual != expected) { | 178 if (actual != expected) { |
| 202 failTest("expected '" + expected + "', got '" + actual + "'."); | 179 failTest("expected '" + expected + "', got '" + actual + "'."); |
| 203 } | 180 } |
| 204 } | 181 } |
| 205 | 182 |
| 206 function assertNotEquals(expected, actual) { | 183 function assertNotEquals(expected, actual) { |
| 207 if (actual === expected) { | 184 if (actual === expected) { |
| 208 failTest("expected '" + expected + "', got '" + actual + "'."); | 185 failTest("expected '" + expected + "', got '" + actual + "'."); |
| 209 } | 186 } |
| 210 } | 187 } |
| 211 | 188 |
| OLD | NEW |