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

Unified Diff: native_client_sdk/src/examples/api/video_encode/example.js

Issue 1037793003: nacl sdk: add PPB_VideoEncoder example (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update after binji's review Created 5 years, 9 months 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 side-by-side diff with in-line comments
Download patch
Index: native_client_sdk/src/examples/api/video_encode/example.js
diff --git a/native_client_sdk/src/examples/api/video_encode/example.js b/native_client_sdk/src/examples/api/video_encode/example.js
new file mode 100644
index 0000000000000000000000000000000000000000..9cf5e626a0183f3addc133306a8e9f8d8fc3d752
--- /dev/null
+++ b/native_client_sdk/src/examples/api/video_encode/example.js
@@ -0,0 +1,126 @@
+// Copyright 2015 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.
+
+var dataArray;
+const MIME_TYPE = "application/octet-stream";
+
+function $(id) {
+ return document.getElementById(id);
+}
+
+
+function success(stream) {
+ track = stream.getVideoTracks()[0];
+ var video = $('video')
+ video.src = URL.createObjectURL(stream);
+ video.track = track;
+ video.play();
+
+ var list = $('profileList');
+ var profile = (list.length < 1) ? 'vp8'
+ : list.options[list.selectedIndex].value;
+
+ common.naclModule.postMessage({
+ command: 'start',
+ track: track,
+ profile: profile,
+ width: 640,
+ height: 480
+ });
+}
+
+function failure(e) {
+ common.logMessage("Error: " + e);
+}
+
+function cleanupDownload() {
+ var download = $('download');
+ if (!download)
+ return;
+ download.parentNode.removeChild(download);
+}
+
+function appendDownload(parent, blob, filename) {
+ var a = document.createElement('a');
+ a.id = "download";
+ a.download = filename;
+ a.href = window.URL.createObjectURL(blob);
+ a.textContent = 'Download';
+ a.dataset.downloadurl = [MIME_TYPE, a.download, a.href].join(':');
+ parent.appendChild(a);
+}
+
+function startRecord() {
+ $('length').innerHTML = ' Size: ' + dataArray.byteLength + ' bytes';
+ navigator.webkitGetUserMedia({audio: false, video: true},
+ success, failure);
+
+ $('start').disabled = true;
+ $('stop').disabled = false;
+ cleanupDownload();
+}
+
+function stopRecord() {
+ common.naclModule.postMessage({
+ command: "stop"
+ });
+ var video = $('video');
+ video.pause();
+ video.track.stop();
+ video.track = null;
+
+ $('start').disabled = false;
+ $('stop').disabled = true;
+ appendDownload($('download-box'),
+ new Blob([dataArray], { type: MIME_TYPE }),
+ 'Capture.video');
+}
+
+function handleMessage(msg) {
+ if (msg.data.name == 'data') {
+ appendData(msg.data.data);
+ } else if (msg.data.name == 'supportedProfiles') {
+ common.logMessage('profiles: ' + JSON.stringify(msg.data.profiles));
+ var profileList = $('profileList');
+ for (var node in profileList.childNodes)
+ profileList.remove(node);
+ for (var i = 0; i < msg.data.profiles.length; i++) {
+ var item = document.createElement('option');
+ item.label = item.value = msg.data.profiles[i];
+ profileList.appendChild(item);
+ }
+ $('start').disabled = !(msg.data.profiles.length > 0);
+ } else if (msg.data.name == 'log') {
+ common.logMessage(msg.data.message);
+ }
+}
+
+function resetData() {
+ dataArray = new ArrayBuffer(0);
+}
+
+function appendData(data) {
+ var tmp = new Uint8Array(dataArray.byteLength + data.byteLength);
+ tmp.set(new Uint8Array(dataArray), 0 );
+ tmp.set(new Uint8Array(data), dataArray.byteLength);
+ dataArray = tmp.buffer;
+ $('length').textContent = ' Size: ' + dataArray.byteLength + ' bytes';
+}
+
+function attachListeners() {
+ $('start').addEventListener('click', function (e) {
+ resetData();
+ startRecord();
+ });
+ $('stop').addEventListener('click', function (e) {
+ stopRecord();
+ });
+}
+
+// Called by the common.js module.
+function moduleDidLoad() {
+ // The module is not hidden by default so we can easily see if the plugin
+ // failed to load.
+ common.hideModule();
+}

Powered by Google App Engine
This is Rietveld 408576698