Index: chrome/test/data/webrtc/video_extraction.js |
diff --git a/chrome/test/data/webrtc/video_extraction.js b/chrome/test/data/webrtc/video_extraction.js |
index 93cf9e7fc49312342d6aab5981f2dd9bf666a273..c7bbd8f87c92ddba3305a4498001b6116da559b2 100644 |
--- a/chrome/test/data/webrtc/video_extraction.js |
+++ b/chrome/test/data/webrtc/video_extraction.js |
@@ -11,6 +11,12 @@ |
var gVideoId = 'remote-view'; |
/** |
+ * The ID of the canvas tag from which the frames are captured. |
+ * @private |
+ */ |
+var gCanvasId = 'remote-canvas'; |
+ |
+/** |
* Counts the number of frames that have been captured. Used in timeout |
* adjustments. |
* @private |
@@ -78,25 +84,46 @@ window.onload = function() { |
/** |
* Starts the frame capturing. |
* |
- * @param {Number} The width of the video/canvas area to be captured. |
- * @param {Number} The height of the video area to be captured. |
- * @param {Number} The height of the canvas where we put the video frames. |
+ * @param {!Object} The video tag from which the height and width parameters are |
+ to be extracted. |
* @param {Number} The frame rate at which we would like to capture frames. |
* @param {Number} The duration of the frame capture in seconds. |
*/ |
-function startFrameCapture(width, height, canvas_height, frame_rate, duration){ |
+function startFrameCapture(videoTag, frame_rate, duration) { |
gFrameCaptureInterval = 1000/frame_rate; |
gCaptureDuration = 1000 * duration; |
+ var width = videoTag.videoWidth; |
+ var height = videoTag.videoHeight; |
+ |
+ if (width == 0 || height == 0) { |
+ throw failTest('Trying to capture from ' + videoTag.id + |
+ ' but it is not playing any video.'); |
+ } |
+ |
+ setCanvasDimensions_(width, height); |
console.log('Received width is: ' + width + ', received height is: ' + height |
+ ', capture interval is: ' + gFrameCaptureInterval + |
', duration is: ' + gCaptureDuration); |
+ |
gStartOfTime = new Date().getTime(); |
- setTimeout(function() { shoot(width, height, canvas_height); }, |
+ setTimeout(function() { shoot(width, height); }, |
gFrameCaptureInterval); |
} |
/** |
+ * Sets the canvas dimensions. |
+ * @private |
+ * @param {Number} The width of the canvas. |
+ * @param {Number} The height of the canvas. |
+*/ |
+function setCanvasDimensions_(width, height) { |
+ var canvas = document.getElementById(gCanvasId); |
+ canvas.width = width; |
+ canvas.height = height; |
+} |
+ |
+/** |
* Captures an image frame from the provided video element. |
* |
* @param {Video} video HTML5 video element from where the image frame will |
@@ -107,7 +134,7 @@ function startFrameCapture(width, height, canvas_height, frame_rate, duration){ |
* @return {Canvas} |
*/ |
function capture(video, width, height) { |
- var canvas = document.getElementById('remote-canvas'); |
+ var canvas = document.getElementById(gCanvasId); |
var ctx = canvas.getContext('2d'); |
ctx.drawImage(video, 0, 0, width, height); |
return canvas; |
@@ -121,9 +148,8 @@ function capture(video, width, height) { |
* |
* @param {Number} The width of the video/canvas area to be captured. |
* @param {Number} The height of the video area to be captured. |
- * @param {Number} The height of the canvas where we put the video frames. |
*/ |
-function shoot(width, height, canvas_height){ |
+function shoot(width, height) { |
// The first two captured frames have big difference between the ideal time |
// interval between two frames and the real one. As a consequence this affects |
// enormously the interval adjustment for subsequent frames. That's why we |
@@ -141,14 +167,8 @@ function shoot(width, height, canvas_height){ |
// Extract the data from the canvas. |
var ctx = canvas.getContext('2d'); |
- var img; |
- if (height == canvas_height) { |
- // We capture the whole video frame. |
- img = ctx.getImageData(0, 0, width, height); |
- } else { |
- // We capture only the barcode (canvas_height is the height of the barcode). |
- img = ctx.getImageData(0, 0, width, canvas_height); |
- } |
+ // We capture the whole video frame. |
+ var img = ctx.getImageData(0, 0, width, height); |
gFrames.push(img.data.buffer); |
gFrameCounter++; |
@@ -160,7 +180,7 @@ function shoot(width, height, canvas_height){ |
if (real_time_elapsed < gCaptureDuration) { |
// If duration isn't over shoot again |
- setTimeout(function() { shoot(width, height, canvas_height); }, |
+ setTimeout(function() { shoot(width, height); }, |
gFrameCaptureInterval - diff); |
} else { // Else reset gFrameCounter and send the frames |
dDoneFrameCapturing = true; |