Changeset 217001 in webkit
- Timestamp:
- May 17, 2017 2:31:52 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r216999 r217001 1 2017-05-17 Eric Carlson <eric.carlson@apple.com> 2 3 [MediaStream] videoWidth and videoHeight should be set when 'loadedmetadata' event fires 4 https://bugs.webkit.org/show_bug.cgi?id=172223 5 <rdar://problem/31899755> 6 7 Reviewed by Jer Noble. 8 9 * fast/mediastream/get-user-media-on-loadedmetadata-expected.txt: Added. 10 * fast/mediastream/get-user-media-on-loadedmetadata.html: Added. 11 1 12 2017-05-17 Youenn Fablet <youenn@apple.com> 2 13 -
trunk/Source/WebCore/ChangeLog
r216999 r217001 1 2017-05-17 Eric Carlson <eric.carlson@apple.com> 2 3 [MediaStream] videoWidth and videoHeight should be set when 'loadedmetadata' event fires 4 https://bugs.webkit.org/show_bug.cgi?id=172223 5 <rdar://problem/31899755> 6 7 Reviewed by Jer Noble. 8 9 Test: fast/mediastream/get-user-media-on-loadedmetadata.html 10 11 * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: 12 (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentReadyState): If a stream has 13 a video track, return HaveNothing until we have a sample. 14 15 * platform/mediastream/RealtimeMediaSource.h: 16 * platform/mock/MockRealtimeAudioSource.cpp: 17 (WebCore::MockRealtimeAudioSource::tick): Optionally delay the next sample. 18 (WebCore::MockRealtimeAudioSource::delaySamples): 19 * platform/mock/MockRealtimeAudioSource.h: 20 21 * platform/mock/MockRealtimeVideoSource.cpp: 22 (WebCore::MockRealtimeVideoSource::delaySamples): 23 (WebCore::MockRealtimeVideoSource::generateFrame): Optionally delay the next sample. 24 * platform/mock/MockRealtimeVideoSource.h: 25 26 * testing/Internals.cpp: 27 (WebCore::Internals::delayMediaStreamTrackSamples): 28 * testing/Internals.h: 29 * testing/Internals.idl: 30 1 31 2017-05-17 Youenn Fablet <youenn@apple.com> 2 32 -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h
r216766 r217001 248 248 MediaPlayer::NetworkState m_networkState { MediaPlayer::Empty }; 249 249 MediaPlayer::ReadyState m_readyState { MediaPlayer::HaveNothing }; 250 MediaPlayer::ReadyState m_previousReadyState { MediaPlayer::HaveNothing };251 250 FloatSize m_intrinsicSize; 252 251 float m_volume { 1 }; … … 264 263 bool m_transformIsValid { false }; 265 264 bool m_visible { false }; 265 bool m_haveSeenMetadata { false }; 266 266 267 267 #if PLATFORM(IOS) || (PLATFORM(MAC) && ENABLE(VIDEO_PRESENTATION_MODE)) -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm
r216766 r217001 742 742 bool allTracksAreLive = true; 743 743 for (auto& track : m_mediaStreamPrivate->tracks()) { 744 if (!track->enabled() || track->readyState() != MediaStreamTrackPrivate::ReadyState::Live) {744 if (!track->enabled() || track->readyState() != MediaStreamTrackPrivate::ReadyState::Live) 745 745 allTracksAreLive = false; 746 break; 746 747 if (track == m_mediaStreamPrivate->activeVideoTrack() && !m_imagePainter.mediaSample) { 748 if (!m_haveSeenMetadata) 749 return MediaPlayer::ReadyState::HaveNothing; 750 allTracksAreLive = false; 747 751 } 748 749 if (track == m_mediaStreamPrivate->activeVideoTrack() && !m_imagePainter.mediaSample) { 750 allTracksAreLive = false; 751 break; 752 } 753 } 754 755 if (!allTracksAreLive && m_previousReadyState == MediaPlayer::ReadyState::HaveNothing) 752 } 753 754 if (!allTracksAreLive && !m_haveSeenMetadata) 756 755 return MediaPlayer::ReadyState::HaveMetadata; 757 756 … … 1079 1078 return; 1080 1079 1081 m_previousReadyState = m_readyState; 1080 if (readyState != MediaPlayer::ReadyState::HaveNothing) 1081 m_haveSeenMetadata = true; 1082 1082 m_readyState = readyState; 1083 1083 characteristicsChanged(); -
trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.h
r216999 r217001 210 210 virtual AudioSourceProvider* audioSourceProvider() { return nullptr; } 211 211 212 // Testing only 213 virtual void delaySamples(float) { }; 214 212 215 protected: 213 216 RealtimeMediaSource(const String& id, Type, const String& name); -
trunk/Source/WebCore/platform/mock/MockRealtimeAudioSource.cpp
r216898 r217001 154 154 155 155 double now = monotonicallyIncreasingTime(); 156 157 if (m_delayUntil) { 158 if (m_delayUntil < now) 159 return; 160 m_delayUntil = 0; 161 } 162 156 163 double delta = now - m_lastRenderTime; 157 164 m_lastRenderTime = now; … … 159 166 } 160 167 168 void MockRealtimeAudioSource::delaySamples(float delta) 169 { 170 m_delayUntil = monotonicallyIncreasingTime() + delta; 171 } 172 161 173 } // namespace WebCore 162 174 -
trunk/Source/WebCore/platform/mock/MockRealtimeAudioSource.h
r216898 r217001 76 76 bool isCaptureSource() const final { return true; } 77 77 78 void delaySamples(float) final; 79 78 80 RunLoop::Timer<MockRealtimeAudioSource> m_timer; 79 81 double m_startTime { NAN }; 80 82 double m_lastRenderTime { NAN }; 81 83 double m_elapsedTime { 0 }; 84 double m_delayUntil { 0 }; 82 85 }; 83 86 -
trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp
r216999 r217001 368 368 } 369 369 370 void MockRealtimeVideoSource::delaySamples(float delta) 371 { 372 m_delayUntil = monotonicallyIncreasingTime() + delta; 373 } 374 370 375 void MockRealtimeVideoSource::generateFrame() 371 376 { 377 if (m_delayUntil) { 378 if (m_delayUntil < monotonicallyIncreasingTime()) 379 return; 380 m_delayUntil = 0; 381 } 382 372 383 ImageBuffer* buffer = imageBuffer(); 373 384 if (!buffer) -
trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.h
r216898 r217001 83 83 void generateFrame(); 84 84 85 void delaySamples(float) override; 86 85 87 float m_baseFontSize { 0 }; 86 88 FontCascade m_timeFont; … … 99 101 double m_startTime { NAN }; 100 102 double m_elapsedTime { 0 }; 103 double m_delayUntil { 0 }; 101 104 102 105 unsigned m_frameNumber { 0 }; -
trunk/Source/WebCore/testing/Internals.cpp
r216999 r217001 4045 4045 } 4046 4046 4047 void Internals::delayMediaStreamTrackSamples(MediaStreamTrack& track, float delay) 4048 { 4049 track.source().delaySamples(delay); 4050 } 4051 4047 4052 #endif 4048 4053 -
trunk/Source/WebCore/testing/Internals.h
r216999 r217001 575 575 using TrackFramePromise = DOMPromiseDeferred<IDLInterface<ImageData>>; 576 576 void grabNextMediaStreamTrackFrame(TrackFramePromise&&); 577 void delayMediaStreamTrackSamples(MediaStreamTrack&, float); 577 578 #endif 578 579 -
trunk/Source/WebCore/testing/Internals.idl
r216999 r217001 537 537 [Conditional=MEDIA_STREAM] readonly attribute unsigned long trackVideoSampleCount; 538 538 [Conditional=MEDIA_STREAM, MayThrowException] void setMediaDeviceState(DOMString deviceID, DOMString property, boolean value); 539 }; 539 [Conditional=MEDIA_STREAM] void delayMediaStreamTrackSamples(MediaStreamTrack track, float delay); 540 };
Note: See TracChangeset
for help on using the changeset viewer.