Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(343)

Side by Side Diff: content/test/data/media/webrtc_test_utilities.js

Issue 68263016: Add simple test for VideoTrack.stop(). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Added comments. Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « content/test/data/media/peerconnection-call.html ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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;
11 11
12 // Number of test events to occur before the test pass. When the test pass, 12 // Number of test events to occur before the test pass. When the test pass,
13 // the function gAllEventsOccured is called. 13 // the function gAllEventsOccured is called.
14 var gNumberOfExpectedEvents = 0; 14 var gNumberOfExpectedEvents = 0;
15 15
16 // Number of events that currently have occurred. 16 // Number of events that currently have occurred.
17 var gNumberOfEvents = 0; 17 var gNumberOfEvents = 0;
18 18
19 var gAllEventsOccured = function () {}; 19 var gAllEventsOccured = function () {};
20 20
21 // Use this function to set a function that will be called once all expected 21 // Use this function to set a function that will be called once all expected
22 // events has occurred. 22 // events has occurred.
23 function setAllEventsOccuredHandler(handler) { 23 function setAllEventsOccuredHandler(handler) {
24 gAllEventsOccured = handler; 24 gAllEventsOccured = handler;
25 } 25 }
26 26
27 function detectVideoIn(videoElementName, callback) { 27 function detectVideoPlaying(videoElementName, callback) {
28 detectVideo(videoElementName, isVideoPlaying, callback);
29 }
30
31 function detectVideoStopped(videoElementName, callback) {
32 detectVideo(videoElementName,
33 function (pixels, previous_pixels) {
34 return !isVideoPlaying(pixels, previous_pixels);
35 },
36 callback);
37 }
38
39 function detectVideo(videoElementName, predicate, callback) {
28 var width = VIDEO_TAG_WIDTH; 40 var width = VIDEO_TAG_WIDTH;
29 var height = VIDEO_TAG_HEIGHT; 41 var height = VIDEO_TAG_HEIGHT;
30 var videoElement = $(videoElementName); 42 var videoElement = $(videoElementName);
31 var canvas = $(videoElementName + '-canvas'); 43 var canvas = $(videoElementName + '-canvas');
44 var old_pixels = [];
32 var waitVideo = setInterval(function() { 45 var waitVideo = setInterval(function() {
33 var context = canvas.getContext('2d'); 46 var context = canvas.getContext('2d');
34 context.drawImage(videoElement, 0, 0, width, height); 47 context.drawImage(videoElement, 0, 0, width, height);
35 var pixels = context.getImageData(0, 0, width, height).data; 48 var pixels = context.getImageData(0, 0 , width, height / 3).data;
36 49 // Check that there is an old and a new picture with the same size to
37 if (isVideoPlaying(pixels, width, height)) { 50 // compare and use the function |predicate| to detect the video state in
51 // that case.
52 if (old_pixels.length == pixels.length &&
53 predicate(pixels, old_pixels)) {
38 clearInterval(waitVideo); 54 clearInterval(waitVideo);
39 callback(); 55 callback();
40 } 56 }
41 }, 100); 57 old_pixels = pixels;
58 }, 200);
42 } 59 }
43 60
44 function waitForVideo(videoElement) { 61 function waitForVideo(videoElement) {
45 document.title = 'Waiting for video...'; 62 document.title = 'Waiting for video...';
46 addExpectedEvent(); 63 addExpectedEvent();
47 detectVideoIn(videoElement, function () { eventOccured(); }); 64 detectVideoPlaying(videoElement, function () { eventOccured(); });
65 }
66
67 function waitForVideoToStop(videoElement) {
68 document.title = 'Waiting for video to stop...';
69 addExpectedEvent();
70 detectVideoStopped(videoElement, function () { eventOccured(); });
48 } 71 }
49 72
50 function waitForConnectionToStabilize(peerConnection) { 73 function waitForConnectionToStabilize(peerConnection) {
51 addExpectedEvent(); 74 addExpectedEvent();
52 var waitForStabilization = setInterval(function() { 75 var waitForStabilization = setInterval(function() {
53 if (peerConnection.signalingState == 'stable') { 76 if (peerConnection.signalingState == 'stable') {
54 clearInterval(waitForStabilization); 77 clearInterval(waitForStabilization);
55 eventOccured(); 78 eventOccured();
56 } 79 }
57 }, 100); 80 }, 100);
58 } 81 }
59 82
60 function addExpectedEvent() { 83 function addExpectedEvent() {
61 ++gNumberOfExpectedEvents; 84 ++gNumberOfExpectedEvents;
62 } 85 }
63 86
64 function eventOccured() { 87 function eventOccured() {
65 ++gNumberOfEvents; 88 ++gNumberOfEvents;
66 if (gNumberOfEvents == gNumberOfExpectedEvents) { 89 if (gNumberOfEvents == gNumberOfExpectedEvents) {
67 gAllEventsOccured(); 90 gAllEventsOccured();
68 } 91 }
69 } 92 }
70 93
71 // This very basic video verification algorithm will be satisfied if any 94 // This very basic video verification algorithm will be satisfied if any
72 // pixels are nonzero in a small sample area in the middle. It relies on the 95 // pixels are changed.
73 // assumption that a video element with null source just presents zeroes. 96 function isVideoPlaying(pixels, previous_pixels) {
74 function isVideoPlaying(pixels, width, height) { 97 for (var i = 0; i < pixels.length; i++) {
75 // Sample somewhere near the middle of the image. 98 if (pixels[i] != previous_pixels[i]) {
76 var middle = width * height / 2;
77 for (var i = 0; i < 20; i++) {
78 if (pixels[middle + i] > 0) {
79 return true; 99 return true;
80 } 100 }
81 } 101 }
82 return false; 102 return false;
83 } 103 }
84 104
85 // This function matches |left| and |right| and throws an exception if the 105 // This function matches |left| and |right| and throws an exception if the
86 // values don't match. 106 // values don't match.
87 function expectEquals(left, right) { 107 function expectEquals(left, right) {
88 if (left != right) { 108 if (left != right) {
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 detectedAspectRatioString += " cropped"; 191 detectedAspectRatioString += " cropped";
172 } else 192 } else
173 detectedAspectRatioString += " letterbox"; 193 detectedAspectRatioString += " letterbox";
174 194
175 console.log("Original image is: " + detectedAspectRatioString); 195 console.log("Original image is: " + detectedAspectRatioString);
176 callback(detectedAspectRatioString); 196 callback(detectedAspectRatioString);
177 } 197 }
178 }, 198 },
179 50); 199 50);
180 } 200 }
OLDNEW
« no previous file with comments | « content/test/data/media/peerconnection-call.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698