blob: 3d8d4d2afbcae150b77bac96578298c81fb8bbae [file] [log] [blame]
/**
* Copyright (c) 2012 The Chromium Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
/**
* FPS at which we would like to sample.
* @private
*/
var gFps = 30;
/**
* The duration of the all frame capture in milliseconds.
* @private
*/
var gCaptureDuration = 0;
/**
* The recorded video encoded in Base64.
* @private
*/
var gVideoBase64 = '';
/**
* Chunks of the video recorded by MediaRecorded as they become available.
* @private
*/
var gChunks = [];
/**
* A string to be returned to the test about the current status of capture.
*/
var gCapturingStatus = 'capturing-not-started';
/**
* Starts the frame capturing.
*
* @param {!Object} The video tag from which the height and width parameters are
* to be extracted.
* @param {Number} The duration of the frame capture in seconds.
*/
function startFrameCapture(videoTag, duration) {
var inputElement = document.getElementById('local-view');
var width = inputElement.videoWidth;
var height = inputElement.videoHeight;
// |videoBitsPerSecond| is set to a large number to indicate VP8 to throw as
// little information away as possible.
var mediaRecorderOptions = {'videoBitsPerSecond': 4 * width * height * gFps};
var stream = getStreamFromElement_(videoTag);
gCaptureDuration = 1000 * duration;
var mediaRecorder = new MediaRecorder(stream, mediaRecorderOptions);
mediaRecorder.ondataavailable = function(recording) {
gChunks.push(recording.data);
}
mediaRecorder.onstop = function() {
var videoBlob = new Blob(gChunks, {type: "video/webm"});
gChunks = [];
var reader = new FileReader();
reader.onloadend = function() {
gVideoBase64 = reader.result.substr(reader.result.indexOf(',') + 1);
gCapturingStatus = 'done-capturing';
debug('done-capturing');
}
reader.readAsDataURL(videoBlob);
}
mediaRecorder.start();
setTimeout(function() { mediaRecorder.stop(); }, gCaptureDuration);
gCapturingStatus = 'still-capturing';
}
/**
* Returns the video recorded by RecordMedia encoded in Base64.
*/
function getRecordedVideoAsBase64() {
silentReturnToTest(gVideoBase64);
}
/**
* Queries if we're done with the frame capturing yet.
*/
function doneFrameCapturing() {
returnToTest(gCapturingStatus);
}
/**
* Returns the stream from the input element to be attached to MediaRecorder.
* @private
*/
function getStreamFromElement_(element) {
if (element.srcObject !== undefined) {
return element.srcObject;
} else if (element.src !== undefined) {
return element.src;
} else {
failTest('Error extracting stream from element.');
}
}