<!DOCTYPE html>
<html>
<head>
<title>MediaStream Recorder Cros Test (w/ MediaSource)</title>
</head>
<body>
  <div>MediaRecorder HW-encode-used test.</div>
  <video id="video" autoplay></video>
</body>
<script>

'use strict';

var testProgress = 0;

const DEFAULT_CONSTRAINTS = {audio: true, video: true};

function createAndStartMediaRecorder(stream, mimeType) {
  return new Promise(function(resolve, reject) {
    document.getElementById('video').srcObject = stream;
    var recorder = new MediaRecorder(stream, {'mimeType' : mimeType});
    console.log('Recorder object created.');
    recorder.start(1);
    resolve(recorder);
  });
}

// Creates a MediaRecorder and starts recording. Caller can check
// the generated histograms to verify whether HW encode is used.
function startRecording(codec) {
  var mimeType = 'video/webm; codecs=' + codec;
  var videoSize = 0;
  var emptyBlobs = 0;
  var timeStamps = [];
  // This records from a fake media device.
  navigator.mediaDevices.getUserMedia(DEFAULT_CONSTRAINTS)
      .then(function(stream) {
        return createAndStartMediaRecorder(stream, mimeType);
      })
      .then(function(recorder) {
        recorder.ondataavailable = function(event) {
          if (event.data.size > 0)
            testProgress = 1;
        };
      });
}

</script>
</body>
</html>
