| Index: chrome/browser/resources/chromeos/user_images_grid.js
|
| diff --git a/chrome/browser/resources/chromeos/user_images_grid.js b/chrome/browser/resources/chromeos/user_images_grid.js
|
| index 0fa9ba1d7dbc6b0646f6bbc78145d83b017e4a2d..b64b7aedab955ec1ab5f46b41ea1683293ee2f24 100644
|
| --- a/chrome/browser/resources/chromeos/user_images_grid.js
|
| +++ b/chrome/browser/resources/chromeos/user_images_grid.js
|
| @@ -8,6 +8,18 @@
|
| /** @const */ var GridItem = cr.ui.GridItem;
|
| /** @const */ var GridSelectionController = cr.ui.GridSelectionController;
|
| /** @const */ var ListSingleSelectionModel = cr.ui.ListSingleSelectionModel;
|
| +
|
| + /**
|
| + * Number of frames recorded by takeVideo().
|
| + * @const
|
| + */
|
| + var RECORD_FRAMES = 48;
|
| +
|
| + /**
|
| + * FPS at which camera stream is recorded.
|
| + * @const
|
| + */
|
| + var RECORD_FPS = 16;
|
|
|
| /**
|
| * Dimensions for camera capture.
|
| @@ -479,6 +491,29 @@
|
| },
|
|
|
| /**
|
| + * Performs video capture from the live camera stream.
|
| + * @param {function=} opt_callback Callback that receives taken video as
|
| + * data URL of a vertically stacked PNG sprite.
|
| + */
|
| + takeVideo: function(opt_callback) {
|
| + var canvas = document.createElement('canvas');
|
| + canvas.width = CAPTURE_SIZE.width;
|
| + canvas.height = CAPTURE_SIZE.height * RECORD_FRAMES;
|
| + var ctx = canvas.getContext('2d');
|
| + // Force canvas initialization to prevent FPS lag on the first frame.
|
| + ctx.fillRect(0, 0, 1, 1);
|
| + var captureData = {
|
| + callback: opt_callback,
|
| + canvas: canvas,
|
| + ctx: ctx,
|
| + frameNo: 0,
|
| + lastTimestamp: new Date().getTime()
|
| + };
|
| + captureData.timer = window.setInterval(
|
| + this.captureVideoFrame_.bind(this, captureData), 1000 / RECORD_FPS);
|
| + },
|
| +
|
| + /**
|
| * Discard current photo and return to the live camera stream.
|
| */
|
| discardPhoto: function() {
|
| @@ -532,6 +567,27 @@
|
| ctx.scale(-1.0, 1.0);
|
| ctx.drawImage(source, 0, 0);
|
| return canvas.toDataURL('image/png');
|
| + },
|
| +
|
| + /**
|
| + * Capture next frame of the video being recorded after a takeVideo() call.
|
| + * @param {Object} data Property bag with the recorder details.
|
| + * @private
|
| + */
|
| + captureVideoFrame_: function(data) {
|
| + var lastTimestamp = new Date().getTime();
|
| + var delayMs = lastTimestamp - data.lastTimestamp;
|
| + console.error('Delay: ' + delayMs + ' (' + (1000 / delayMs + ' FPS)'));
|
| + data.lastTimestamp = lastTimestamp;
|
| +
|
| + this.captureFrame_(this.cameraVideo_, data.ctx, CAPTURE_SIZE);
|
| + data.ctx.translate(0, CAPTURE_SIZE.height);
|
| +
|
| + if (++data.frameNo == RECORD_FRAMES) {
|
| + window.clearTimeout(data.timer);
|
| + if (data.callback && typeof data.callback == 'function')
|
| + data.callback(data.canvas.toDataURL('image/png'));
|
| + }
|
| },
|
|
|
| /**
|
|
|