Changeset 250853 in webkit
- Timestamp:
- Oct 8, 2019 12:53:56 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r250852 r250853 1 2019-10-08 youenn fablet <youenn@apple.com> 2 3 MediaStreamTrack should be a PlatformMediaSessionClient instead of MediaStream 4 https://bugs.webkit.org/show_bug.cgi?id=202631 5 6 Reviewed by Eric Carlson. 7 8 * fast/mediastream/audio-track-enabled.html: 9 1 10 2019-10-08 Brady Eidson <beidson@apple.com> 2 11 -
trunk/LayoutTests/fast/mediastream/audio-track-enabled.html
r250663 r250853 24 24 await new Promise(resolve => setTimeout(resolve, 10)); 25 25 assert_equals(internals.audioSessionCategory(), "PlayAndRecord"); 26 27 stream.removeTrack(stream.getAudioTracks()[0]); 28 await new Promise(resolve => setTimeout(resolve, 10)); 29 assert_equals(internals.audioSessionCategory(), "PlayAndRecord"); 26 30 }, "Check audio session state in case of disabled audio tracks"); 27 31 </script> -
trunk/Source/WebCore/ChangeLog
r250852 r250853 1 2019-10-08 youenn fablet <youenn@apple.com> 2 3 MediaStreamTrack should be a PlatformMediaSessionClient instead of MediaStream 4 https://bugs.webkit.org/show_bug.cgi?id=202631 5 6 Reviewed by Eric Carlson. 7 8 Make MediaStreamTrack a PlatformMediaSessionClient, which allows tracking tracks that are not owned by a stream. 9 MediaStream is no longer a PlatformMediaSessionClient so we move some of MediaStream API implementation to MediaStreamTrack. 10 11 Covered by updated test. 12 13 * Modules/mediastream/MediaStream.cpp: 14 (WebCore::MediaStream::MediaStream): 15 (WebCore::MediaStream::startProducingData): 16 (WebCore::MediaStream::stopProducingData): 17 (WebCore::MediaStream::statusDidChange): 18 (WebCore::MediaStream::mediaType const): Deleted. 19 (WebCore::MediaStream::presentationType const): Deleted. 20 (WebCore::MediaStream::characteristics const): Deleted. 21 (WebCore::MediaStream::mayResumePlayback): Deleted. 22 (WebCore::MediaStream::suspendPlayback): Deleted. 23 (WebCore::MediaStream::sourceApplicationIdentifier const): Deleted. 24 (WebCore::MediaStream::canProduceAudio const): Deleted. 25 (WebCore::MediaStream::processingUserGestureForMedia const): Deleted. 26 * Modules/mediastream/MediaStream.h: 27 * Modules/mediastream/MediaStreamTrack.cpp: 28 (WebCore::MediaStreamTrack::MediaStreamTrack): 29 (WebCore::MediaStreamTrack::configureTrackRendering): 30 (WebCore::MediaStreamTrack::mediaType const): 31 (WebCore::MediaStreamTrack::presentationType const): 32 (WebCore::MediaStreamTrack::characteristics const): 33 (WebCore::MediaStreamTrack::mayResumePlayback): 34 (WebCore::MediaStreamTrack::suspendPlayback): 35 (WebCore::MediaStreamTrack::sourceApplicationIdentifier const): 36 (WebCore::MediaStreamTrack::canProduceAudio const): 37 (WebCore::MediaStreamTrack::processingUserGestureForMedia const): 38 * Modules/mediastream/MediaStreamTrack.h: 39 * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: 40 (WebCore::MediaPlayerPrivateGStreamer::load): 41 * platform/mediastream/MediaStreamPrivate.cpp: 42 (WebCore::MediaStreamPrivate::hasVideo const): 43 (WebCore::MediaStreamPrivate::hasAudio const): 44 (WebCore::MediaStreamPrivate::hasCaptureVideoSource const): Deleted. 45 (WebCore::MediaStreamPrivate::hasCaptureAudioSource const): Deleted. 46 * platform/mediastream/MediaStreamPrivate.h: 47 * platform/mediastream/MediaStreamTrackPrivate.h: 48 1 49 2019-10-08 Brady Eidson <beidson@apple.com> 2 50 -
trunk/Source/WebCore/Modules/mediastream/MediaStream.cpp
r250663 r250853 80 80 : ActiveDOMObject(document) 81 81 , m_private(MediaStreamPrivate::create(document.logger(), createTrackPrivateVector(tracks))) 82 , m_mediaSession(PlatformMediaSession::create(*this))83 82 { 84 83 // This constructor preserves MediaStreamTrack instances and must be used by calls originating … … 98 97 : ActiveDOMObject(document) 99 98 , m_private(WTFMove(streamPrivate)) 100 , m_mediaSession(PlatformMediaSession::create(*this))101 99 { 102 100 ALWAYS_LOG(LOGIDENTIFIER); … … 303 301 return; 304 302 m_isProducingData = true; 305 306 m_mediaSession->canProduceAudioChanged();307 303 m_private->startProducingData(); 308 304 } … … 310 306 void MediaStream::stopProducingData() 311 307 { 308 ALWAYS_LOG(LOGIDENTIFIER); 309 312 310 if (!m_isProducingData) 313 311 return; 314 312 315 ALWAYS_LOG(LOGIDENTIFIER);316 317 313 m_isProducingData = false; 318 319 m_mediaSession->canProduceAudioChanged();320 321 314 m_private->stopProducingData(); 322 315 } … … 337 330 void MediaStream::statusDidChange() 338 331 { 339 m_mediaSession->canProduceAudioChanged(); 340 341 if (Document* document = this->document()) { 332 if (auto* document = this->document()) { 342 333 if (!m_isActive) 343 334 return; … … 400 391 } 401 392 402 PlatformMediaSession::MediaType MediaStream::mediaType() const403 {404 // We only need to override the type when capturing audio, HTMLMediaElement and/or WebAudio405 // will do the right thing when a stream is attached to a media element or an audio context.406 if (m_private->hasCaptureAudioSource())407 return PlatformMediaSession::MediaStreamCapturingAudio;408 409 return PlatformMediaSession::None;410 }411 412 PlatformMediaSession::MediaType MediaStream::presentationType() const413 {414 return mediaType();415 }416 417 PlatformMediaSession::CharacteristicsFlags MediaStream::characteristics() const418 {419 PlatformMediaSession::CharacteristicsFlags state = PlatformMediaSession::HasNothing;420 421 if (!m_isProducingData)422 return state;423 424 if (m_private->hasAudio())425 state |= PlatformMediaSession::HasAudio;426 427 if (m_private->hasVideo())428 state |= PlatformMediaSession::HasVideo;429 430 return state;431 }432 433 void MediaStream::mayResumePlayback(bool)434 {435 // FIXME: should a media stream pay attention to this directly, or only when attached to a media element?436 }437 438 void MediaStream::suspendPlayback()439 {440 // FIXME: should a media stream pay attention to this directly, or only when attached to a media element?441 }442 443 String MediaStream::sourceApplicationIdentifier() const444 {445 Document* document = this->document();446 if (document && document->frame()) {447 if (NetworkingContext* networkingContext = document->frame()->loader().networkingContext())448 return networkingContext->sourceApplicationIdentifier();449 }450 451 return emptyString();452 }453 454 bool MediaStream::canProduceAudio() const455 {456 return !muted() && active() && m_private->hasAudio() && m_isProducingData;457 }458 459 bool MediaStream::processingUserGestureForMedia() const460 {461 return document() ? document()->processingUserGestureForMedia() : false;462 }463 464 393 void MediaStream::stop() 465 394 { -
trunk/Source/WebCore/Modules/mediastream/MediaStream.h
r248997 r250853 36 36 #include "MediaStreamPrivate.h" 37 37 #include "MediaStreamTrack.h" 38 #include "PlatformMediaSession.h"39 38 #include "ScriptWrappable.h" 40 39 #include "Timer.h" … … 55 54 , public MediaStreamPrivate::Observer 56 55 , private MediaCanStartListener 57 , private PlatformMediaSessionClient58 56 #if !RELEASE_LOG_DISABLED 59 57 , private LoggerHelper … … 146 144 void mediaCanStart(Document&) final; 147 145 148 // PlatformMediaSessionClient149 PlatformMediaSession::MediaType mediaType() const final;150 PlatformMediaSession::MediaType presentationType() const final;151 PlatformMediaSession::CharacteristicsFlags characteristics() const final;152 void mayResumePlayback(bool shouldResume) final;153 void suspendPlayback() final;154 bool canReceiveRemoteControlCommands() const final { return false; }155 void didReceiveRemoteControlCommand(PlatformMediaSession::RemoteControlCommandType, const PlatformMediaSession::RemoteCommandArgument*) final { }156 bool supportsSeeking() const final { return false; }157 bool shouldOverrideBackgroundPlaybackRestriction(PlatformMediaSession::InterruptionType) const final { return false; }158 String sourceApplicationIdentifier() const final;159 bool canProduceAudio() const final;160 Document* hostingDocument() const final { return document(); }161 bool processingUserGestureForMedia() const final;162 bool shouldOverridePauseDuringRouteChange() const final { return true; }163 164 146 // ActiveDOMObject API. 165 147 void stop() final; … … 179 161 180 162 Vector<Observer*> m_observers; 181 std::unique_ptr<PlatformMediaSession> m_mediaSession;182 163 183 164 MediaProducer::MediaStateFlags m_state { MediaProducer::IsNotPlaying }; -
trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp
r250824 r250853 71 71 , m_taskQueue(context) 72 72 , m_isCaptureTrack(m_private->isCaptureTrack()) 73 , m_mediaSession(PlatformMediaSession::create(*this)) 73 74 { 74 75 ALWAYS_LOG(LOGIDENTIFIER); … … 556 557 { 557 558 m_taskQueue.enqueueTask([this] { 559 if (m_mediaSession && m_private->type() == RealtimeMediaSource::Type::Audio) 560 m_mediaSession->canProduceAudioChanged(); 561 558 562 if (auto document = this->document()) 559 563 document->updateIsPlayingMedia(); … … 595 599 } 596 600 601 PlatformMediaSession::MediaType MediaStreamTrack::mediaType() const 602 { 603 return (isCaptureTrack() && canProduceAudio()) ? PlatformMediaSession::MediaStreamCapturingAudio : PlatformMediaSession::None; 604 } 605 606 PlatformMediaSession::MediaType MediaStreamTrack::presentationType() const 607 { 608 return mediaType(); 609 } 610 611 PlatformMediaSession::CharacteristicsFlags MediaStreamTrack::characteristics() const 612 { 613 if (!m_private->isActive()) 614 return PlatformMediaSession::HasNothing; 615 616 return m_private->type() == RealtimeMediaSource::Type::Audio ? PlatformMediaSession::HasAudio : PlatformMediaSession::HasVideo; 617 } 618 619 void MediaStreamTrack::mayResumePlayback(bool) 620 { 621 // FIXME: should a media stream track pay attention to this directly, or only when attached to a media element? 622 } 623 624 void MediaStreamTrack::suspendPlayback() 625 { 626 // FIXME: should a media stream track pay attention to this directly, or only when attached to a media element? 627 } 628 629 String MediaStreamTrack::sourceApplicationIdentifier() const 630 { 631 auto* document = this->document(); 632 if (document && document->frame()) { 633 if (auto* networkingContext = document->frame()->loader().networkingContext()) 634 return networkingContext->sourceApplicationIdentifier(); 635 } 636 637 return emptyString(); 638 } 639 640 bool MediaStreamTrack::canProduceAudio() const 641 { 642 return m_private->type() == RealtimeMediaSource::Type::Audio && !ended() && !muted(); 643 } 644 645 bool MediaStreamTrack::processingUserGestureForMedia() const 646 { 647 return document() ? document()->processingUserGestureForMedia() : false; 648 } 649 597 650 #if !RELEASE_LOG_DISABLED 598 651 WTFLogChannel& MediaStreamTrack::logChannel() const -
trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.h
r250774 r250853 38 38 #include "MediaStreamTrackPrivate.h" 39 39 #include "MediaTrackConstraints.h" 40 #include "PlatformMediaSession.h" 40 41 #include <wtf/LoggerHelper.h> 41 42 … … 55 56 , public MediaProducer 56 57 , private MediaStreamTrackPrivate::Observer 58 , private PlatformMediaSessionClient 57 59 #if !RELEASE_LOG_DISABLED 58 60 , private LoggerHelper … … 195 197 void trackEnabledChanged(MediaStreamTrackPrivate&) final; 196 198 199 // PlatformMediaSessionClient 200 PlatformMediaSession::MediaType mediaType() const final; 201 PlatformMediaSession::MediaType presentationType() const final; 202 PlatformMediaSession::CharacteristicsFlags characteristics() const final; 203 void mayResumePlayback(bool shouldResume) final; 204 void suspendPlayback() final; 205 bool canReceiveRemoteControlCommands() const final { return false; } 206 void didReceiveRemoteControlCommand(PlatformMediaSession::RemoteControlCommandType, const PlatformMediaSession::RemoteCommandArgument*) final { } 207 bool supportsSeeking() const final { return false; } 208 bool shouldOverrideBackgroundPlaybackRestriction(PlatformMediaSession::InterruptionType) const final { return false; } 209 String sourceApplicationIdentifier() const final; 210 bool canProduceAudio() const final; 211 Document* hostingDocument() const final { return document(); } 212 bool processingUserGestureForMedia() const final; 213 bool shouldOverridePauseDuringRouteChange() const final { return true; } 214 197 215 #if !RELEASE_LOG_DISABLED 198 216 const char* logClassName() const final { return "MediaStreamTrack"; } … … 209 227 bool m_ended { false }; 210 228 const bool m_isCaptureTrack { false }; 229 std::unique_ptr<PlatformMediaSession> m_mediaSession; 211 230 }; 212 231 -
trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
r250624 r250853 329 329 m_streamPrivate = &stream; 330 330 static Atomic<uint32_t> pipelineId; 331 auto pipelineName = makeString("mediastream-", 332 (stream.hasCaptureVideoSource() || stream.hasCaptureAudioSource()) ? "local" : "remote", 333 "-", pipelineId.exchangeAdd(1)); 331 auto pipelineName = makeString("mediastream-", pipelineId.exchangeAdd(1)); 334 332 335 333 loadFull(String("mediastream://") + stream.id(), pipelineName); -
trunk/Source/WebCore/platform/mediastream/MediaStreamPrivate.cpp
r250663 r250853 203 203 { 204 204 for (auto& track : m_trackSet.values()) { 205 if (track->type() == RealtimeMediaSource::Type::Video && track-> enabled() && !track->ended())205 if (track->type() == RealtimeMediaSource::Type::Video && track->isActive()) 206 206 return true; 207 207 } … … 212 212 { 213 213 for (auto& track : m_trackSet.values()) { 214 if (track->type() == RealtimeMediaSource::Type::Audio && track->enabled() && !track->ended()) 215 return true; 216 } 217 return false; 218 } 219 220 bool MediaStreamPrivate::hasCaptureVideoSource() const 221 { 222 for (auto& track : m_trackSet.values()) { 223 if (track->type() == RealtimeMediaSource::Type::Video && track->isCaptureTrack()) 224 return true; 225 } 226 return false; 227 } 228 229 bool MediaStreamPrivate::hasCaptureAudioSource() const 230 { 231 for (auto& track : m_trackSet.values()) { 232 if (track->type() == RealtimeMediaSource::Type::Audio && track->isCaptureTrack() && !track->ended() && !track->muted()) 214 if (track->type() == RealtimeMediaSource::Type::Audio && track->isActive()) 233 215 return true; 234 216 } -
trunk/Source/WebCore/platform/mediastream/MediaStreamPrivate.h
r249718 r250853 102 102 bool muted() const; 103 103 104 bool hasCaptureVideoSource() const;105 bool hasCaptureAudioSource() const;106 107 104 FloatSize intrinsicSize() const; 108 105 -
trunk/Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.h
r249134 r250853 75 75 const String& id() const { return m_id; } 76 76 const String& label() const; 77 78 bool isActive() const { return enabled() && !ended() && !muted(); } 77 79 78 80 bool ended() const { return m_isEnded; }
Note: See TracChangeset
for help on using the changeset viewer.