haikuwebkit/LayoutTests/fast/mediastream/mediastreamtrack-video-fram...

38 lines
1.4 KiB
HTML
Raw Permalink Normal View History

Safari doesn't apply frameRate limit when request stream from Camera https://bugs.webkit.org/show_bug.cgi?id=210186 <rdar://problem/61452794> Reviewed by Eric Carlson. Source/WebCore: Add support to RealtimeVideoSource to decimate the video samples based on the observed frame rate of its capture source. This allows supporting two tracks using the same capture device, one track being low frame rate and the other one high frame rate. Clean-up refactoring to make RealtimeVideoSource directly inherit from RealtimeVideoCaptureSource. Migrate size and format of frame adaptation from RealtimeVideoCaptureSource to RealtimeVideoSource. Fix mock capture source to update its frame rate when asked by applyConstraints. Tests: fast/mediastream/mediastreamtrack-video-frameRate-clone-decreasing.html fast/mediastream/mediastreamtrack-video-frameRate-clone-increasing.html fast/mediastream/mediastreamtrack-video-frameRate-decreasing.html fast/mediastream/mediastreamtrack-video-frameRate-increasing.html * platform/mediastream/RealtimeVideoCaptureSource.cpp: (WebCore::RealtimeVideoCaptureSource::dispatchMediaSampleToObservers): (WebCore::RealtimeVideoCaptureSource::clientUpdatedSizeAndFrameRate): * platform/mediastream/RealtimeVideoCaptureSource.h: (WebCore::RealtimeVideoCaptureSource::observedFrameRate const): * platform/mediastream/RealtimeVideoSource.cpp: (WebCore::RealtimeVideoSource::RealtimeVideoSource): (WebCore::m_source): (WebCore::RealtimeVideoSource::adaptVideoSample): (WebCore::RealtimeVideoSource::videoSampleAvailable): * platform/mediastream/RealtimeVideoSource.h: * platform/mock/MockRealtimeVideoSource.cpp: (WebCore::MockRealtimeVideoSource::setFrameRateWithPreset): * testing/Internals.cpp: (WebCore::Internals::observeMediaStreamTrack): LayoutTests: * fast/mediastream/mediastreamtrack-video-frameRate-clone-decreasing-expected.txt: Added. * fast/mediastream/mediastreamtrack-video-frameRate-clone-decreasing.html: Added. * fast/mediastream/mediastreamtrack-video-frameRate-clone-increasing-expected.txt: Added. * fast/mediastream/mediastreamtrack-video-frameRate-clone-increasing.html: Added. * fast/mediastream/mediastreamtrack-video-framerate-decreasing-expected.txt: added. * fast/mediastream/mediastreamtrack-video-framerate-decreasing.html: added. * fast/mediastream/mediastreamtrack-video-framerate-increasing-expected.txt: added. * fast/mediastream/mediastreamtrack-video-framerate-increasing.html: added. * webrtc/routines.js: Canonical link: https://commits.webkit.org/223624@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@260364 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-04-20 14:37:47 +00:00
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Adapt camera track framerate</title>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src ="../../webrtc/routines.js"></script>
</head>
<body>
<video autoplay id="video"></video>
<script>
promise_test(async (t) => {
const stream1 = await navigator.mediaDevices.getUserMedia({ video: { width: 720, frameRate : 30 } });
const stream2 = stream1.clone();
await stream2.getVideoTracks()[0].applyConstraints({ width : 160, frameRate : 5 });
// We adapt frame rate after 1 second of samples.
await new Promise(resolve => setTimeout(resolve, 1000));
let frameRate = await computeFrameRate(stream1, video);
// On heavily loaded bots, our mock capture source might not be able to deliver 30 fps. Our test only makes sense if we have sufficient fps.
if (frameRate <= 10)
return;
assert_greater_than(frameRate, 10, "stream1 frame rate above 10");
assert_less_than(frameRate, 60, "stream1 frame rate below 60");
frameRate = await computeFrameRate(stream2, video);
assert_greater_than(frameRate, 1, "stream2 frame rate above 1");
assert_less_than(frameRate, 10, "stream2 frame rate below 10");
}, "clone and applyConstraints to decrease frame rate");
</script>
</body>
</html>