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(); |
+} |