blob: eb900fc1e677a2af656d99843bc1419593405218 [file] [edit]
<!doctype html>
<html>
<head>
<title>MediaRecorder recording video with rotation</title>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
</head>
<body>
<script>
async function record(stream, mimeType)
{
const recorder = new MediaRecorder(stream, { mimeType : mimeType });
const promise = new Promise((resolve, reject) => {
recorder.ondataavailable = (e) => {
recorder.stop();
resolve(e.data);
};
setTimeout(reject, 5000);
});
recorder.start(50);
return promise;
}
async function setVideo(t, obj)
{
const video = document.createElement('video');
video.muted = true;
video.srcObject = obj;
const watcher = new EventWatcher(t, video, [ 'loadedmetadata' ]);
await watcher.wait_for([ 'loadedmetadata' ]);
return video.videoHeight / video.videoWidth;
}
promise_test(async (t) => {
if (window.testRunner)
testRunner.setMockCameraOrientation(90);
const stream = await navigator.mediaDevices.getUserMedia({ video : true });
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
let result1 = await setVideo(t, stream);
let blob = await record(stream, 'video/webm');
assert_not_equals(blob.size, 0);
let result2 = await setVideo(t, blob);
assert_equals(result1, result2, "Height:Width ratio identical to source");
}, "WebM recorder with oriented stream");
promise_test(async (t) => {
if (window.testRunner)
testRunner.setMockCameraOrientation(90);
const stream = await navigator.mediaDevices.getUserMedia({ video : true });
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
let result1 = await setVideo(t, stream);
let blob = await record(stream, 'video/mp4');
assert_not_equals(blob.size, 0);
let result2 = await setVideo(t, blob);
assert_equals(result1, result2, "Height:Width ratio identical to source");
}, "MP4 recorder with oriented stream");
</script>
</body>
</html>